FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Detectar modificaciones en el provider
Muy buenas.
Veréis, utilizo el evento BeforeUpdateRecord del proveedor, y en particular, el parámetro DeltaDS para obtener los campos que han sido modificados en el ClientDataSet y así poder generar yo mismo las instrucciones a mandar a la base de datos. Esto es posible porque si en el ClientDataSet se modifica un campo, DeltaDS.FieldByName('Campo') será no nulo y contendrá en la propiedad Value el nuevo valor introducido. Mi problema es que esto no es cierto a la inversa, es decir, si dicho valor es nulo no significa que el campo no se haya modificado, pues de hecho el cliente ha podido modificarlo para suprimir su valor, y por tanto no tengo manera de distinguir a nivel de proveedor entre los campos no modificados y los campos suprimidos por el cliente. Utilizo Delphi 7 y TClientDataSet+TDataSetProvider+IBX Un saludo Thales |
#2
|
||||
|
||||
Un Tfield tiene las propiedades OldValue y NewValue, si son distintos, ha sido modificado. O bien usa la propiedad Tag para marcarlo como modificado.
saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#3
|
||||
|
||||
Acabo de comprobar que, en efecto, NewValue es la respuesta y que Unassigned es el valor que devuelve cuando el campo correspondiente no ha sido modificado, por lo que no hay confusión con un null originado por el borrado del contenido desde el cliente.
Grancias y un saludo Thales |
#4
|
||||
|
||||
Cierto.
Unassigned te lo devuelve cuando usas Field.Value, es decir, estas obteniendo el valor del campo como Variant y el valor del campo en sí, como tipo variant, no ha sido asignado. Null significa que el campo tiene el valor especial null y corresponde con la constante VarNull. Cita:
saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#5
|
||||
|
||||
Ya resolví ayer mi duda. Mi objetivo era hacer un recorrido por los campos modificados dentro del evento BeforeUpdateRecord y así es como lo hago:
Gracias por todo Thales Última edición por Thales fecha: 07-11-2005 a las 20:04:13. |
|
|
|