![]() |
Equivalencia de conexión Delphi - Lazarus.
Buen día a todos, quiero realizar la siguiente consulta:
En Delphi tenemos este esquema de conexión a la base de datos... 1º En un DataModule el componente de Interbase TIBDatabase para la conexión a la base de datos. 2º En el formulario de ABM el componente TIBTransaction con TIBQuery, TIBUpdateSQL ambos de Interbase. 3º También, en el formulario usamos el TDataSource del DataAccess para nuestras inserciones, borrados y actualizaciones. 4º Para cualquier inserción nos valemos del TIBTransaction. En Lazarus tengo instalado el paquete de Zeos Access con la siguiente equivalencia: TIBDatabase -> TZConnection TIBQuery -> TZQuery TIBUpdateSQL -> TZUpdateSQL pero quedo con la duda con TIBTransaction...Cuál sería su equivalente en Lazarus? O las transacciones se realizan directamente en TZConnection? Saludos cordiales. |
Lo que preguntas no es una equivalencia de conexión Delphi - Lazarus sino Delphi - Zeos Access. Por lo que sé, Zeos también funciona en Delphi. Lo digo porque el título llama a engaño.
Respecto a tu pregunta concreta, nunca he usado Zeos así que no puedo responderte. |
Los componentes Zeos funcionan como lo hacían los equivalente componentes nativos BDE de Delphi. No existe ningún equivalente al componente específico de transacciones, sino que el propio TZConnection controla las transacciones.
|
Gracias a los que han respondido al respecto.
Disculpas por el título no tan descriptivo, el comparativo es realmente con el Interbase y Zeos Access. Pregunté aquí porque lo quiero aplicar en Lazarus. Supongamos que tenga en un DataModulo un único componente TZConnection con AutoCommit = False y en otras ventanas las Querys que apuntan a la misma conexión. Si abro la Query1 (para insertar o modificar) y la dejo abierta y luego abro la Query2 y hago un commit a la Query2; esta ya me realiza el commit para la Query1 y 2. En Delphi tenemos el Transaction para cada Query. Cómo sería el manejo de transacciones con Zeos? Saludos cordiales. |
Si no haces nada, cada operación con cada tabla o query lleva su propia transacción.
Para operaciones que afecten a varias tablas o varios registros debes iniciar tu las transacciones y darles commit o rollback según corresponda. Te adjunto un trozo de código :
|
Es posible que la transacción no tenga componente propio, como pasa con ADO.
La trasacción está implícita o incluída en la conexión, y desde ese componente es desde donde realizas loa START, COMMIT y ROLLBACK. |
Hola de nuevo y gracias a todos.
El código enviado por pacopenin es excelente. Voy a extraer parte del mismo
De este código se entiende que tenemos un TZConnection en un DataModulo y a ella están ligadas varias consultas de distintos formularios. Supongamos que en otro formulario se este Insertando una Factura que ya ha hecho un Post sin Commit todavía, pero que se sigue editando. En ese momento corremos el procedure:
y se ejecuta con éxito el Commit del procedure. Este Commit afecta también a la conexión actual de Factura, es decir que guarda en la base de datos. La propiedad de TZConnection es Autocommit = False. Cómo hacer para no afectar a Factura? Saludos cordiales. |
Al iniciar manualmente una transacción, el commit afecta exclusivamente a los registros modificados dentro de ella. Si tienes una factura en edición, ese proceso habrá creado su propia transacción de forma implicita, por lo que entiendo que funcionarán como dos transacciones distintas. De todas formas, lo mejor es probar.
|
Buen día a todos.
Gracias pacopenin por las respuestas.^\||/ Una consulta: Cómo están las propiedades AutoCommit y TransactIsolationLevel de tu TZConnection? Saludos cordiales. |
AutoCommit = True
TransactIsolationLevel = tiReadCommitted |
La franja horaria es GMT +2. Ahora son las 18:36:10. |
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