![]() |
ClientDataSets y Firebird
Buenas a todos.
Tengo el siguiente problema. Antes les comento que uso D6 y FB1.5. Es simple, tengo un programa que se utiliza para realizar pedidos de artículos. Utilizo una tabla cabecera y otra detalle. Para esto tengo dos clientdataset en donde hago los inserts y post a medida que se van agregando los registros del pedido. Al finalizar el pedido, hago ApplyUpdates(-1) de cada uno de los CDS. Cierro los CDS con Close y luego los puedo consultar desde otro formulario. El problema: Utilizando FlameRobin (o cualquier otro dbmanager) para ver lo que pasa en las tablas, no veo los cambios despues del applyupdates en la base hasta que no cierro la aplicación. Esto lo descubri ya que en un momento, por otro motivo, se colgo la aplicación y hubo que forzar el cierre y se perdieron pedidos. Esta misma aplicacion la tenia funcionando con Paradox, con exactamente la misma lógica, luego migré a FB y me pasa esto. Que estoy haciendo mal? Muchas gracias desde ya. Un abrazo. |
¿Haces commit después de hacer post?
|
Hay algo que se me está escapaando...
Los inserts los hago sobre el ClientDataSet, cada uno con su Post. Una vez que se agregan todos los articulos al pedido, confirmo todo haciendo ApplyUpdates. ¿No es el ApplyUpdates el que se encarga de commitear los datos a la base "físicamente" ??? |
Se supone que sí.
¿Cómo estás tratando las transacciones? |
Veo que tengo grave un error de conceptos.
Tengo entendido que los ClientDataSet se encargan del manejo de las transacciones. Yo simplemente hago todas las operaciones sobre los CDS, pense que el applyUpdates se encargaba de mandar los cambios. |
Aquí te dejo el enlace a un pdf que habla sobre TClientDataSet, está extraido del blog delphiallimite, lo estoy "adecentando" en cuanto a presentación, pero puedes descargarlo tal y como está ahora mismo.
Por si te sirve de ayuda con tu problema. Mis conocimientos sobre los tclientdataset son muy básicos. |
Ese es justamente uno de los documentos que leí antes de utilizar ClientDataSets, estaba en DelphiAlLimite, si mal no recuerdo.
Sigo la misma arquitectura y tengo este problema. Es muy raro. Algo debo estar haciendo mal o es un bug con los componentes. Hay menciona que una versión de las IBX tienen problemas, como hago para fijarme que versión de IBX tengo? |
Hola
Cita:
Cita:
Saluditos |
Gracias a todos por las respuestas
Tengo la version 6 de las IBX. No detecto el problema. Voy a tener que dejar de lado los clientdataset y realizar las operaciones directo sobre la base, un problemon... Los CDS eran una buena herramienta ya que la aplicación la diseñé en 3 capas. De hecho, cambié de Paradox a Firebird con cambios mínimos, solo en la capa de datos. Ahora esto me complica la existencia. Si alguien tiene alguna pista mas... Mil gracias. |
No tenemos datos para llegar a ninguna conclusión.
Sólo por preguntar: ¿la base de datos tiene activa la opción -mode en readwrite?, es que con windows es necesario porque en caso contrario mantiene en caché todos los cambios prácticamente hasta que se cierra el programa (y la base de datos). |
pues yo tenía la misma idea, la misma duda y el mismo problema.
para solucionarlo, despues de applyupdates, tengo que hacer un commit en la base de datos utilizando un TIBTransaction
|
Casimiro Notevi:
En el componente IBDataBase no tiene esa propiedad. ContraVeneno: Es exactamente lo que acabo de probar. Esa es la única forma de que los cambios tengan efecto en la base despues del ApplyUpdates. Creo que si hay que hacer eso si o si, el clientdataset carece de sentido. |
hombre, tanto como carecer de sentido no creo. Simplemente tener que hacer "a mano" las instrucciones para guardar una relación maestro detalle es mucho relajo, cuando sabes que el clientdataset lo maneja "automático".
El control de errores también es bastante sencillo manejarlo desde el clientdataset. En fin, me parece más sencillo agregar un "commit", que tener que manejar las instrucciones "a mano". |
Es verdad, me expresé mal. Ahora, sabiendo que de esa manera van los datos a la base, obviamente no voy a cambiar toda la aplicación, pero si me da cierta desconfianza, ya que el componente no hace lo que en teoría debería.
Si alguien mas tiene alguna sugerencia, bienevenido sea. Gracias a todos. Un abrazo. |
Hola
Cita:
Saluditos |
Y bueno, estoy seguro que ha de ser alguna configuración que está faltando, tal vez la que comenta Casimiro. El ClientDataset sí maneja las transacciones. Al menos conmigo sí lo hace cuando trabajo con SQL Server.
Cuando empeze a utilizar Firebird, pues esperaba que hiciera lo mismo, pero me toco agregar el commit. Seguro me falta alguna configuración por conocer. Un false a true, algo así. |
Es muy probable. Estuve investigando pero nada aún.
Dejemos abierta esta vía para quien tenga alguna idea al respecto. Gracias a todos. |
Cita:
Te aconsejo leer este hilo: http://www.clubdelphi.com/foros/showthread.php?t=57459. Es probable que tengas abierta ya una transacción al momento de llamar a ApplyUpdates, transacción de base de datos que espera ser confirmada. ApplyUpdates es para enviar al servidor los cambios que están en memoria, no necesariamente para también confirmarlos a nivel de base de datos. El que también cometa (confirme) la transacción, depende de si ya está abierta una y no es precisamente algo de lo que deba ocuparse el componente TClientDataSet, sino su proveedor (el código de esto lo puedes ver en el hilo referido). Espero se despejen tus dudas. Saludos. Al González. :) |
Perdonad que interrumpa este hilo,,, estoy muy interesado en este tema , en particular en esta parte del mensaje..
Cita:
|
Hola, es probable que sea tal cual como te dicen los compañeros, yo te recomiendo que cambies de IBX a Zeos, son una excelente y gratuita opcion para conectar con Firebird y muchas otras bases de datos, aunque la verdad no estoy seguro de que zeos te funcione con D6, supongo que si.
PD: Modelar tu aplicacion en capas es una excelente idea y como pudiste notar los clientdataset ayudan mucho para lograrlo, no desistas y prueba las Zeos. Salu2:cool: |
La franja horaria es GMT +2. Ahora son las 04:33:18. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi