Hallo,
ich habe eine StoredProcedure, die in meienr Tabelle die größte Kundennummer heraussucht und um 1 erhöht. Will ich diese nun aus dem Programm starten ergibt sich folgendes Problem:
procedure TKundeStammForm1.CheckBox1Click(Sender: TObject);
var
id_neu : string;
ok : boolean;
begin
if CheckBox1.Checked = true then
begin
repeat
ok := true;
<b>{if DataModule1.ADOConnection1.inTransaction = true then
DataModule1.ADOConnection1.commitTrans;}</b>
DataModule1.ADOConnection1.BeginTrans;
DataModule2.ADOStoredProc_KundenID.execProc;
id_neu := DataModule2.ADOStoredProc_KundenID.FieldByName
('ID_NEU').Value;
try
DBEdit12.Field.ASString := id_neu;
DataModule1.ADOConnection1.commitTrans
except
{on E: EIBError.SQLCode -803 DO }
ok := false;
DataModule1.ADOConnection1.RollbackTrans;
end;
until ok;
if DataModule1.ADOConnection1.InTransaction = true then
DataModule1.ADOConnection1.commitTrans;
end;
end;
Wenn ich die erste if-Bedingung verwende erhalte ich bei Anwendereingabe: CheckboxChecked := true; -> false; -> true; -> die Fehlermeldung Transaction is not active.
Verwende ich die if-Bedingung nicht, erhalte ich zwar keine Fehlermeldung, aber bei einer neuen Eingabe eines Kunden erhalte ich die gleiche Kundennummer wie vorhin. Das Post-Ereignis habe ich immer mit BeginTrans gestartet und mit Commit bzw. Rollback beendet. Die neue Kundennummer ist auch in der Tabelle vorhanden. Bei einem neustart des Programms funktioniert die StoredProcedure wieder. Wer kann mir das erklären ? Ein paar grundsätzliche Angaben zu der Verwendung von Transactionen mit ADO wäre auch nicht schlecht.
Ich hoffe es kann mir schnell einer helfen, denn ich bin etwas unter Zeitdruck.
Danke, Gruß Elke
ich habe eine StoredProcedure, die in meienr Tabelle die größte Kundennummer heraussucht und um 1 erhöht. Will ich diese nun aus dem Programm starten ergibt sich folgendes Problem:
procedure TKundeStammForm1.CheckBox1Click(Sender: TObject);
var
id_neu : string;
ok : boolean;
begin
if CheckBox1.Checked = true then
begin
repeat
ok := true;
<b>{if DataModule1.ADOConnection1.inTransaction = true then
DataModule1.ADOConnection1.commitTrans;}</b>
DataModule1.ADOConnection1.BeginTrans;
DataModule2.ADOStoredProc_KundenID.execProc;
id_neu := DataModule2.ADOStoredProc_KundenID.FieldByName
('ID_NEU').Value;
try
DBEdit12.Field.ASString := id_neu;
DataModule1.ADOConnection1.commitTrans
except
{on E: EIBError.SQLCode -803 DO }
ok := false;
DataModule1.ADOConnection1.RollbackTrans;
end;
until ok;
if DataModule1.ADOConnection1.InTransaction = true then
DataModule1.ADOConnection1.commitTrans;
end;
end;
Wenn ich die erste if-Bedingung verwende erhalte ich bei Anwendereingabe: CheckboxChecked := true; -> false; -> true; -> die Fehlermeldung Transaction is not active.
Verwende ich die if-Bedingung nicht, erhalte ich zwar keine Fehlermeldung, aber bei einer neuen Eingabe eines Kunden erhalte ich die gleiche Kundennummer wie vorhin. Das Post-Ereignis habe ich immer mit BeginTrans gestartet und mit Commit bzw. Rollback beendet. Die neue Kundennummer ist auch in der Tabelle vorhanden. Bei einem neustart des Programms funktioniert die StoredProcedure wieder. Wer kann mir das erklären ? Ein paar grundsätzliche Angaben zu der Verwendung von Transactionen mit ADO wäre auch nicht schlecht.
Ich hoffe es kann mir schnell einer helfen, denn ich bin etwas unter Zeitdruck.
Danke, Gruß Elke
Comment