Page 1 of 1

XBrowse + MySql (SOLUCIONADO)

PostPosted: Fri Mar 02, 2012 8:51 pm
by FranciscoA
Amigos del foro.
Tengo un xbrowse del cual quiero actualizar algunos registros segun una condicion dada. Estoy empezando con MySql+TMySql. Llevo dos dias perdidos "googleando" y haciendo pruebas.

Esta es la parte del codigo que necesito resolver:

Esta sentencia trabaja bien, no tengo problemas
oServer:Query( "UPDATE catalogo SET auxi = 'N' WHERE SubString(codicont,1,4) = '1101' ORDER BY codicont" )

Perooo, necesito automatizar. Algo asi:

aCuentas:={"1101","1102","1103"}

aList := HB_ATokens( Alltrim(cCuentas), "/" )

FOR n := 1 to len( aList )
cCta:= aList[n]

oServer:Query( "UPDATE catalogo SET auxi = 'N' WHERE SubString(codicont,1,4) = cCta ORDER BY codicont" )
//LO ANTERIOR DA EL ERROR DE QUE NO EXISTE LA COLUMNA cCta. Estoy de acuerdo, MySql asi lo toma.
//Entonces, ¿ como puedo ejecutar la sentencia utilizando una variable?

if oServer:lError
msginfo(oServer:Error)
endif
NEXT

Agradezco de antemano.

Re: XBrowse + MySql

PostPosted: Fri Mar 02, 2012 9:15 pm
by Willi Quintana
Talvez asi:
Code: Select all  Expand view

aCuentas:={"1101","1102","1103"}

aList := HB_ATokens( Alltrim(cCuentas), "/" )

FOR n := 1 to len( aList )
   cCta:= aList[n]
 
   oServer:Query( "UPDATE catalogo SET auxi = 'N' WHERE SubString(codicont,1,4) = '" + cCta  + "' ORDER BY codicont" )

   if oServer:lError
      msginfo(oServer:Error)
   endif
NEXT n

 

Re: XBrowse + MySql

PostPosted: Fri Mar 02, 2012 10:34 pm
by FranciscoA
Willi,
Funcionó perfecto. Quedo muy agradecido.
Saludos.

Re: XBrowse + MySql (SOLUCIONADO)

PostPosted: Fri Mar 02, 2012 11:35 pm
by RenOmaS
Buenas
Solo para uma observacion, en el comando que envias, creo que ' ORDER BY codicont' esta demas.

salu2

Re: XBrowse + MySql

PostPosted: Sat Mar 03, 2012 3:00 am
by FranciscoA
RenOmaS, tienes razon.

Willi y RenOmaS:
Y como quien pregunta saber quiere, precisamente en la misma sentencia tengo una inquietud similar a la anterior:
oServer:Query( "UPDATE catalogo SET auxi = 'N' WHERE SubString(codicont,1,4) = '" + cCta + "' ORDER BY codicont" )
Como se puede ver, coloco literalmente el segundo parametro de SubString(codicont,1,4).
local nLen:=LEN(NIV1)
¿Como se hace para poder pasarlo como una variable? Ej: SubString(codicont,1,nLen).
Porque asi no hace nada ni tanpoco asi: SubString(codicont,1,Len(NIV1)).

Lo que pasa es que tengo un #DEFINE NIV1 SPACE(4) cuya constante la utilizo en muchas partes del sistema que estoy tratando de pasar de DBF a MySql.

Por otra parte, podrian ayudarme a localizar un manual de MySql con buenos ejemplos? ya que los que he bajado de la red no incluyen estos tipos de necesidades, y casi todos son copia uno del otro.

Agradezco cualquier aporte que puedan brindar.

Saludos.

Re: XBrowse + MySql

PostPosted: Sat Mar 03, 2012 3:13 am
by Willi Quintana
Al vuelo,,, debe funcionar (Mr. RenOmas, salu2,,,, la clausula "' ORDER BY " en el UPDATE esta contemplada...)

Code: Select all  Expand view

aCuentas:={"1101","1102","1103"}

aList := HB_ATokens( Alltrim(cCuentas), "/" )

FOR n := 1 to len( aList )
   cCta:= aList[n]
 
   oServer:Query( "UPDATE catalogo SET auxi = 'N' WHERE SubString(codicont,1," + STR(LEN(NIV1)) + ") = '" + cCta  + "' ORDER BY codicont" )

   if oServer:lError
      msginfo(oServer:Error)
   endif
NEXT n


 

Re: XBrowse + MySql

PostPosted: Sat Mar 03, 2012 3:22 am
by FranciscoA
Willi... sencillamente perfecto!
Gracias nuevamente.

Saludos.