Hola foro hace tiempo me pusieron estos ejemplos de codigo para hacer unas consultas atraves de Fibplus:
Código:
//Consulta de Inserccion con FIBDataSet
procedure TForm1.Button1Click(Sender: TObject);
Var
SQL : String;
begin
SQL:='INSERT INTO Tabla (Campo1,Campo2,Campo3,Campo4) VALUES (:Parametro1,:Parametro2,:Parametro3,:Parametro4)';
If pFIBTransaction1.InTransaction then
pFIBTransaction1.Commit;
pFIBTransaction1.StartTransaction;
pFIBDataSet1.InsertSQL.Clear;
pFIBDataSet1.SQLs.InsertSQL.Add(SQL);
pFIBDataSet1.QInsert.ParamByName('Parametro1').AsString := Edit1.Text;
pFIBDataSet1.QInsert.ParamByName('Parametro2').AsString := Edit2.Text;
pFIBDataSet1.QInsert.ParamByName('Parametro3').AsString := Edit3.Text;
pFIBDataSet1.QInsert.ParamByName('Parametro4').AsString := Edit4.Text;
pFIBDataSet1.QInsert.ExecQuery;
pFIBTransaction1.Commit;
end;
//Consulta de Eliminacion con pFIBQuery
procedure TForm1.Button2Click(Sender: TObject);
var
SQL: String;
begin
SQL:='DELETE FROM Tabla WHERE Campo_a_eliminar = :Parametro1;
if pFIBTransaction1.InTransaction then
pFIBTransaction1.Commit;
pFIBTransaction1.StartTransaction;
pFIBQuery1.SQL.Clear;
pFIBQuery1.SQL.Add(SQL);
pFIBQuery1.Params[0].Value:= Parametro1; //Tambien se puede utilizar ParamByName
pFIBQuery1.ExecQuery;
pFIBTransaction1.commit;
end;
// FIBDataSet (RecordSet)
Form1.ListBox1.Clear;
Form1.pFIBDataSet1.Open;
Form1.pFIBDataSet1.First;
While not Form1.pFIBDataSet1.Eof do
begin
Form1.ListBox1.Items.Add(Form1.pFIBDataSet1.FieldValues['Campo1'] + ' - ' +
Form1.pFIBDataSet1.FieldValues['Campo2'] + ' - ' +
Form1.pFIBDataSet1.FieldValues['Campo3'] + ' - ' +
Form1.pFIBDataSet1.FieldValues['Campo4']);
Form1.pFIBDataSet1.Next;
end;
Form1.pFIBDataSet1.Close;
end;
mi confucion viene con las dos primeras lineas de los codigos y cual seria el comportamiento de FireBird en esta situacion.
Código:
if pFIBTransaction1.InTransaction then
pFIBTransaction1.Commit;
pFIBTransaction1.StartTransaction
..................................
.......Modificando DB.............
........................................
me explico: lo primero que se hace es preguntar si hay una transaccion y si la hay se le da commit, aqui mi confucion; si hay una trasaccion ejecutando varios cambios en la DB y esta no ha terminado los cambios ¿no estoy forzando a terminar la transaccion con este commit? por que eso es lo que parece como si estuviera formazando a terminar la transaccion. Otra cosa:
tenia entendido que FireBird creaba transacciones siempre ya sean estas implicitas o explicitas.
Salu2.