ADO no me funciona en una tabla en especifico
Posted: Sun Mar 26, 2006 6:15 pm
Hola a todos,
... no tienen idea de lo que he buscado informacion sobre esto en la red, y finalmente he caido aqui, pues he llegado a la conclusion de que solamente Ustedes podran darme luz en esto.
Se trata del ampliamente expuesto en la red, problema del mensaje de error que aparece:
"No se puede encontrar la fila para su actualizacion: algunos valores han cambiado desde la ultima vez que se leyo"
A partir de alli, parece que la conexion con el recorset desaparece, pues todas las instrucciones que siguen aparecen con error, y nunca se ejecuta.
TOdo esto aparece al ejecutar una instruccion ::oRs:Update().
No me ocurre con todas las tablas de la base de datos, sino con una sola de ellas (hasta ahora no he comprobado con todas las tablas). A TODAS las tablas de la base de datos se le ha agregado un columna, al inicio, llamada "noreg", entero, auto_increment que lo utilizo como llave primaria.
Estoy usando xHarbour 0.99.3, FWH24, Borland 5.5.1, MySQL 3.23 (en modo local) e instale MyODBC 2.50
Hasta ahora he tratado lo siguiente:
1.- realizo las sustituciones con ::oRs:Fields(n):value := 'valor a cambiar', cambie a ::oRs:Fields('nombre del campo'):value := ´valor a cambiar', y el error persiste.
2.- realizo el ::oRs:Update() al final de las sustituciones. Cambie a realizar las sustituciones por ::oRs:Update('nombre del campo', 'valor a cambiar'), y el error persiste.
3.- Utilizo OPTION=3, y la cambie a OPTION=16387, y el error persiste.
4.- marque las dos primeras opciones en la configuracion de MyODBC en el COntrol Panel, y el error persiste.
5.- Ejecute todo con la opcion de Trazas seleccionada en Control Panel, y el archivo no me dice de nikngun error (o no se interpretarlo), y tambien seleccione la opcion de trazas con OPTION=7, y lo mismo.
6.- He leido todas las news de FW, y veo que nadie reporta esto.
7.- He buscado en la red, y aunque mucha gente lo reporta, nadie llega a una solucion. Algunos suguieren soluciones para VB, tales como utilizar _ numericos en formato DOUBLE y no FLOAT, agregar un campo timestamp "dummy" a las tablas. Esto no lo he tratado aun.
Mi string de conexion es:
DRIVER={MySQL}; SERVER=localhost; DATABASE=XXXXXXX; UID=jllinas; PWD=XXXXXXXX; OPTION=16387
AL momento de conectar, el CursorLocation es adUseClient.
Para crear el recordset hago:
::oRs := CreateObject("ADODB.Recordset")
::oRs:Open( cQuery, uConn, nCursorType, nLockType, nOptions )
donde nCursorType es adOpenKeySet, nLockType es adLockOptimistic y nOptions es adCmdUnknown
He comprobado, y realmente el registro no se ha movido, comprobado entre la lectura y la escritura.
... no se que mas comprobar, a ver que estoy haciendo mal...
Me estoy tirando de los pelos que ya no me quedan!
AYUDA.... POR FAVOR !!!!!
... no tienen idea de lo que he buscado informacion sobre esto en la red, y finalmente he caido aqui, pues he llegado a la conclusion de que solamente Ustedes podran darme luz en esto.
Se trata del ampliamente expuesto en la red, problema del mensaje de error que aparece:
"No se puede encontrar la fila para su actualizacion: algunos valores han cambiado desde la ultima vez que se leyo"
A partir de alli, parece que la conexion con el recorset desaparece, pues todas las instrucciones que siguen aparecen con error, y nunca se ejecuta.
TOdo esto aparece al ejecutar una instruccion ::oRs:Update().
No me ocurre con todas las tablas de la base de datos, sino con una sola de ellas (hasta ahora no he comprobado con todas las tablas). A TODAS las tablas de la base de datos se le ha agregado un columna, al inicio, llamada "noreg", entero, auto_increment que lo utilizo como llave primaria.
Estoy usando xHarbour 0.99.3, FWH24, Borland 5.5.1, MySQL 3.23 (en modo local) e instale MyODBC 2.50
Hasta ahora he tratado lo siguiente:
1.- realizo las sustituciones con ::oRs:Fields(n):value := 'valor a cambiar', cambie a ::oRs:Fields('nombre del campo'):value := ´valor a cambiar', y el error persiste.
2.- realizo el ::oRs:Update() al final de las sustituciones. Cambie a realizar las sustituciones por ::oRs:Update('nombre del campo', 'valor a cambiar'), y el error persiste.
3.- Utilizo OPTION=3, y la cambie a OPTION=16387, y el error persiste.
4.- marque las dos primeras opciones en la configuracion de MyODBC en el COntrol Panel, y el error persiste.
5.- Ejecute todo con la opcion de Trazas seleccionada en Control Panel, y el archivo no me dice de nikngun error (o no se interpretarlo), y tambien seleccione la opcion de trazas con OPTION=7, y lo mismo.
6.- He leido todas las news de FW, y veo que nadie reporta esto.
7.- He buscado en la red, y aunque mucha gente lo reporta, nadie llega a una solucion. Algunos suguieren soluciones para VB, tales como utilizar _ numericos en formato DOUBLE y no FLOAT, agregar un campo timestamp "dummy" a las tablas. Esto no lo he tratado aun.
Mi string de conexion es:
DRIVER={MySQL}; SERVER=localhost; DATABASE=XXXXXXX; UID=jllinas; PWD=XXXXXXXX; OPTION=16387
AL momento de conectar, el CursorLocation es adUseClient.
Para crear el recordset hago:
::oRs := CreateObject("ADODB.Recordset")
::oRs:Open( cQuery, uConn, nCursorType, nLockType, nOptions )
donde nCursorType es adOpenKeySet, nLockType es adLockOptimistic y nOptions es adCmdUnknown
He comprobado, y realmente el registro no se ha movido, comprobado entre la lectura y la escritura.
... no se que mas comprobar, a ver que estoy haciendo mal...
Me estoy tirando de los pelos que ya no me quedan!
AYUDA.... POR FAVOR !!!!!