Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Try Except - Problem
Morpheus1572 - Fr 12.09.08 19:14
Titel: Try Except - Problem
Moin,
ich habe ein Verständnisproblem - wobei ich noch nicht mal sicher bin, dass ich es richtig anpacke...
Zum besseren Verständnis:
es existiert eine Tabelle 'Tour' in der logischerweise Tourennummern hinterlegt sind. Ich lese eine Datei ein, in der jedoch eine Tour vorkommen kann, dich die Tabelle noch nicht kennt. um nun diese tour in die tabelle zu schreiben und deren index zu erfahren habe ich gedacht, dass ich es mit try und except mache (siehe unten).
nur finde ich nicht den dreh- und angelpunkt wie ich es erreiche in den except-bereich zu gelangen. solange die touren vorhanden sind ist alles schön. kommt er an die stelle der unbekannten tour "rotzt" mir das programm ab, weil er die tour nicht kennt.
Vorgeschichte zum code:
ich lese eine txt.datei ein und verlege sie in einzelne segmente dich ich auf verschiedene tabellen verteile. hoffe man versteht was ich suche, wenn nicht helfe ich gern, hoffe auch, dass ich soweit "sauber" programmiert habe.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| try ADOTable7.TableName :='Tour'; ADOTable7.Active:=true; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Text := 'SELECT TID FROM Tour WHERE Tour = :apptype'; except ShowMessage('Komm ich in die Schleife?'); ADOTable7.Insert; ADOTable7.FieldByName('Tour').AsString:=Tour; ADOTable7.Post; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Text := 'SELECT TID FROM Tour WHERE Tour = :apptype'; end; ADOQuery1.Prepared := true; ADOQuery1.Parameters.ParamByName('apptype').Value:=Tour; ADOQuery1.Active:=true; ds := DataSource7.DataSet; Tour := ds['TID']; |
Thx im Voraus
Morph.
Tilman - Fr 12.09.08 19:29
Der Teil zwischen Except und End wird nur ausgeführt, wenn es zu einer Ausnahme kommt. Soviel zum Verständnis. Wenn du dann trotzdem ne Fehlermeldung siehst, deutet dies darauf hin dass im Exception-Teil noch eine weitere Exception ausgelöst wird. Entweder ist also dein Code Feherhaft, oder du musst den Code im Exception-Teil verschachteln noch einmal in ein try..except setzen (vermutlich trifft jedoch ersteres zu).
Sinspin - Fr 12.09.08 21:15
Ich glaube, so wie bisher kann das nichts werden. Es knallt in Zeile 22 deines Quelltextauschnittes.
Diese Lösung dürfte an dein Ergebnis sicher näher rankommen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| try ADOQuery1.SQL.Text := 'SELECT TID FROM Tour WHERE Tour = :apptype'; ADOQuery1.Prepared := true; ADOQuery1.Parameters.ParamByName('apptype').Value:=Tour; ADOQuery1.Active:=true; except ShowMessage('Komm ich in die Schleife?'); ADOTable7.TableName :='Tour'; ADOTable7.Active:=true; ADOTable7.Insert; ADOTable7.FieldByName('Tour').AsString:=Tour; ADOTable7.Post; Tour := ADOTable7.FieldByName('TID').AsInteger; end; |
Wobei ich nicht verstehe warum deine Query eine Exception liefern sollte wenn sie keine Daten findet.
Aber das kann ja an der Implementierung liegen.
Ich hätte darauf getippt auf RecordCount = 0 testen zu können:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| ADOQuery1.SQL.Text := 'SELECT TID FROM Tour WHERE Tour = :apptype'; ADOQuery1.Prepared := true; ADOQuery1.Parameters.ParamByName('apptype').Value:=Tour; ADOQuery1.Active:=true; if ADOQuery1.RecordCount = 0 then begin ADOTable7.TableName :='Tour'; ADOTable7.Active:=true; ADOTable7.Insert; ADOTable7.FieldByName('Tour').AsString:=Tour; ADOTable7.Post; Tour := ADOTable7.FieldByName('TID').AsString; end; |
Delete - Fr 12.09.08 21:36
Das kann man und sollteman ohne Exception lösen. Exceptions sind dazu da Ausnahmefehler, also Fehler auf die du so gut wie keinen Einfluss hast, b zu behandel und wenn für dich das nicht existieren der Tablle eine Ausnahme ist, dann stimmt was in deinem Konzept nicht.
Morpheus1572 - So 14.09.08 09:16
Morgen,
Danke leute für die vielen Berichte. ich habe es letzendlich auch mit einer IF-Then-Else erledigt. dachte es wäre eleganter mit try-except, aber nachdem mein code immer schlimmer wurde kam mir endlich die idee mit if.
Morph.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!