Ver Mensaje Individual
  #4  
Antiguo 06-12-2022
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 58
Reputación: 9
GINMARMENOR Va por buen camino
Los componentes que uso son TIbDatabase, TIbTransaction, TIbTable, TDatasurce, todos están incluidos en un TDatamodule, en dicho TDatamodule tengo dos TibDatabases y a cada uno su TIbTransaction y unas 20 TIbTables con sus 20 TDatasources enlazadas a su TibDatabase correspondiente.

IbTransaction está configurado en su Transation Editor de la siguiente manera:

Código:
                             Read_commited
                             Rec Version
                             Nowait

                             y tengo marcado en propiedades el Read Commited.
En un principio siempre TibDatabase no está conectado, TibTransaction y TibTAble no están activos.

Al abrir un formulario cualquiera de los muchos que tengo hago lo siguiente en OnShow:

Código:
                dat.datamodule1.IbDatabase1.Conected=true;
                dat.datamodule2.IbDAtabase2.Conected=true;
                dat.datamodule1.TibTransaction1.Active=true;
                dat.datamodule2.TibTransaction2.Active=true;

                dat.datamodule1.IbTable1.Active=true;
                ...
                dat.datamodule1.Ibtable4.Active=true;
Al cerrar el formulario en OnClose;

Código:
                 dat.datamodule1.TIbTransation1.Commit;
                 dat.datamodule1.TibTranssation2.commit;

                 dat.datamodule1.IbTable1.Active=false;
                ...
                dat.datamodule1.Ibtable4.Active=false;

                dat.datamodule1.IbDatabase1.Conected=false;
                dat.datamodule1.IbDatabase1.Conected=false;
                dat.datamodule1.TibTransaction1.Active=false;
                dat.datamodule1.TibTransaction2.Active=false;
Bien ahora en el manejo de grabar registro a registro con el Boton Grabar hago lo siguiente:

Código:
                       begin
                          try
                            dat.datamodule1.IbTable1.Append;
                            dat.datamodule1.IbTable1.Fields[0].AsString:=edit1.text;
                            ...
                            dat.datamodule.IbTable1.Fields[20].AsString:=Edit20.text;
                            dat.datamodule.IbTabl11.post;          
                         Except
                            dat.Datamodule.IbTransaction1.CommitRetaining;
Bien ahora trabajo con el programa en modo monopuesto y funciona bien, graba los 50 o 100 registros después cierro el programa y todo bien se cierra enseguida sin problemas.

Ahora bien, el programa lo tengo en el PC1, y también en el PC2, PC1 hace de servidor donde tengo los datos, el PC2 está con conectado al PC1 mediente el protocolo de conexión Ip, y tengo acceso a la base de datos del PC1 perfectamente.

Si trabajo sólo con el Pc1 todo funciona bien, grabo sin problemas,
Si trabajo sólo con el Pc2 todo funciona también bien, grabo, modifico sin problemas y me salgo del programa sin problemas, igual que con el Pc1.

Pero si abro el programa con los dos Pc's, a la vez puedo entrar bien, ver informes sin problemas, pero a la hora de modificar o dar de alta un registro o borrar se queda pillado y bloqueado sin posibilidad de avanzar, la idea es de poder modificar en ambos Pc's, que grabara y cerrara la aplicación sin bloquearse o quedar pillado.
Sería de gran ayuda ver en qué puedo fallar, Gracias
Responder Con Cita