PDA

Ver la Versión Completa : Transacciones con Delphi


Gregory Mazon
14-06-2003, 02:42:56
Hola
Soy novato en el manejo de Interbase y Delphi, estoy usando un TQuery para actualizar las tablas de una base de Interbase pero no se como se realizan las transacciones, el codigo que estoy utilizando es el siguiente :

Var
myQuery : TQuery;

Begin
myQuery := TQuery.Create(application);
myQuery.Sql.Clear;
myQuery.Add('Insert into Articulos(modelo,describe,linea...etc')
myQuery.Add('Values("0001","PRUEBAS","FALDA")');
myQuery.ExecSQL;

myQuery.Sql.Clear;
myQuery.Add('Insert into Precios(costo,publico,mayoreo...etc')
myQuery.Add('Values(200,400,600)');
myQuery.ExecSQL;
End;

Supongo que existe la correcta de hacerlo, si alguin me puede ayudar de antemano les agradesco a todos.

jhonny
14-06-2003, 18:21:47
Holap, bueno la variable esta bien declarada, y la forma de limpiar el SQL tambien pero
al momento de agregar el SQL no debido a que no estas haciendo referencia a la propiedad
SQL del TQuery y ademas te faltan algunos "punto y comas"...osea que quedaria asi:

Var
myQuery : TQuery;

Begin
myQuery := TQuery.Create(nil);
myQuery.Sql.Clear;
myQuery.SQL.Add('Insert into Articulos(modelo,describe,linea...etc');
myQuery.SQL.Add('Values("0001","PRUEBAS","FALDA")');
myQuery.ExecSQL;

myQuery.Sql.Clear;
myQuery.SQL.Add('Insert into Precios(costo,publico,mayoreo...etc');
myQuery.SQL.Add('Values(200,400,600)');
myQuery.ExecSQL;
myQuery.free;
End;


Por otra parte...para usar transacciones debes bajar un componente TDatabase y configurarlo,
ya sea en su propiedad AliasName o en DriverName segun sea tu necesidad...no olvides configurar tambien los parametros
de la base de datos y si no quieres que se pida la contraseña del interbase poner la propiedad LoginPromt en 'False'.

Entonces ya podes trabajar con Transacciones y tu codigo quedaria asi, suponiendo de que el TDatabase se llama "database1":

Var
myQuery : TQuery;

Begin
database1.StartTransaction;
try
myQuery := TQuery.Create(application);
myQuery.Sql.Clear;
myQuery.SQL.Add('Insert into Articulos(modelo,describe,linea...etc');
myQuery.SQL.Add('Values("0001","PRUEBAS","FALDA")');
myQuery.ExecSQL;

myQuery.Sql.Clear;
myQuery.SQL.Add('Insert into Precios(costo,publico,mayoreo...etc');
myQuery.SQL.Add('Values(200,400,600)');
myQuery.ExecSQL;
myQuery.free;
database1.Commit;
except
database1.Rollback;
raise exception.create('No se pudo ejecutar la transaccion');
end;
End;

Espero te sirva.;)

Gregory Mazon
17-06-2003, 00:37:02
:) Muchas Gracias

Modifique mi codigo y funciona perfectamente