![]() |
Datenbank: MS SQLServer • Zugriff über: via ODBC
Fehlerabfang bei SQL: Insert klappt, Update nicht
Hallo zusammen,
ich versuche gerade einen Fehlerabfang in meinen Code einzubinden. Am ende solle es eine Exception Klasse geben. Weiß aber noch nicht wie das geht. Meine ersten Schritte sehen so aus: Für Update:
Delphi-Quellcode:
Für Insert:
function TTblFirmenstamm.UpdRec(iRec: TRecFirmenstamm): boolean;
begin Result := true; with FQry do begin Close; SQL.text := 'UPDATE ' + GetTblName + ' SET ' + 'UnternehmenNr_FK =:UnternehmenNr_FK, Standort=:Standort, Firmenname=:Firmenname, Strasse=:Strasse, PLZ=:PLZ, Ort=:Ort, '+ 'SQLDebitoren=:SQLDebitoren,SQLKreditoren=:SQLKreditoren,'+ 'DKSFirma=:DKSFirma,DKSJahr=:DKSJahr,DKSJahrYYYY=:DKSJahrYYYY,'+ 'FrachtKostenKnz=:FrachtKostenKnz,ProzessBereiche=:ProzessBereiche ' + 'WHERE (FirmenNr_ID =:FirmenNr_ID)'; try with iRec do begin ParamByName('FirmenNr_ID').asInteger := FirmenNr_ID; ParamByName('UnternehmenNr_FK').asInteger := UnternehmenNr_FK; ParamByName('Standort').asString := Standort; ParamByName('Firmenname').asString := Firmenname; ParamByName('Strasse').asString := Strasse; ParamByName('PLZ').asString := PLZ; ParamByName('Ort').asString := Ort; ParamByName('SQLDebitoren').asString := SQLDebitoren; ParamByName('SQLKreditoren').asString := SQLKreditoren; ParamByName('DKSFirma').asString := DKSFirma; ParamByName('DKSJahr').AsString := DKSJahr; ParamByName('DKSJahrYYYY').AsInteger := DKSJahrYYYY; ParamByName('FrachtKostenKnz').Asinteger:= FrachtKostenKnz; ParamByName('ProzessBereiche').AsString := ProzessBereiche; end; ExecSQL; except on E: Exception do begin ShowMessage('Upsiiiii, Tommi da ist ein Fehler: ' + E.Message); Result := False; end; end; end; end;
Delphi-Quellcode:
function TTblFirmenstamm.InsRec(iRec: TRecFirmenstamm): boolean;
var cnstSQL : string; begin cnstSQL := 'INSERT INTO ' + GetTblName + ' ' + '( ChgDate_ID, FirmenNr_ID, UnternehmenNr_FK, Standort, Firmenname,Strasse, PLZ, Ort, SQLDebitoren, SQLKreditoren, DKSFirma, DKSJahr, DKSJahrYYYY, FrachtKostenKnz, ProzessBereiche) ' + 'VALUES (:ChgDate_ID,:FirmenNr_ID,:UnternehmenNr_FK,:Standort,:Firmenname,:Strasse,:PLZ,:Ort,:SQLDebitoren,:SQLKreditoren,:DKSFirma,:DKSJahr,:DKSJahrYYYY,:FrachtKostenKnz,:ProzessBereiche)'; with FQry do begin Close; // Schließt die Datenmenge try if SQL.Text <> CnstSQL then SQL.text := CnstSQL; with iRec do begin ParamByName('ChgDate_ID').asDateTime := GetChgDateForInsRec; ParamByName('FirmenNr_ID').asInteger := FirmenNr_ID; ParamByName('UnternehmenNr_FK').asInteger := UnternehmenNr_FK; ParamByName('Standort').asString := Standort; ParamByName('Firmenname').asString := Firmenname; ParamByName('Strasse').asString := Strasse; ParamByName('PLZ').asString := PLZ; ParamByName('Ort').asString := Ort; ParamByName('SQLDebitoren').asString := SQLDebitoren; ParamByName('SQLKreditoren').asString:= SQLKreditoren; ParamByName('DKSFirma').asString := DKSFirma; ParamByName('DKSJahr').AsString := DKSJahr; ParamByName('DKSJahrYYYY').AsInteger := DKSJahrYYYY; ParamByName('FrachtKostenKnz').Asinteger := FrachtKostenKnz; ParamByName('ProzessBereiche').AsString := ProzessBereiche; end; ExecSQL; Result := True; except on E: Exception do begin ShowMessage('Tom da ist ein Fehler: ' + E.Message); Result := False; end; end; end; end; Was ich nicht verstehe ist, das ich wenn ich für Fehler sorge, ich bei der Insert Variante einen Fehler angezeigt bekomme bei der Update Variante aber nicht! Warum bringt er bei Update keine Fehlermeldung? |
Re: Fehlerabfang bei SQL: Insert klappt, Update nicht
was für einen Fehler provozierst Du denn?
vielleicht ist das für das Update garkein Fehler? |
Re: Fehlerabfang bei SQL: Insert klappt, Update nicht
Ich starte das Programm. Gehe in den Dialog zum Ändern eines Datensatzes.
Diesen Datensatz lösche ich dann in meiner Datenbank m.H. des SQL Server Enterprice Manager. Dann wechsel ich wieder in mein Programm und Sage Update --> Update auf einen Datensatz der gar nicht mehr existiert. |
Re: Fehlerabfang bei SQL: Insert klappt, Update nicht
Wenn Du sagst, mach ein Update auf den Datensatz, dessen Primärschlüssel dem angegebenen Wert entspricht, und es gibt diesen Datensatz nicht mehr, dann wird eben nichts aktualisiert. Wieso sollte da ein Fehler kommen? Versuch doch mal, für 2 Datensätze denselben Wert im Primärschlüssel zu vergeben, dann sollte es auch eine Exception geben.
|
Re: Fehlerabfang bei SQL: Insert klappt, Update nicht
hm :wiejetzt:
Wenn ich einen Update mache für den Datensatz X, dieser aber nicht mehr existiert, dann kann kein update gemacht werden. Ich würde das schon als Fehler sehen. Liege ich da wirklich falsch? :gruebel: Ist dann Löschen von Datensatz X, obwohl Datensatz X nicht mehr existiert auch kein Fehler? Deinen Vorschlag werde ich auf jeden fall morgen testen. |
Re: Fehlerabfang bei SQL: Insert klappt, Update nicht
Wenn es jedes Mal einen Fehler gäbe, wenn kein Datensatz mit den Suchkriterien existiert, wäre keine Datenbank zu gebrauchen ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz