PDA

Ver la Versión Completa : guardad datos en firebird no funciona hasta cerrar programa


Rofocale
15-05-2012, 04:16:10
Hola a todos tengo un problema que no puedo guardar los datos que agrego en mi programa hasta que se cierre el programa, osea lo añado al grid verifico con el ibexpert y aun estos datos no estan en la base de datos. cierro el programa y verifico con el ibexpert y los datos recien se guardan.

este es el codigo que uso y espero puedan ayudarme
muchisimas gracias

if (sModo = 'Insertar') then
begin
with dmDatos.Categorias do
begin
Close;
SQL.Clear;
SQL.Add('INSERT INTO categoria (name_categ, fecha_categ, tipo, cuenta)');
SQL.Add('VALUES(:name_categ,:fecha_categ,:tipo,:cuenta)');
params.ParamByName('name_categ').Value := txtnombrecateg.Text;
params.ParamByName('fecha_categ').Value := FormatDateTime('dd/mm/yyyy', Date);
params.ParamByName('tipo').Value := sTipo;
params.ParamByName('cuenta').Value := txtcodigo.Text;
ExecSQL;
Close;
end;
dmDatos.Tcategorias.Active := false;
with dmDatos.categorias do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM categoria');
open;
end;
with dmDatos.Tcategorias do
begin
Active := true;
end;

end
else
begin
with dmDatos.Categorias do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE categoria SET name_categ = ''' + txtnombrecateg.Text + ''',');
SQL.Add('cuenta = ''' + txtcodigo.Text + ''',');
SQL.Add('fecha_categ = ''' + FormatDateTime('mm/dd/yyyy', Date) + '''');
SQL.Add('WHERE clave = ' + IntToStr(iClave));
ExecSQL;
Close;
end;
end;

look
15-05-2012, 04:27:59
tienes que utilizar transacciones, investiga , hay mucho de ese tema en los foros.

look
15-05-2012, 04:31:22
aqui un ejemplo:



if not (DataModule.IBTransaction1.InTransaction) then DataModule.IBTransaction1.StartTransaction;
try

//// aqui los cambios en la base de datos insert, update..

DataModule.IBTransaction1.CommitRetaining;
except
on E: Exception do
begin
DataModule.IBTransaction1.RollbackRetaining;
Application.MessageBox( PCHAR('Ocurrio un error.'+#13+E.MESSAGE), 'Error',MB_ICONERROR );
exit;
end;
END;

JXJ
15-05-2012, 05:49:09
tienes que agregar commit a cada transaccion
que quieres que
sea guardada sin cerrar el programa

osea cada componente funciona diferente.
los ibdac lo hacen automaticamente.

los zeos
dbx
ibxpress

lo tienes que indicar explicitamente


que compoenntes usas??

Rofocale
15-05-2012, 20:37:10
Gracias por el ejemplo.
uso ibquery, ibtransaction..