![]() |
![]() |
| 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
|
|||
|
|||
|
Yo tuve ese mismo problema y lo resolví (con ayuda del foro, claro) agregando otra transacción para insertar un registro.
Aún no encuentro el porque pero en mi programa el IBTransaction1 permanece activa y despues de realizar las consultas y procesos para grabar un registro no puedo usar el IBTransaction1, así que lo que hice (no se si es correcto, pero me funcionó) es agregra otro IBTransaction2 y con el realizar mi proceso de insert. Aquí puedes ver el hilo que hago mención, espero te ayude. Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
|
#2
|
||||
|
||||
|
Egostar creo que despues de investigar un poco con la informacion del hilo que diste en el mensaje anterior llegue a una solucion con los aportes de ronpablo, muchas gracias ronpablo. Esto es para que me corrijan por favor si estoy equivocado, ya que estoy aprendiendo, ya que son observaciones de practicar e investigar y la experiencia luego nos dara la razon si es que la tenemos. Bueno primero lo que pasaba es que al realizar el commit IBTransaction1.Commit, se desctiva la transaccion y todas las tablas por lo que sale el error "no se puede realizar la operacion en un dataset cerrado" entonces lo hice asi:
entonces con el commit se cierra todo lo que dije anteriormente, pero con commitretaining no se cierran, siguen en el mismo estado en el que estaban cuando empieza la transaccion. Espero haber sido de ayuda, ah y me olvidaba, gracias a caral tambien por lo de la excepcion con el rollback, le agregue el mensaje para saber en caso de que se produzca algun error saber de que se trata. Saludos a todos y muchas gracias!!!!! Fede
__________________
De lo que hay no falta nada!!! |
|
#3
|
||||
|
||||
|
Los IBX no los he usado. Yo uso MDOLIB que son derivados de los IBX, tiene una propiedad DefaultAction que la tengo puesto a commit y la propiedad commitAfterpost a true. De esta forma me olvido de las transacciones (de momento).
Por otra parte, para que los cambios de una transacción se vean (en el caso de un commit), se debe hacer un commit, y después cerrar el dataset y volverlo a abrir ¿engorroso? sigue leyendo. Para actualizar los datasets de forma automática, tienes los eventos y el EventAlert de IBX. En un trigger del servidor lanzas un mensaje después de insertar: En la ventana que quiera recibir ese mensaje, añades un componente IBEventAlert y registras el mensaje 'Nuevo_cliente'. El componente tiene un evento OnEvent y allí ordenas cerrar los datasets y volver a abrirlos. El commitRetaining mantiene el contexto de la transacción que se inició; no se recomienda abusar de él. PD: Para entender como funcionan, deberías leer los pdf acerca de las transacciones de Interbase, que son aplicables a Firebird. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#4
|
||||
|
||||
|
Cita:
__________________
De lo que hay no falta nada!!! |
|
#5
|
||||
|
||||
|
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#6
|
||||
|
||||
|
#7
|
||||
|
||||
|
Me uno al tema
Estoy tratando de hacer que se ejecute el evento, pero no me funciona.
Uso D7, FB 2.0.1 y MDO. En la base de datos defino el procedimiento:
// ¿ que hace la ultima línea ? Que lanzo despues con varios triggers:
en delphi pongo un componente: MDOEvents con la base de datos asignada
Pero cuando incorporo una nueva cita (INSERT) desde otro módulo de la aplicación (otro exe) no ocurre el evento. Lo único "raro" es que en mi datamodule defino 2 transacciones Una "Read commited" (read_committed, rec_version, nowait) para los SELECT y otra Read-Write table stability (write, consistency) para insert, update y delete. ¿me falta algo? Edito: inclui esto y tampoco funciona:
__________________
Sitrico Última edición por sitrico fecha: 19-05-2007 a las 09:26:40. |
|
#8
|
||||
|
||||
|
No necesitas el procedimiento almacenado. Con el disparador sobra:
En el mdoRegisterEvent, necesitas añadir el evento que quieres esperar, dado que, en la base de datos puedes lanzar muchos eventos, pero una ventana de tu programa solo quiere enterarse de uno de ellos:
Como sabrás, el evento lanzado por el SGBBDD lo recogerá todas las aplicaciones delphi que esten accediendo a esa Base de datos, pero solo le llegará el mensaje a la ventana que tenga registrado dicho mensaje. Como has visto, he definido una constante CitaModificada, es muy fácil equivocarse al escribir el string, y con una sola letra que varíe, delphi no recibirá dicho evento, y empezarás a creer que Firebird no funciona bien o le echas la culpa a MDO. Usando constantes, te aseguras de no cometer errores mecanográficos. Por el bien de tu salud mental, te lo recomiendo encarecidamente .El evento mdoEventAlert1.OnEvent lo tienes bien definido, por ello no comento nada más. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 19-05-2007 a las 10:06:02. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| refresco de datos en red | valdorre | Conexión con bases de datos | 8 | 05-05-2007 03:16:07 |
| Refresco datos FireBird | Io | Conexión con bases de datos | 2 | 06-08-2005 19:44:59 |
| Refresco de Datos en Interbase | PINO72 | Firebird e Interbase | 6 | 14-02-2005 19:21:30 |
| Refresco de Datos con ADO | Ivr | Conexión con bases de datos | 1 | 15-10-2004 15:11:07 |
| Refresco de datos con ADO | fjcg02 | Conexión con bases de datos | 2 | 23-01-2004 15:03:24 |
|