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 los campos 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 !!!!!