FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
¿¿¿¿Quien realiza el Commit????
Uso FireBird 1.51, Delphi 7, IBX 7.08
Tengo esta duda: Cuando llamo a un Procedimiento Almacenado en mi Aplicación(con un ibStoreProc) y dentro de este mismo hace algunas Inserciones de Registros, mi pregunta es... ¿Quien Acepta la Transacción Internamente FireBird ó los IBX para confirmar dichos registros Insertados? Hago esta pregunta, porque cuando llamo el Proc. Almacenado mediante un IbStoreProc, no me actualizan los registros Insertados Hasta que me Salga de mi Aplicación y la vuelva a Abrir, aun así haberle puesto las instrucciones Refresh al ibDataset y un CommitRetaining ó Commit al ibtransaction después de haber llamado al mismo Proc. Almacenado. Agradezco cualquier comentario. Última edición por AGAG4 fecha: 06-10-2004 a las 21:04:23. Razón: Corrección |
#2
|
||||
|
||||
Hola,
Cita:
En el caso de IBX, admite ambas formas de trabajo. Aunque estoy muy "oxidado" con el uso de IBX, te recomendaría el control explícito (que tú abras y cierres las transacciones). Para ello tienes métodos (StartTransaction, Commit, CommitRetaining, Rollback, RollbackRetaining) en la clase TIBTransaction (te remito a la documentación). Por cierto, el asunto del refresco de datos en otras transacciones (o clientes) concurrentes, suele estar relacionado con el nivel de aislamiento que tiene la transacción. Para poder ver cambios realizados en otras transacciones, el nivel de aislamiento debe ser read_commited Saludos. P.S. En estos foros ya se ha tratado varias veces este tema. El uso de las opciones de búsqueda te dará más de un hilo que trata el asunto. Última edición por kinobi fecha: 06-10-2004 a las 21:31:59. |
#3
|
||||
|
||||
oki
Cita:
|
#4
|
|||
|
|||
Me pasa algo parecido,
Buenas tardes, estuve viendo tu mensaje y me pasa exactamente lo mismo, pero con los componente DBExpress, ademàs estoy tratando de agregar validación de modificacion de nombre, pero no se si mi procedimiento es el correcto.
Esto debido a lo siguiente Cree una Exception saldo_check Cree un triguer CREATE TRIGGER "EJEMPLO2" FOR "EJETRIGUER" ACTIVE BEFORE UPDATE POSITION 0 AS BEGIN IF ( OLD.NOMBRE <> NEW.NOMBRE) then EXCEPTION SALDOS_CHECK; END Todo esto bien si lo hago directo en IBConsole, pero al estar en la aplicación, realizo la modificacion del registro y comito la transaccion, y aparantemente almacena los datos, pero al cerrar y volver a Abrir la aplicación en el renglon que modifique el nombre no se almaceno el cambio pero esto es correcto por el trigger, mas si modifico 2 renglones y en uno modifico el nombre y en otro no, en el que registro que modifique el nombre no se almacena la información y en el otro si, es detalle aqui es que las 2 modificaciones forman parte de la misma transaccion, por tal motivo se tendran que deshacer ambos cambios. Si alguien sabe que se tiene que hacer para que el rollback se ejecute se lo agradeceria |
#5
|
||||
|
||||
Pues, yo tuve que Finalizar la Transacción y la Conexión a la Base de Datos y volver a restauranlas y asi me refresca los registros insertados por el Procedimiento Almacenado. Espero te sirva de algo aunque se escuche macabroso lo que hice.
Saludos. |
|
|
|