AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Fehlerbehandlung bei Datenbanken
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlerbehandlung bei Datenbanken

Ein Thema von Flash68 · begonnen am 16. Apr 2012 · letzter Beitrag vom 9. Mai 2012
Antwort Antwort
Flash68

Registriert seit: 24. Apr 2006
102 Beiträge
 
Delphi XE2 Architect
 
#1

Fehlerbehandlung bei Datenbanken

  Alt 16. Apr 2012, 10:19
Hallo zusammen,

ich möchte eine Fehlerbehandlung in meine Programe einbauen die folgendermaßen aussieht:

Delphi-Quellcode:
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;
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.

Kann mir jemand helfen wie ich die Fehlerbehandlung programmiere ohne das ein leerer Eintrag vorgenommen wird.

Gruß

Flash

Geändert von Flash68 (16. Apr 2012 um 11:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Fehlerbehandlung bei Datenbanken

  Alt 16. Apr 2012, 11:58
Was spricht dagegen dies so zu machen wie es seit Jahrzenten bekannt ist:
Delphi-Quellcode:
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;
Du könntest natürlich auch einen Fehlercode generieren, von dem Deine Fehlernachricht und die weitere Verarbeitung abhängig sind.
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Flash68

Registriert seit: 24. Apr 2006
102 Beiträge
 
Delphi XE2 Architect
 
#3

AW: Fehlerbehandlung bei Datenbanken

  Alt 18. Apr 2012, 10:22
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.

Geändert von Flash68 (18. Apr 2012 um 10:47 Uhr)
  Mit Zitat antworten Zitat
pmoegenb

Registriert seit: 24. Aug 2006
Ort: Aidlingen
155 Beiträge
 
Delphi XE6 Professional
 
#4

AW: Fehlerbehandlung bei Datenbanken

  Alt 18. Apr 2012, 12:46
Entweder bei Post, im Ereignis BeforePost z. B.:

If FieldByName('Field1').IsNull oder durch Abfrage der Länge der Eingabe z. B.:

If Length(DBEdit1.Text) = 0
Peter Mögenburg
Gruß

Peter
  Mit Zitat antworten Zitat
Flash68

Registriert seit: 24. Apr 2006
102 Beiträge
 
Delphi XE2 Architect
 
#5

AW: Fehlerbehandlung bei Datenbanken

  Alt 18. Apr 2012, 13:06
Kann das erste denn funktionieren?

Werden denn die Daten nicht erst nach dem post übertragen?
  Mit Zitat antworten Zitat
Flash68

Registriert seit: 24. Apr 2006
102 Beiträge
 
Delphi XE2 Architect
 
#6

AW: Fehlerbehandlung bei Datenbanken

  Alt 9. Mai 2012, 16:47
Ich hab jetzt die lösung zw. es zum laufen gebracht.
Delphi-Quellcode:
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;
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?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

AW: Fehlerbehandlung bei Datenbanken

  Alt 9. Mai 2012, 16:59
Du solltest aus deinem Datenmodul NICHT auf das Formular zugreifen.
Delphi-Quellcode:
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;
Du musst auch nicht die DBLookupComboBox abfragen, sondern nur prüfen ob das Fremdschlüsselfeld gefüllt ist:

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;
Andreas
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Fehlerbehandlung bei Datenbanken

  Alt 9. Mai 2012, 17:04
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.
Markus Kinzler
  Mit Zitat antworten Zitat
ADelph

Registriert seit: 10. Aug 2009
97 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Fehlerbehandlung bei Datenbanken

  Alt 9. Mai 2012, 17:05
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
  Mit Zitat antworten Zitat
Flash68

Registriert seit: 24. Apr 2006
102 Beiträge
 
Delphi XE2 Architect
 
#10

AW: Fehlerbehandlung bei Datenbanken

  Alt 9. Mai 2012, 18:46
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.
Das habe ich probiert, mit den Ansätzen von p80286, aber da habe ich es nicht geschafft abfzufragen ob etwas in meinem DBedit-Feld eingegeben ist, mit der BeforePost hat es dann geklappt.

Geändert von Flash68 ( 9. Mai 2012 um 23:55 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz