Ver Mensaje Individual
  #7  
Antiguo 06-08-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Reputación: 24
guillotmarc Va por buen camino
Hola.

En efecto, los querys del RDM són abiertos automaticamente por los Providers, por lo que no hace falta que los dejes abiertos (es más quizá te puede traer problemas, puesto que quizá no pueda actualizar los datos para refrescarlos, ya que se encuentre con el dataset abierto, aunque no estoy seguro).

En todo caso no tiene nada que ver con el problema. Las modificaciones no se realizan sobre esos querys (piensa que que los querys dbExpress són de solo lectura). Las actualizaciones són enviadas directamente por el provider, a la base de datos mediante una sentencia INSERT / UPDATE / DELETE ejecutada directamente sobre el SQLConnection.

El problema tiene que venir en tu código, al evaluar SourceDS.FieldByName('ER_CODCIU').Value. Puesto que como puedes ver en la ayuda, SourceDS a veces puede ser nil.

SourceDS contiene los valores del DataSet antes de que se hiciera ningún cambio. Entonces si estás haciendo una inserción ¿ que hay en SourceDS ? ¿ Un DataSet vacío ?.

Tienes que consultar el DeltaDS que apunta al registro con los cambios que se van a realizar.

NOTA : Para comprobar los datos antes de insertarlos, está bien utilizar el evento BeforeUpdateRecord. Pero para otras cosas será mejor utilizar el AfterUpdateRecord, por ejemplo si quieres actualizar la tabla de Stocks al añadir un producto en una Venta, lo debes hecer en el AfterUpdateRecord, para asegurarte de que solo se realiza si el registro ha sido añadido correctamente a la Base de Datos.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita