[Lazarus-es] zeos-firebird: ejemplo transacciones

Claudio Romero clauslack en gmail.com
Jue Mayo 6 21:22:42 CEST 2010


Esto es con SQLQuery, aunque con Zeos creo que es bastante parecido.
Sobre usar una transaccion con varios insert, update, un procedimiento
almacenado, aca va un ejemplo, con parambyname o sumando la string del
SQL.
***
    try
    	GrabaCajaBases;
    except
        SQLTransaction3.Rollback;	
        raise;
    end;
******
procedure TForm_ManejoCajaBonos.GrabaCajaBases;
	if SQLTransaction3.active then SQLTransaction3.Commit;
	SQLTransaction3.StartTransaction;
	with SQLQuery2 do begin      //aca estan los bonos con ident nomas
		DisableControls;
		First;
		while not SQLQuery2.eof do begin
			consulta:='insert into VTAEXPEN (E,I,F)';
			consulta:=consulta+'VALUES(:E,:IDENT,:FECHA)';
	        SQLQuery3.close;
			SQLQuery3.sql.clear;
	    	SQLQuery3.Sql.add(consulta);
			with SQLQuery3.params do begin
			    ParamByName('E').asstring:='I';
			    ParamByName('I').asstring:=FieldValues['ident'];
			    ParamByName('F').asdate:=fieldbyname('fecha_creacion').AsDateTime;
			end;
			SQLQuery3.ExecSQL;
			//--
			if diagnostico1<>'' then begin
				SQLQuery3.close;	SQLQuery3.sql.clear;
				SQLQuery3.Sql.add('INSERT INTO
COMENTARIOS_BONO(USUARIO,FECHA_HORA,COMENTARIO,CLAVE_EXPENDIO,COD_USUARIO,ident)
VALUES('+QuotedStr(GnombreDeUsuario)+',current_timestamp,'+QuotedStr('Diag.1:'+diagnostico1)+','+FieldByName('clave_expendio').asstring+','+inttostr(GnroDeUsuario)+','+QuotedStr(FieldByName('ident').asstring)+')');
				SQLQuery3.ExecSQL;
			end;
			//--
			Next;
		end;
	end;
    SQLQuery3.close;
	SQLQuery3.sql.clear;
   	SQLQuery3.Sql.add('EXECUTE PROCEDURE
CIERRA_CAJA_BONOS('+IntToStr(GnroDeUsuario)+','+DBEtoco.text+')');
	SQLQuery3.ExecSQL;
	SQLTransaction3.Commit;//Con esto graba todo
end;

***********
Lo corte de un proyecto, solamente siguelo de ejemplo, pero hay 3
ExecSQL, que se ejecutan todos en la misma transacción, si falla algo,
falla TODO.

Saludos




More information about the Lazarus-es mailing list