![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Ayuda con componente transaction
Saludos a todos, estoy usando lazarus y esta vez mas que un problema es una duda que quiero aclarar y es que me paso lo siguiente.
Estoy usando los componentes FIBL, tengo un componente de Base de Datos en un formulario (FORM1), y en otro Formulario(FORM2), tengo un transaction, un query y un dataset estos dos ultimos ligados al transaction. Los componentes del FORM2 los ligue a la base de datos por medio de codigo en el evento OnCreate del mismo FORM2. Código Delphi [-] Transaction.DefaultDatabase:=Form1.Database; Query1.DefaultDatabase:=Form1.Database; Dataset1.DefaultDatabase:=Form1.Database; //activo el Transaction Transaction.Active:=True; pues resulta que despues de hacer un commit en el transaction, este pasa a estado inactivo, lo cual compruebo al ejecutar alguna consulta con el query y me marca que el transaction esta inactivo "Transaction is not active", esto lo solucione activandolo nuevamente con codigo despues de cada commit Código Delphi [-] Transaction.Commit; Transaction.Active:=True; pero no creo que deba ser asi, ya que cuando lo activo desde el modo diseño no hay que hacer lo mismo despues de cada commit. Y mi duda seria: ¿Hay alguna forma de evitar tener que reactivar el transaction despues de cada commit? En el caso de los datasets creo que no hay problema ya que tienen una propiedad llamada AutoStartTransaction que por lo que entiendo activa el transaction automaticamente y funciona bien pero el problema es con los Query ya que estos no tienen esa propiedad. Espero alguien tenga una solucion o comentario que me ilustre un poco mas con respecto a estos componentes. De antemano MUCHAS GRACIAS!!!. |
|
#2
|
||||
|
||||
|
Más bien, ese es un problema con la configuración de la transacción. Cuando me inicie en firebird por medio de delphi, me daba el mismo problema, pero lo solicione con esta configuación. En la propiedad params del componente de la transación ingresa:
read_committed rec_version nowait No sé si será la mejor configuración, pero esta es la que me funciona. Saludos. |
|
#3
|
||||
|
||||
|
sigo igual
Saludos D&W, muchas gracias por tu respuesta, ya intente lo que mencionas pero sigo con el mismo error "Transaction is not active", supongo que te referias en mi caso a la propiedad TRParams, ya que es ahi donde puse el texto que escribiste y quede igual, alguna otra sugerencia?
|
|
#4
|
||||
|
||||
|
Sinceramente, no conozco los componentes, seguramente alguien del club pueda ayudarte con ellos, pero por el momento porque no intentas buscar alguna propiedad que esté releacionada a este comportamiento, como por ejemplo CloseAfterCommit o DeactiveAfter... algo por el estilo. Estas cosas aveces son como una caja fuerte, en donde tienes que hayar la combinación. No busques solo en la transacción porque también el pegón puede estar en el componente de conexión a la BD.
Asegurate también, que la conección entre el componente de BD y transación sea reciproca. Saludos. |
|
#5
|
||||
|
||||
|
Gracias
Pues muchas gracias por interesarte D&W seguire buscando donde esta la diferencia como indicas, y espero encontrarla, ya de paso te comento que esas propiedades que me mencionaste antes, parece que se ponen automaticamente sin escribirlas en diseño o en codigo. !!Mil gracias!!
|
|
#6
|
||||
|
||||
|
Yo trabajo con los FIB pero en delphi.
Hay dos formas de hacer commit Transaction.Commit Transaction.CommitRetaining La primera hace el commit y cierra la transacción. La segunda mantiene la trasnacción abierta. Lo malo de sobreutilizar el CommitRetaining es que al no cerrarse nunca, se van acumulando capas de transacciones hasta que se hace el commit final. Imagínate dos usuarios y sus transacciones: USU1-StartTransaction USU2-StartTransaction USU1-hace cosas USU1-CommitRetaining USU2-hace cosas USU2.CommitRetaining En este momento la base de datos tiene registado todo lo que han hecho los dos usuarios, sin poder liberar ninguna transaccion definitivamente. A lo largo del día, esto puede generar una degradación en la eficiencia de la base. Cuando finalmente USU1 cierra: USU1.Commit La base de datos puede hacer una limpieza de trasacciones hasta la próxima que sigue abierta (la de USU2) Cuando USU2 hace su Commit: USU2.Commit Puede limpiar (hacer un commit final) la lista de transacciones de USU2 y a las de USU1 que estén sobre ella. Espero no haberte liado mucho. |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Transaction Log | Luis Castillo | MS SQL Server | 4 | 04-10-2007 16:28:51 |
| Como usar el componente Transaction | Tauro78 | Firebird e Interbase | 2 | 01-02-2007 17:50:12 |
| Transaction e IBDataSet (IBX) | T-man | Firebird e Interbase | 8 | 14-10-2004 16:14:08 |
| Transaction active | cmgenny | Firebird e Interbase | 2 | 31-05-2004 16:38:16 |
| Sobre IbDataset y Transaction | Rabata | Conexión con bases de datos | 0 | 17-09-2003 19:19:42 |
|