![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Gracias Neftali,
ya tengo el TClientDataSet (con un TDataSetProvider) mostrando los datos en un DBGrid con todos las validaciones, formatos y restricciones necesarias, es decir, todas las columnas en ReadOnly excepto las que pueden modificar. Ahora viene el tema de la actualización en la bbdd ![]() Hay alguna forma de saber los registros que se han modificado para así sólo actualizar éstos o se ha de hacer update de todos los registros iniciales ?? Es decir, si la qry devolvió 10 registros y se han modificado (en TClientDataSet) sólo 2... se ha de hacer update de los 10 o se puede hacer sólo de los 2?? Existe algo del tipo for update o inserted y/o deleted como en sql ?? Muchas Gracias por ayuda ![]() |
|
#2
|
||||
|
||||
|
Cita:
Podrías hacerlo manualmente, marcando tú los registros que se han modificado. Por ejemplo, si utilizas un campo de interno de Modificado y cada vez que guardas un registro lo activas a True, al final basta recorrer y sólo generar las SQL (upates) para aquellos que se han modificado. De todas formas, TClientDataset ya posee propiedades para controlar esto. Revisa en la ayuda la propiedad ChangeCount, Delta, ChangeLog,...
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#3
|
||||
|
||||
|
Neftali,
perdona pero he leido las propiedades que comentas y algunos hilos del foro sobre TClientDataSet y he estado haciendo algunas pruebas, todas con resultado nefasto ![]() En un button he puesto el siguiente código : Cita:
El resultado que obtengo es un error no es posible encontrar el registro, no se especificó ninguna clave así que en el provider he puesto la propiedad updatemode=upWhereKeyOnly pero no tengo claro dónde especificar los campos que forman la clave para actualizar la tabla detalle que es la única que se actualizará. Gracias por la paciencia.... |
|
#4
|
||||
|
||||
|
Cita:
Que no te resulte extraño, así es como funciona el TClientDataset (es que en muy bueno). ![]() ![]() ![]() Si has accedido a una tabla, él sólo, es capaz cuando tú se lo digas (ApplyUpdates) de volcar todos los cambios (Updates/Insert/Delete) a la tabla de Base de Datos. El problema es que en tu caso, los datos no provienen de una tabla, sino de una consulta con JOIN's, de ahí que no se puedan realizar las actualizaciones de forma auomática y seguramente debas acabar haciéndolas de forma manual. Mi idea, es que puedas aprovechar (si es posible) la información que guarda TClientDataset para saber qué registros se han modificado y así saber cueles debes actualizar (esto es una idea, ya que nunca he probado a acceder a esa información). Si no es posible, puedes utilizar el método "manual" (campo Modificado) que he comentado antes. Un saludo.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#5
|
||||
|
||||
|
Neftali,
y si hiciera la consulta original de este modo ?? Cita:
|
|
#6
|
||||
|
||||
|
Creo que no va a funcionar Toni. N es una Join, pero es un producto cartesiano.
El problema no está en la JOIN es si, sino en mezclar datos de diferentes tablas en un DataSet.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#7
|
||||
|
||||
|
He buscado información al respecto, he visto varios casos de qry de más de una tabla
![]() Por lo que he entendido, el update resultante se gestiona en función de algunas propiedades de los campos en el DataSet original mediante banderas que se parametrizan en ProviderFlags. Los campos que se actualizarán con la propiedad pfInUpdate, los campos implicados en el where con la propiedad pfInWhere y los de clave principal con pfInKey. Siguiendo esas premisas he parametrizados todos los campos y me gustaría saber si conoces algún método para que pueda ver la sentencia sql del update resultante. En la qry original he identificado todos los campos con su nombre correcto de tabla, sin utilizar alias para intentar evitar problemas de identificación de éstos. El error que produce ahora al realizar el ApplyUpdates es El nombre de la columna CDGOPARTE no es válido y El nombre de la columna CDGOLIN no es válido, ambos campos son la clave principal de la tabla tbldetalle que és la que se debe actualizar. Es posible que el problema venga por tratarse de tablas Maestro/Detalle ?? Muchas gracias por la ayuda ![]() |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| La mejor tecnica para actualizar datos | NickName | Firebird e Interbase | 1 | 20-06-2011 15:47:08 |
| Ayuda por favor para correr un query en Delphi a una base de datos en Mysql | charlyfitlh | MySQL | 10 | 01-11-2007 20:28:49 |
| Problema con query para una base de datos de Access | omarifr | SQL | 3 | 27-07-2007 00:36:50 |
| Problemas para actualizar datos | Nelly | Varios | 2 | 20-11-2006 14:07:44 |
| Actualizar datos con componente jvDBComboBox | rochi | Conexión con bases de datos | 0 | 15-02-2005 17:35:20 |
|