Hola gente! como va?..
Queria consultarles si me pueden orientar con un problema que me esta pasando programando en lazarus 0.9.28 con la base de datos firebird 2.
El tema es el siguiente, cuando realizo la insercion de un registro en una tabla de la base de datos, esta no aparece hasta que no ejecuto el programa de nuevo. O sea, inserto los datos, ejecuto una consulta para leer la tabla y los datos nuevos recien insertados no estan. Pero cuando cierro el programa y lo abro de nuevo, se realiza la consulta y los datos si estan.
Me fije directamente viendo la tabla desde flamerobin y pasa lo mismo, hago la insercion, me fijo en flamerobin los datos de la tabla y no aparecen los nuevos, pero despues de cerrar el programa si lo hacen.
Tengo las funciones de base de datos en un DataModule
// Realiza la conexion con la base de datos
procedure TDMCon.ini_con(bd: string);
begin
conexion.DatabaseName:=ExtractFilePath(application.ExeName)+'/db/'+bd;
conexion.Open;
end;
// Realiza altas, bajas o modificaciones a la base de datos
procedure TDMCon.abm(SQL: string);
begin
sqlcons.Transaction:=self.transaccion;
sqlcons.SQL.Clear;
sqlcons.SQL.Text:=SQL;
try
sqlcons.ExecSQL;
transaccion.Commit;
sqlcons.close;
Except
showmessage('No se pudo realizar la transaccion con la base de datos');
end;
end;
// Realiza una consulta a la base de datos (solo lectura)
procedure TDMCon.consulta(SQL: string);
begin
sqlcons.Transaction:=self.transaccion;
sqlcons.SQL.Clear;
sqlcons.SQL.Text:=SQL;
sqlcons.Open;
end;
Ojala se haya entendido..
Gracias.. Saludos!!!
Citar// Realiza la conexion con la base de datos
procedure TDMCon.ini_con(bd: string);
begin
conexion.DatabaseName:=ExtractFilePath(application.ExeName)+'/db/'+bd;
conexion.Open;
end;
// Realiza altas, bajas o modificaciones a la base de datos
procedure TDMCon.abm(SQL: string);
begin
sqlcons.Transaction:=self.transaccion;
sqlcons.SQL.Clear;
sqlcons.SQL.Text:=SQL;
try
sqlcons.ExecSQL;
transaccion.ApplyUpdates;
transaccion.Commit;
sqlcons.close;
Except
showmessage('No se pudo realizar la transaccion con la base de datos');
end;
end;
// Realiza una consulta a la base de datos (solo lectura)
procedure TDMCon.consulta(SQL: string);
begin
sqlcons.Transaction:=self.transaccion;
sqlcons.SQL.Clear;
sqlcons.SQL.Text:=SQL;
sqlcons.Open;
end;
Fijate si anda...
Si si, ya probe utlizando el 'ApplyUpdates', pero tampoco funciona.. Es muy raro, es como si el 'transaction.commit' no se ejecutara al momento de pasar por esa linea de codigo que lo ejecuta. Aunque en realidad si se ejecuta pero recien se ven los cambios aplicados una vez que cierro y abro el programa de nuevo.
Podria ser que al realizar la consulta despues de la insercion, no lea los datos actualizados.. Pero no creo que el problema este en el codigo que realiza la consulta.. Probablemente sea alguna cuestion en la lista objetos que uso para tener los datos, porque cerrando y abriendo el programa de nuevo, todos los objetos se cargan desde cero otra vez y ahi si se ven las modificaciones en la base de datos.
Ya voy a ver si le encuentro la vuelta.
Gracias por responder!
Un saludo!
Hola,
Y si usas sqlcons.Transaction.Commit; (y/o Applychanges;) en vez de transaccion.commit;?Quizas llamar al metodo commit desde el otro objeto hace algo mas :icon_confused: .
Exitos.
Baii