Otro problema con RECORDSET

Otro problema con RECORDSET

Postby Armando » Mon Jun 09, 2008 3:15 am

Amigos:

Continuo con mi aprendizaje sobre ADO y ahora me encuentro con otro problema que les comento aquí para ver si hay alguien que me saque de este atolladero.

con el siguiente sencillo código:

Code: Select all  Expand view
IF lAppend
   oRsPro:AddNew()
ENDIF
oRsPro:Fields("PRO_HRA"):Value := TIME()
oRsPro:Update()


En algunos PRGs funciona muy bien pero en algunos otros me tira un error que no he logrado entender por qué, si alguien tiene alguna idea, será bienvenida.

Code: Select all  Expand view
Application
===========
   Path and name: C:\SapWinA\SapWin.Exe (32 bits)
   Size:   677,888 bytes
   Time from start: 0 hours 0 mins 14 secs
   Error occurred at: 08/06/2008, 22:11:53
   Error description: Error adodb.recordset/3  DISP_E_MEMBERNOTFOUND: UPDATE
   Args:

Stack Calls
===========
   Called from: win32ole.prg => TOLEAUTO:UPDATE(0)
   Called from: sapwin6a.prg => UPGRADE(1174)


La línea 1174 es precisamente el código

oRsPro:Update()

Saludos al foro
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3183
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Postby ricardog » Mon Jun 09, 2008 1:08 pm

Armando :
Tengo poco trabajando con MySql ( me imagino que es lo que tu estas utilizando ), hace unos dias tuve el mismo problema, y creo que es el siguiente :
Si EDITAS un registro, pero NINGUN campo sufre modificaciones, MySql "NOS AVISA", que no hubo cambio alguno, y por lo tanto el mensaje, que tu ves. Entonces para resolver este detalle, hicie lo siguiente :
Catch oErr
If oErr:Description == "DISP_E_MEMBERNOTFOUND"
::Limpia()
Return Self
else
MsgStop("Operacion: "+oErr:operation+" - "+"Descripcion.. CAMBIOS CLTES/PROSPECTOS *: "+oErr:Description+chr(10))
oRs := NIL
Return Nil
endif
End
oRs:Close()


Espero te sea de utilidad.

Saludos
ricardog
 
Posts: 158
Joined: Tue Oct 11, 2005 3:10 pm

Postby Armando » Mon Jun 09, 2008 1:59 pm

Ricardo:

Te agradezco mucho la respuesta, pero estoy desconcertado y te explico porque.

En un PRG de mantenimiento a clientes si edito un cliente pero no modifico campo alguno funciona sin problemas, pero en otro PRG edito el registro y ya sea que modifique o no modifique dato alguno truena con el consabido mensaje.

Sin embargo voy a tratar con la sugerencia que me haces y ya te comentaré.

Nuevamente te agradezco la respuesta, Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3183
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Postby Laurel » Tue Jun 10, 2008 3:23 pm

Hola!

Yo tambien estoy trabajando con ADO y he detectado errores en el UPDATE cuando:
1. Tengo campos llave en la tabla y no estoy grabando nada
2. Tengo campos NOT NULL que no se les esta moviendo información
3. Tengo campos llave relacionados de otra tabla cuyo valor no existe, por ej. si quiero grabar el num. de la compañía y le pongo 2 y no existe en la tabla compañia ese registro manda error
4. Cuando haces consultas solo de algunos datos tampoco hace el update
5. si la longitud de tus variables excede la de los campos tampoco hace el update...
Hasta ahorita es lo que he detectado... igual y si alguien tiene mas tips sería bueno los comparta.

Espero y te sirvan

Laurel
Laurel
Laurel
 
Posts: 65
Joined: Fri Oct 21, 2005 8:07 pm
Location: México

Postby Adolfo » Tue Jun 10, 2008 4:11 pm

Ojo con las consultas parciales, por ej. traes solo el nombre y apellido, pero no el codigo del cliente que es una clave o "indice" de la tabla... se te va a caer...

Si tienes consultas compuestas, de mas de 1 tabla, debes decirle al recordset cual es la tabla primaria, en la que vas a grabar.

Revisa el codigo de mi clase ( ADOBASE ) para ver como solucione esos problemas, estan los comentarios en el ejemplo tambien.

Recuerda tambien que ciertas combinaciones de opciones de apertura, tipo y bloqueo del recordset no permiten updates. Ve el codigo de la funcion Info() de la clase para ver que puedes hacer o no.

Eso.

Desde Chile
Adolfo
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
User avatar
Adolfo
 
Posts: 852
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile

Postby Armando » Tue Jun 10, 2008 6:21 pm

Adolfo:

Gracias por los consejos, los voy a probar, pienso que el problema que tengo esta en el JOIN.

Antes de tu respuesta hice algunas pruebas y te comento lo siguiente:

1.- Al crear el JOIN estoy tomando todos los campos de la tabla primaria
2.- Si se trata de un nuevo registro el oRsPro:Update() funciona de 100
3.- Pero si se trata de una modificación, sin importar si se modificaron campos de la tabla o no, el oRsPro:Update() TRUENA !

Seguiremos investigando y comentando

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3183
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 25 guests