FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
transacciones con firebird.
Buenas tardes a todos..
soy nuevo en el club... mi idea es aportar y también encontrar ideas y soluciones a algunas situaciones... para el efecto entonces a lo que vinimos,.. tengo un problema con el uso de transacciones de Delphi y Firebird para manejo de 2 tablas: maestro y detalle en la unidad de datamodule tengo 7 componentes asi (según lei en alguna parte) 1. SQLCONNECTION para conectarse a la BD. 2. SQLDATASET: Dos, cada uno de ellos conectados con sqlconnection a la tabla maesto y otro a la tabla detalle. 3. DATASOURCE para unir la tabla detalle y maestro. 4. DATASETPROVIDER apuntando al SQLDATASET de la tabla maestro. 5. CLIENTDATASET son los dataset de cada tabla, el dataset de la tabla maestra esta unido con el dataset de la tabla detalle. En el Datasetprovider tengo activado resuelva el dataset ( resolvetodataset ) en el evento afterpost del clientdataset se inicia la transacción asi var TD: TTransactionDesc ; begin.. TD.TransactionID := 1; TD.IsolationLevel := xilREADCOMMITTED; Datamodule1.SQLC_BDSBI.StartTransaction(TD); end .. y viene mi problema al ejecutar me sale un error que no comprendo que componente lo genera.. el error SQLT_detalle no puede ejecutar la operación en un dataset cerrado.. pero los dataset ambos están abiertos, aparentemente el datasetprovider que es el que resuelve el dataset lo esta cerrando y no comprendo en que momento.. he puesto en varios eventos de los dataset la propiedad .open para abrirlos pero sigue igual... Si alguien puede darme una manito,, seria de gran utilidad con el compromiso de compartir mi experiencia con todos.. saludo cordial a todos. y espero encontrar ayuda y ayudar a otros... |
#2
|
||||
|
||||
Según he entendido de lo que escribes, estás conectando mal los componentes.
En principio hay solo un SQLConnection, lo cual haces bien, pero de ahí en adelante son son "cadenas" de componentes distintas. En principio, la propiedad DataSource del ClienteDataSet Detalle tiene que ser el DataSource Maestro. Espero que con este esquema se entienda: Código:
SQLDataSet (Maestro) - DataSetProvider - ClientDataSet - DataSource / / SQLConnection-+ / \ / SQLDataSet (Detalle) - DataSetProvider - ClientDataSet - DataSource |
#3
|
||||
|
||||
Por otro lado, no dices en qué línea tienes el error. Ese es el código que interesa. No creo que sea ninguna de las líneas que mencionas en tu post.
Supongo que es un poco mas tarde en el código, en donde tratas de hacer algo en el detalle (insert/update/delete) y el DataSet está cerrado. Normalmente, no sería necesario utilizar transacciones ya que esa "cadena de conexiones" se encarga de todo. Básicamente haces los cambios que quieras en los datos y luego le dices ApplyUpdates(0);
|
#4
|
||||
|
||||
Corrijo el post anterior:
Cita:
|
#5
|
|||
|
|||
Mil gracias por tu aporte..
Tu apoorte me es de gran ayuda me dio nuevas ideas...
ya hice las modificaciones pero ahora se me sucede que no graba los datos de la tabla detalle, aunque no creo que insida te comento que tengo en la tabla detalle un triger que hace un update en la tabla maestro. por otro lado le comento en la situación inicial que plantee voy a hacer unas precisiones dado que el modelo que tengo graba una parte del maestro y graba el detalle, queda una parte del maestro que no se graba la situación es asi. 1. SQLCONNECTION 2. SQLTABLE MAESTRO SQLTABLE DETALLE master source : datasource apuntando a sqltable maestro. master fields : campos que unen las tablas. 3. DATASETPROVIDER dataset : sqltable maestro 4. CLIENTDATASET MAESTRO. Al editar o añadir los campos del dataset el coloca un nuevo campo con el nombre del dataset de detalle CLIENTDATASET DETALLE datasetfiels clientdatasetmaestroSQLTABLEDETALLE 5 .DATASOURCE MAESTRO DATASOURCE DETALLE 6 UN DBNAVIGATOR QUE APUNTA AL MAESTRO. EN LA FORMA UNOS CAMPOS DBEDIT EN LA PARTE SUPERIOR QUE SE ALMACENAN EN EL MAESTRO EN LA PARTE MEDIA UNA GRILLA CUYOS CAMPOS SE ALMACENAN EN EL DETALLE, Y EN LA PARTE INFERIOR NUEVAMENTE UNOS DBEDIT Y UN DBMEMO..... ESTOS CAMPOS SON LOS QUE ESTAN PERDIENDO.. LO QUE OBSERVO ES QUE CUANDO EL FORM ENTRA EN LA GRILLA ALAMCENA LOS DATOS EN EL MAESTRO, PERO CUANDO SALE DE LA GRILLA LOS OTROS CAMPOS DEL FORM QUE ESTAN DEBAJO DE LA GRILLA NO SE ALMACENAN , POR ESO PENSE EN USAR TRANSACCINES..; POR OTRO LADO NOTE QUE SI SE USA EL BOTON CANCELAR, LOS DATOS DEL MAESTRO NO SE CANCELAN YA QUEDAN REGISTRADOS .. ESPERO HABER SIDO CLARO, PARA QUE ME PUEDAS AYUDAR... IGUALMENTE LE ENVIO UN SALUDO ESPECIAL Y MUCHA GRATITUD POR SU COLABORACION ...ESTE MUNDO DEBERIA ESTAR POBLADO DE PERSONAS COMO VOZ... |
#6
|
||||
|
||||
Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración
|
#7
|
|||
|
|||
presento disculpas..
a todos presento disculpas por el uso de las mayúsculas en mi tema...pues use demasiadas mayúsculas pero lo hice sin conocimiento de las reglas del club...
|
#8
|
||||
|
||||
gracias a tí por tu colaboración
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Transacciones en Firebird | jsanchez | Firebird e Interbase | 6 | 04-02-2015 20:04:13 |
Transacciones En Firebird | espectro_jd | SQL | 3 | 21-02-2007 18:54:40 |
Transacciones anidadas en firebird | Er_Manué | Conexión con bases de datos | 5 | 07-12-2005 14:53:10 |
Transacciones FireBird con Zeos | vichovi | Conexión con bases de datos | 3 | 13-07-2005 08:49:29 |
Transacciones en FireBird | El_Raso | Firebird e Interbase | 1 | 26-11-2004 16:22:04 |
|