AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken TSQLDataSet, TSQLConnection Multithread Exception
Thema durchsuchen
Ansicht
Themen-Optionen

TSQLDataSet, TSQLConnection Multithread Exception

Ein Thema von Barthiboy · begonnen am 4. Dez 2015 · letzter Beitrag vom 11. Dez 2015
 
nahpets
(Gast)

n/a Beiträge
 
#9

AW: TSQLDataSet, TSQLConnection Multithread Exception

  Alt 4. Dez 2015, 11:33
Mehrere Vorschläge:
Fehler abfangen:
Delphi-Quellcode:
  SQLDS_Work.Close;
  SQLDS_Work.CommandText := 'Select (Teilename) from WEP02.dbo.Teile WHERE IdentNr = ' + quotedStr(IdentNrOrig);
  Try
    SQLDS_Work.Open;
    if SQLDS_Work.FieldCount > 0 then begin
      Teilename := SQLDS_Work.Fields[0].AsString;
      Delete(Teilename, 1, 4);
      if not TryStrToInt(Teilename, SelectedModell) then begin
        SelectedModell := 0;
      end;
    end;
  except
    on e : Exception do begin
      if Assigned(Logger) then begin
        Logger.LogErrorMessage(SQLDS_Work.CommandText);
        Logger.LogErrorMessage(e.Message);
      end;
    end;
  end;
Analog bei allen SQLDS_Work.Open einbauen.
Delphi-Quellcode:
        SQLDS_Work.Open;
        if SQLDS_Work.FieldCount > 0 then begin
ist gut und schön, aber was ist, wenn die Ergebnismenge (warum auch immer) leer ist?
Delphi-Quellcode:
  try
    SQLDS_Work.Open;
    if SQLDS_Work.Active then begin
      if not SQLDS_Work.Eof then begin
        if SQLDS_Work.FieldCount > 0 then begin
          ...
        end;
      end else begin
        if Assigned(Logger) then begin
          Logger.LogErrorMessage(SQLDS_Work.CommandText);
          Logger.LogErrorMessage('sinnvoller Text zur Fehlerbeschreibung (leere Ergebnismenge)...');
        end;
      end;
    end else begin
      if Assigned(Logger) then begin
        Logger.LogErrorMessage(SQLDS_Work.CommandText);
        Logger.LogErrorMessage('sinnvoller Text zur Fehlerbeschreibung (geschlossene Datenmenge) ...');
      end;
    end;
  except
    on e : Exception do begin
      if Assigned(Logger) then begin
        Logger.LogErrorMessage(SQLDS_Work.CommandText);
        Logger.LogErrorMessage(e.Message);
      end;
    end;
  end;
Diese Fehlerbeschreibung hilft nicht wirklich
Zitat:
Die Exceptions treten meistens auf wenn auf Fields[] zugegriffen wird
Da ja an mehreren Stellen auf Fields[] zugegriffen wird, passiert der Fehler bei irgendeinem der Fields[] oder bei einem Bestimmten und wenn bei einem Bestimmten, bei welchem?

Und wenn sie nicht bei Fields[] auftreten, wo denn dann bitte sonst noch?

Ist die Ergebnismenge der Abfrage leer, dürfte ein Zugriff auf Fields[] kaum funktionieren, da es ja keinen Datensatz in der Ergebnismenge gibt und damit FieldCount = 0 ist. Was ich momentan aber nicht weiß und beurteilen kann ist, ob ein Zugriff auf FieldsCount bei einer leeren Ergebnismenge möglich ist oder hier bereits ein Fehler auftreten kann.

1. Abfrage öffnen.
2. prüfen, ob Abfrage geöffent werden konnte.
3. wenn nein, Meldung ausgeben und abbrechen.
4. prüfen, ob Ergebnismenge leer ist.
5. wenn ja, Meldung ausgeben und abbrechen.
6. prüfen, ob Anzahl der erwarteten Felder in der Ergebnismenge vorhanden ist.
7. wenn nein, Meldung ausgeben und abbrechen.
8. Werte auslesen und verarbeiten.

Um alles herum per Try Except unerwartete Fehler abfangen und im Fehlerfalle Meldung ausgeben und abbrechen.

Abbrechen heißt hier: Entweder das Programm beenden oder in einem sicheren und konsistenten Zustand weiterarbeiten.
  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 23:12 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