Mira este ejemplo, que te viene con los propios componentes IB:
Código:
procedure TForm1.ApplyButtonClick(Sender: TObject);
begin
with CustomerQuery do
begin
IBDatabase1.Open;
IBTransaction1.StartTransaction;
Table1.Insert;
Table1.FieldByName('QUANTITY').AsInteger := StrToIn(Edit1.Text);
Table1.Post;
IBTransaction1.Commit;
end;
end;
Si el proceso es dar un alta o hacer una modificación, en mi opinión se debe de finalizar la transacción, el hacer cambios en muchos registros a la vez y no concluir la transacción es lo que puede provocar que otro proceso ataque los mismos datos sin que hayamos finalizado la transacción anterior y pueda terminar produciéndose un fallo, por ejemplo un "DeadLock",
Un Saludo.