Y no tendrá que ver con las transacciones?
Yo trabajo con Firebird y depende de si utilizo Commit o CommitRetaining, la cosa cambia mucho.
Código Delphi
[-]while (no_se_terminen_los_datos) do
begin
if (not MD.ZAsientos.Transaction.InTransaction) then
MD.ZAsientos.Transaction.StartTransaction;
MD.ZAsientos.SQL.Clear;
MD.ZAsientos.SQL.Text:='INSERT INTO asientos (fecha,cuenta,debe,haber,saldo,comentario,numero,comp,numcom,codprov) '+
'VALUES (:fecha,:cuenta,:debe,:haber,:saldo,:comentario,:numero,:comp,:numcom,:codprov)';
MD.ZAsientos.ParamByName('fecha').Value:=StrtoDate(fecha.text);
MD.ZAsientos.ParamByName('cuenta').Value:=MD.DetalleImputa.Value;
MD.ZAsientos.ParamByName('Debe').Value:=MD.DetalleNetograv.Value;
MD.ZAsientos.ParamByName('comentario').Value:=comentario;
MD.ZAsientos.ParamByName('Numero').value:=nasiento;
MD.zAsientos.ParamByName('Comp').value:=MD.DetalleTipo.Value;
MD.zAsientos.ParamByName('Numcom').Value:=MD.DetalleNumcom.Value;
MD.zAsientos.ParamByName('Codprov').Value:=MD.DetalleCod_prov.Value;
MD.ZAsientos.ExecSQL;
MD.ZAsientos.Transaction.Commit;
end;
También puede tener que ver con los triggers que ejecute al insertar en esa tabla.