AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlerbehandlung so richtig

Ein Thema von Jumpy · begonnen am 5. Mai 2011 · letzter Beitrag vom 5. Mai 2011
 
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#1

Fehlerbehandlung so richtig

  Alt 5. Mai 2011, 10:36
Hallo,
in die folgende (unübersichtliche) Funktion (mit Unterfunktionen) habe ich eine Fehlerbehandlung eingeführt. Ich weiß aber nicht, ob die funktioniert wie ich das denke (siehe Kommentare im Code), da bisher noch keine Fehler auftraten . Meint ihr das klappt so, hab versucht was hier in der DP in dem Tutorial zu Exceptions gesagt wurde umzusetzen und was in der Hilfe so stand?

Delphi-Quellcode:
function TLToA.CreateDateien(i: Integer): Boolean;
var q : TADOQuery;
/////////////////////////////
function SQL_Out : String;
var s : TSQL;
begin
  s:=TSQL.create;
  s.Add := 'Select Distinct exportline';
  s.Add := 'From ('+SQL_Main(i)+')';
  s.Add := 'Where gruppe = '+s.Ora_StrOfStr(q.FieldByName('gruppe').AsString);
  Result:=s.Text;
  s.Free;
end;
/////////////////////////////
procedure CreateGruppendatei;
var
  Z : TADOQuery;
  T : TStringlist;
  Dateiname : String;
begin
  T:=TStringList.Create;
  Dateiname:=q.FieldByName('datei').AsString;
  if Fileexists(Dateiname) then T.LoadFromFile(Dateiname);
  Z:=TADOQuery.Create(nil);
  Z.Connection:=aMain.Main.Projekt.DB.Con;
  Z.SQL.Text:=SQL_Out;
  try
    Z.Open;
    Z.First;
    while not Z.Eof do
      begin
      T.Add(Z.FieldByName('exportline').AsString);
      Z.Next;
      end;
    T.SaveToFile(Dateiname);
  except on e : Exception do
    begin
    // Innerer try-Block in Unterfunktion, soll reagieren auf Fehler
    // mit der Datenbank (Z.Open)und auf Fehler beim Speichern der TStringList (T.Save...)
    // Objekte der Unterfunktion sollen freigegeben werden
    T.Free; //Nötig? oder werden Freigaben 8 Zeilen tiefer trotzdem durchlaufen?
    Z.Free;
    // Dann soll der Fehler an die Hauptprozedur übergeben werden, weil da die
    // Meldung protokoliert werden soll.
    e.RaiseOuterException(e); //Exception weiterreichen?
    end;
  end;
  Z.Free; //Werden diese auch im Fehlerfall durchlaufen?
  T.Free;
end;
///////////////////////////
begin
  q := TADOQuery.Create(nil);
  q.Connection:=aMain.Main.Projekt.DB.Con;
  q.SQL.Add('Select');
  q.SQL.Add(' Distinct gruppe, datei');
  q.SQL.Add('From');
  q.SQL.Add(' ('+SQL_Main(i)+')');
  Result:=true;
  try
    q.Open;
    q.First;
    while not q.Eof do
      begin
      CreateGruppendatei;
      q.Next;
      end;
  except on e : Exception do
    begin
    // Hier sollen Fehler abgefangen werden, bei Problemen mit der DB (q.Open)
    // und die Fehler in evtl. aus der Unterfunktion hochgereicht werden
    // Z.Zt. ist das glaub ich so, dass die Schleife beendet wird (wg. dem q.free?)
    // wenn in der U-Funk ein Fehler passiert ist. Kann man das daher auch weglassen?
    // Würde dann der nächste Schleifendurchlauf gemacht oder ist die Schleife
    // nach einer Exception auf jeden Fall zu Ende?
    amain.Main.Projekt.MSG.Info('Fehler in Schritt '+IntToStr(i)).Text:=e.Message;
    Result:=false;
    q.Free;
    end;
  q.Free;
  end;
end;
Hoffe diese Form der Fragestellung ist OK, so.
Ralph
  Mit Zitat antworten Zitat
 


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 18:04 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