FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
firebird y mdo
Hola a todos
tengo la necesidad de preguntar algo que veo un poco feo con estos componentes y el firebird.... Uso el firebird 2.0 y los componentes mdo...conecto un mdodatabase con un mdotransaction con un mdodataset con un mdodatasource Hasta aqui todo bien, veo en un grid la tabla seleccionada.. ahora bien, me doy cuenta de que en el momento en que pongo el mdodatasource.active para ver los datos, se pone el mdotransaction.active con la consiguiente "starttransaction" y comienza lo feo, porque solo estoy visualizando, es decir tengo la tabla en "dsbrowse", ¿porque tengo que tener una transaccion abierta si no estoy modificando nada? A raiz de esto, veo que cuando inserto un registro, que por cierto lo hace bien, tengo que hacer el mdotransaction.commit, y lo hago en el evento afterpost del mdodataset, pero en ese momento se cierra la transaccion y se cierra el mdodataset tambien dejando el grid en blanco...y tengo que volver a abrir el mdodataset ¿esto es correcto?, estos componentes ¿trabajan asii?, la forma de trabajar con BDE y paradox aunque "diferente", no pasaban estas cosas... Gracias.. |
#2
|
|||
|
|||
cualquier operacion que hagas con firebird debes abrir una transaccion
por eso se pone activa nada mas abrir la bd. tanto con mdo como con ibx has de asignar la transaccion por defecto con la cual trabajar , tanto a la bd como a los datasets. y tienes que usar commitretaining , de lo contrario cierra la transacción y el dataset. |
#3
|
||||
|
||||
Si estas acostumbrado a trabajar con el BDE y no queres aprender todas estas complicaciones de IBX/MDO, tenes la opción de usar IBObjects, que encapsulan la complejidad del manejo de transacciones y mantener cursores abiertos de la misma forma que lo hacía antes el BDE.
Estos componentes son de pago, pero si aún no estas generando ingresos con tu proyecto, no tenes negado su uso: Trustware license Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#4
|
||||
|
||||
El mdotransaction ¿o era el mdoconnection? tiene una propiedad Autocommit para realizar automáticamente el commit, así no tienes que hacerlo manualmente.
Quizás puedas usar CommitRetaining para mantener la transacción y poder ver los datos recién agregados en el grid. De todas formas, deberías estudiar el tema de transacciones en los pdf de interbase/ firebird desde www.ibphoenix.com para entender al 100 % como funcionan. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#5
|
||||||
|
||||||
Hola a todos,
Cita:
Cita:
Cita:
Cita:
Cita:
Cita:
Una ultima cosilla, al insertar con el mdodataset, me crea el registro pero sale el ultimo en el que estoy situado, y asi repetidamente tantas veces como clicks haga en el boton de insertar, ¿la unica forma es cerrar y abrir, en cada insercion, o modificacion?, por que, en el delete si lo hace instantaneo y visible en el dbgrid... Y....Gracias a todos por el interes.... |
#6
|
|||
|
|||
Hola otra vez...
Tambien me gustaria comentar, el porque???, porque desde un dbgrid con el mdodataset, cuando mofidico es perfecto, y sale todo bien, pero al insertar esta el problema de que o bien me inserta un registro "en blanco en el dbgrid" pero a traves del ibexpert esta correcto y hay que hacer por obligacion un commit y volver a abrir el mdodataset.... Gracias |
#7
|
||||
|
||||
Probablemente vos no le estas asignando un valor a la llave primaria a dicho registro desde delphi, o bien lo estas modificando en triggers before insert en la base de datos. Si esto es así, mdo no podrá localizar el registro en la base de datos después de realizada la inserción y por tanto no puede dejarlo como "registro activo".
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#8
|
|||
|
|||
Buenos dias...
Asi lo hago, a traves de un triggers de la base de datos, entonces debo entender que el campo indice primario cuando lo tengo en un dbgrid o edito la tabla directamente, al insertar lo haga desde el mdodataset y cuando son master/Detail, en los detail lo haga desde un triggers para eviar el null contagioso??.... |
#9
|
||||
|
||||
Cita:
Cita:
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#10
|
|||
|
|||
Hola a todos...
No sabia lo de la propiedad generatorlink de los mdo, voy a investigar pues me parece buena idea la de generar desde delphi el campo indice en vez de la tabla....yo estaba maquinando algo parecido, pensando en un procedimiento de la bd que me genere el id y lo devuelva al delphi para añadir el registro, vamos algo parecido al gen_id pero en vez de hacerlo en la bd hacerlo en delphi, sin usar triggers para esos campos... Y si que me refiero a los campos de relacion entre tablas cuando son master/Detail y en relacion a lo anterior aqui en vez de usar el onnewrecord que me parece muy bien, voy a intentar hacerlo en un trigger en la maestro para generar el registro en la detalle. a ver que tal... Gracias por todo... |
#11
|
|||
|
|||
Hola de nuevo...
jachguate, ya he progado el generatorlink y funciona todo muy bien, como estaba previsto, al insertar ya lo veo al instante en el grid, pero ¿como hacer si usas mas de un generador en la misma tabla cuando tienes varios campos clave?...aunque observo un detalle, y es que al crear un registro nuevo, y estando "order by campo" en la selectsql, lo inserta donde le parece, nunca en el orden establecido....¿que te parece? Gracias |
#12
|
|||
|
|||
Hola otra vez
al hacer en el evento afterpost del mdodataset un commitretainig y despues un last, funciona de muerte....ya que el registro que se esta insertando debe de estar al final de la lista ordenada...solo queda estudiar como hacer para que varios generadores se activen al crear un registro y todo desde delphi Hasta luego... |
#13
|
||||
|
||||
Cita:
Cita:
La idea es esa... Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
alguien ha utilizado Firebird DDX provider? (conectarse con db en firebird!) | JuanErasmo | .NET | 1 | 04-11-2006 16:17:12 |
como actualizar firebird 1.5 a firebird 2.0 | cidarta | Firebird e Interbase | 3 | 26-04-2006 08:57:07 |
Firebird : Llamado para probadores de Firebird 2.0 | JOSEPE | Firebird e Interbase | 0 | 12-03-2005 20:33:18 |
Problemas Firebird Super Server 1.5 con RFunc Firebird v 1.0 | Prophoenix | Firebird e Interbase | 1 | 09-03-2004 11:40:48 |
|