![]() |
Fehlerbehandlung bei Datenbanken
Hallo zusammen,
ich möchte eine Fehlerbehandlung in meine Programe einbauen die folgendermaßen aussieht:
Delphi-Quellcode:
Allerdings wird im dem Fall das ein Feld das benötigt wird nicht ausgefüllt ist trotzdem ein neuer leerer Eintrag vorgenommen bzw. eine ID wird für den Versuch benutzt.
procedure TFRM_Main.But_SpeichernClick(Sender: TObject);
begin try DM_Buecher.ADS_Buecher.Post; DM_Buecher.ADS_Buecher.Edit; setButtons(1) except DM_Buecher.ADS_Buecher.Cancel; DM_Buecher.ADS_Buecher.Edit; setButtons(1); MessageDlg('Es wurden nicht alle Felder ausgefüllt!',MtWarning,[mbOK],0) end; end; Kann mir jemand helfen wie ich die Fehlerbehandlung programmiere ohne das ein leerer Eintrag vorgenommen wird. Gruß Flash |
AW: Fehlerbehandlung bei Datenbanken
Was spricht dagegen dies so zu machen wie es seit Jahrzenten bekannt ist:
Delphi-Quellcode:
Du könntest natürlich auch einen Fehlercode generieren, von dem Deine Fehlernachricht und die weitere Verarbeitung abhängig sind.
function FelderPrüfen:boolean;
begin if not(Feld1ok) then result:=false; if result then if not(Feld2ok) then result:=false; if result then if not(Feld3ok) then result:=false; end; if FelderPrüfen then speichern else Fehlermeldung; Deiner Creativität sind da keine Gerenzen gesetzt. Übrigens vor ein paar Monaten hier im Forum: "bekannte Fehlerzustände sind keine Ausnahme" (leider nicht von mir) Gruß K-H |
AW: Fehlerbehandlung bei Datenbanken
Das hat mir schon mal gut weiter geholfen.
Allerdings weiß ich nicht wie ich überprüfe ob in einem DBEdit-Feld Text während der Append-Phase eingegeben wurde oder nicht. Zusätzlich müsste ich auch noch prüfen ob in einer DBLookupCombobox ein Wert ausgewählt wurde. |
AW: Fehlerbehandlung bei Datenbanken
Entweder bei Post, im Ereignis BeforePost z. B.:
Delphi-Quellcode:
oder durch Abfrage der Länge der Eingabe z. B.:
If FieldByName('Field1').IsNull
Delphi-Quellcode:
If Length(DBEdit1.Text) = 0
|
AW: Fehlerbehandlung bei Datenbanken
Kann das erste denn funktionieren?
Werden denn die Daten nicht erst nach dem post übertragen? |
AW: Fehlerbehandlung bei Datenbanken
Ich hab jetzt die lösung zw. es zum laufen gebracht.
Delphi-Quellcode:
Allerding müsste ich jetzt noch eine DBLookupComboBox abfragen, kann mir jemand sagen was ich überprüfen muß um festzustellen das aus der zweiten Tabelle was ausgewählt wurde?
procedure TDM_Buecher.ADS_BuecherBeforePost(DataSet: TDataSet);
begin If trim(FRM_Main.dbe_Titel.text) ='' then raise Exception.Create('Titel muss angegeben werden'); {abort} end; |
AW: Fehlerbehandlung bei Datenbanken
Du solltest aus deinem Datenmodul NICHT auf das Formular zugreifen.
Delphi-Quellcode:
Du musst auch nicht die DBLookupComboBox abfragen, sondern nur prüfen ob das Fremdschlüsselfeld gefüllt ist:
procedure TDM_Buecher.ADS_BuecherBeforePost(DataSet: TDataSet);
begin //if TrimRight(ADS_BuecherTitel.AsString) = '' then // Alternative if TrimRight(Dataset.FieldByName('Titel').AsString) = '' then raise Exception.Create('Titel muss angegeben werden'); end;
Delphi-Quellcode:
procedure TDM_Buecher.ADS_BuecherBeforePost(DataSet: TDataSet);
begin if Dataset.FieldByName('IdAuthor').IsNull then raise Exception.Create('Author muss ausgewählt werden'); if TrimRight(Dataset.FieldByName('Titel').AsString) = '' then raise Exception.Create('Titel muss angegeben werden'); end; |
AW: Fehlerbehandlung bei Datenbanken
Ich würde die Abfrage früher durchführen (Eingabe?) und nicht erst beim Post. Eine Exception sollte wirklich nur eine "Ausnahme" sein und "nur" bei einer falschen Eingabe.
|
AW: Fehlerbehandlung bei Datenbanken
Hallo,
BeforePost wäre sehr günstig, um solche Sachen abzufragen. Da wurde noch nichts in die DB eingetragen - eben BeforePost. Geeignet wäre auch, bei den Feldern die Property Required auf true zu setzen, dann geht auch nichts in die Datenbank, wenn es nicht gefüllt ist und das System meldet dir das. Wenn du allerdings alle Felder, in denen nichts eingetragen ist, dem Benutzer anzeigen willst, dann wird es etwas aufwendiger. Die bisher genannten Methoden ergeben eine inkrementelle Fehlerabfrage, also einen nach dem anderen - was manchmal lästig sein kann. Da wäre es schöner, der Benutzer würde alle Fehler auf einmal sehen und könnte dann entsprechend gleich alles korrigieren. Grüße |
AW: Fehlerbehandlung bei Datenbanken
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 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-2025 by Thomas Breitkreuz