Página 1 de 1

Error Grave (Eso Creo) en DataControls Usando MySql

Publicado: Jue Oct 02, 2008 2:29 am
por Martin Del Angel
Buen Dia a Todos !
No se si existe algún truco, o si tengo que poner el SQL_MODE de alguna
manera para que no pase lo siguiente:
En cualquier campo Char o VarChar enlazado con TDBMaskEdit, puedo
teclear cualquier caracter excepto estos: la comilla ' y la diagonal
invertida(backslash) . porque si los tecleo y hago un Update() , me
saca del programa y sale este error.
Subsystem Call: MySQL
System Code: -1
Default Status: .T.
Description: You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right
syntax to use near ''PROMULGATED 75'' WHERE tipostarifa.TARIFA_ID=
3' at line 1
Operation: TMYSQLRECORDS:REPLACE
Arguments: [ 1] = Type: C Val: UPDATE tipostarifa SET
TARIFA='PROMULGATED 75'' WHERE tipostarifa.TARIFA_ID= 3
Involved File:
Dos Error Code: 0
Trace Through:
TMYSQLRECORDS:REPLACE (499)
TMYSQLRECORDS:UPDATE (341)
TSQLQUERY:UPDATE (488)
TTIPOSTARIFA:BTNGRABARCLICK (108)
TBTNBMP:ONCLICK (0)
TBTNBMP:CLICK (99)
(b)XCONTROL:XCONTROL (145)
TBTNBMP:COMMAND (0)
TSCROLLINGWINCONTROL:WMCOMMAND (255)
TTIPOSTARIFA:WMCOMMAND (889)
RUNFORM (0)
TAPPLICATION:RUN (209)
MAIN (16)
Salio este error porque le puse la comilla en la captura (despues del
75) , igual pasa con la diagonal invertida.
Error de Programación ? ó Restricción del Motor de Base de Datos en
este caso MYSQL.
Saludos...

Error Grave (Eso Creo) en DataControls Usando MySql

Publicado: Jue Oct 02, 2008 2:46 am
por Rene Flores
Martin:
Corrijanme si estoy equivocado:
en el caso del , creo que tienes que ponerlo doble
y en el caso de la comilla sencilla ahi si vas a tener problemas porque
por defaul la comilla sencilla se utiliza para delimitar los strings (en
todos los SQL), por eso te marca error.
Saludos
Rene Flores
http://www.ciber-tec.com
Del Angel escribió:
> Buen Dia a Todos !
>
> No se si existe algún truco, o si tengo que poner el SQL_MODE de alguna
> manera para que no pase lo siguiente:
>
> En cualquier campo Char o VarChar enlazado con TDBMaskEdit, puedo
> teclear cualquier caracter excepto estos: la comilla ' y la diagonal
> invertida(backslash) . porque si los tecleo y hago un Update() , me
> saca del programa y sale este error.
>
>
> Subsystem Call: MySQL
> System Code: -1
> Default Status: .T.
> Description: You have an error in your SQL syntax; check the manual
> that corresponds to your MySQL server version for the right syntax to
> use near ''PROMULGATED 75'' WHERE tipostarifa.TARIFA_ID= 3' at line 1
> Operation: TMYSQLRECORDS:REPLACE
> Arguments: [ 1] = Type: C Val: UPDATE tipostarifa SET
> TARIFA='PROMULGATED 75'' WHERE tipostarifa.TARIFA_ID= 3
> Involved File:
> Dos Error Code: 0
>
> Trace Through:
> TMYSQLRECORDS:REPLACE (499)
> TMYSQLRECORDS:UPDATE (341)
> TSQLQUERY:UPDATE (488)
> TTIPOSTARIFA:BTNGRABARCLICK (108)
> TBTNBMP:ONCLICK (0)
> TBTNBMP:CLICK (99)
> (b)XCONTROL:XCONTROL (145)
> TBTNBMP:COMMAND (0)
> TSCROLLINGWINCONTROL:WMCOMMAND (255)
> TTIPOSTARIFA:WMCOMMAND (889)
> RUNFORM (0)
> TAPPLICATION:RUN (209)
> MAIN (16)
>
>
>
> Salio este error porque le puse la comilla en la captura (despues del
> 75) , igual pasa con la diagonal invertida.
>
> Error de Programación ? ó Restricción del Motor de Base de Datos en
> este caso MYSQL.
>
> Saludos...

Error Grave (Eso Creo) en DataControls Usando MySql

Publicado: Jue Oct 02, 2008 8:03 am
por Martin Del Angel
Rene Flores escribió:
> Martin:
>
> Corrijanme si estoy equivocado:
>
> en el caso del , creo que tienes que ponerlo doble
>
> y en el caso de la comilla sencilla ahi si vas a tener problemas porque
> por defaul la comilla sencilla se utiliza para delimitar los strings (en
> todos los SQL), por eso te marca error.
>
> Saludos
>
> Rene Flores
> http://www.ciber-tec.com
>
>
> Del Angel escribió:
>> Buen Dia a Todos !
>>
>> No se si existe algún truco, o si tengo que poner el SQL_MODE de
>> alguna manera para que no pase lo siguiente:
>>
>> En cualquier campo Char o VarChar enlazado con TDBMaskEdit, puedo
>> teclear cualquier caracter excepto estos: la comilla ' y la diagonal
>> invertida(backslash) . porque si los tecleo y hago un Update() ,
>> me saca del programa y sale este error.
>>
>>
>> Subsystem Call: MySQL
>> System Code: -1
>> Default Status: .T.
>> Description: You have an error in your SQL syntax; check the
>> manual that corresponds to your MySQL server version for the right
>> syntax to use near ''PROMULGATED 75'' WHERE tipostarifa.TARIFA_ID=
>> 3' at line 1
>> Operation: TMYSQLRECORDS:REPLACE
>> Arguments: [ 1] = Type: C Val: UPDATE tipostarifa SET
>> TARIFA='PROMULGATED 75'' WHERE tipostarifa.TARIFA_ID= 3
>> Involved File:
>> Dos Error Code: 0
>>
>> Trace Through:
>> TMYSQLRECORDS:REPLACE (499)
>> TMYSQLRECORDS:UPDATE (341)
>> TSQLQUERY:UPDATE (488)
>> TTIPOSTARIFA:BTNGRABARCLICK (108)
>> TBTNBMP:ONCLICK (0)
>> TBTNBMP:CLICK (99)
>> (b)XCONTROL:XCONTROL (145)
>> TBTNBMP:COMMAND (0)
>> TSCROLLINGWINCONTROL:WMCOMMAND (255)
>> TTIPOSTARIFA:WMCOMMAND (889)
>> RUNFORM (0)
>> TAPPLICATION:RUN (209)
>> MAIN (16)
>>
>>
>>
>> Salio este error porque le puse la comilla en la captura (despues del
>> 75) , igual pasa con la diagonal invertida.
>>
>> Error de Programación ? ó Restricción del Motor de Base de Datos
>> en este caso MYSQL.
>>
>> Saludos...
Gracias Rene por tu respuesta.
EL Usuario tiene que utilizar la comilla ' y la diagonal en la
captura de su inf.
Si efectivamente al poner solo se graba una , pero creo que tanto
la comilla y la diagonal no deben de ser problema , ya que con la
herramienta SQLyog Enterprise no tengo ese problema , capturo la comilla
y la diagonal y se graban sin problema.
Ahora por otro lado , estoy migrando Tablas DBF de FoxPro unas con
70,000 registros y en una de ellas hay una campo que tienen comillas y
diagonal , ya que asi codifican sus productos.
Cuando migro la Inf. a MySQL , les quito las comillas y la diagonal ,
para que Xailer/MySQL no me den error al hacer UPdate() o FastUpdate().
Pero el cliente exigentemente quiere las comillas y la diagonal en su Inf.
Como es sabido la comilla sirve para delimitar las Datos String en los
motores SQL, pero entonces porque en el programa Prueba de SQLITE en
SamplesDataControlsSQLite1 cuando tecleas la comilla o la diagonal
en los Campos First y Last se graban correctamente.
Ahora porque la diferencia en codigo :
en el codigo de MySQLRecords.prg esta esto en la funcion VAlTOSTR
STATIC FUNCTION ValToStr( x )
SWITCH ValType( x )
CASE 'C'
x := "'" + x + "'" <== estan conctatenando con la comilla ,
claro como debe de ser
EXIT
y ahora vean el codigo en SQLiteRecords.prg
STATIC FUNCTION ValToStr( x )
SWITCH ValType( x )
CASE 'C'
x := "'" + StrSql( x ) + "'" <== donde esta
esta funcion StrSql
EXIT
La funcion StrSql es propia de SQLite o esta definida en alguna de las
librerias de Xailer o Xharbour ?
y porque la diferencia en concatenar los strings en MYSQLRecords sin
esta funcion y en SQLiteRecords Si se usa.
Que hace esta Funcion?
Saludos....
Martin Del Angel
Dymsa Sistemas