![]() |
Datenbank: iSeries DB2 • Version: 7.1 • Zugriff über: dbGo ADO
Arbeitsweise dbGo ADO Query Komponente
Hallo zusammen,
wir arbeiten bei uns unter anderem mit der DB2 Datenbank der IBM iSeries. Seit dem letzten IBM Patches erhalten wir nachdem Ausführen von unseren SQL Statements z.T. sehr komische SQL Fehlermeldungen (z.B. SQL901 Systemfehler, usw.)... Ein Ticket an die IBM haben wir bereits erstellt... Nun habe ich zu meinem Verständnis eine Frage zur Arbeitsweise der ADO Query Komponente (befindet sich in meiner Delphi IDE auf dem Tabreiter dbGO in den Komponenten)... Bei Programmstart stellen wir die Verbindung über eine TADOConnection.Open her. Alle verwendeten Queries sind dann mit dieser TADOConnection verbunden. Ein SQL Statement wird wie folgt zusammengesetzt:
Delphi-Quellcode:
Nun ist die Aussage der IBM u.a. das mit jedem SQL.Add der SQL Befehl an die DB abgesetzt wird, kann das sein?Try With (ADOQuery1) Do Begin Active := False; SQL.Clear; SQL.Add(' Select * From Table1 '); SQL.Add(' Where FLD01 <> ''1'' '); Active := True; End; Except ShowMessage('Fehler'); Exit End; |
AW: Arbeitsweise dbGo ADO Query Komponente
Erst ein paar allgemeine Anmerkungen:
Warum with? Warum Clear/Add statt Text? Warum kein Open?
Delphi-Quellcode:
Try
//Active := False; überflüssig //SQL.Clear; überflüssig AdoQuery1.SQL.Text := ' Select * From Table1 ' + ' Where FLD01 <> ''1'' '; AdoQuery1.Open; //Besser als Active ... Zitat:
|
AW: Arbeitsweise dbGo ADO Query Komponente
Zitat:
|
AW: Arbeitsweise dbGo ADO Query Komponente
Mir ist zudem neu, das IBM etwas von Delphi versteht.
Ich würde im Except-Teil den genauen Fehler mit ausgeben. |
AW: Arbeitsweise dbGo ADO Query Komponente
Ich würde das zusätzlich noch das with eliminieren und die Abfrage parametrisieren.
Delphi-Quellcode:
Try
ADOQuery1.Close; ADOQuery1.SQL.Text := ' Select * From Table1 Where FLD01 <> :SomeValue'; ADOQuery1.Parameters.ParamByName('SomeValue').Value := '1'; ADOQuery1.Open; Except on E: Exception do ShowMessage('Es ist ein Fehler aufgetreten: ' + E.Message); Exit End; |
AW: Arbeitsweise dbGo ADO Query Komponente
Ich würde das
Delphi-Quellcode:
ganz weglassen, denn behandelt werden soll da nichts. Die Anzeige der Ausnahme erfolgt automatisch, unverfälscht und pur.
try except
Man sieht direkt was für eine Fehlerklasse und den Text. Aber warum einfach, wenn kompliziert ... :roll: |
AW: Arbeitsweise dbGo ADO Query Komponente
Was passiert wenn du die entsprechenden SQL-Statements direkt auf der DB (mit IBM-Querytool) ausführst.
Manchmal machen solche Patches mehr kaputt als sie reparieren. Alternativ ist natürlich immer die ADO/OLE DB-Schnittstelle gut für Probleme. M.E. kann man sie nur für MS-Datenquellen einsetzen. Also wenn die Queries direkt funktionieren wäre Schnittstelle u.U. ein Problem wenn z.B. der Provider einfach nicht mehr mit diesem patch-Level zusammenspielt. Was wird den für ein Provider genommen? |
AW: Arbeitsweise dbGo ADO Query Komponente
Zitat:
Delphi-Quellcode:
mehr braucht man nicht um funktionierende Abfragen zu haben.
aq.close;
aq.sql.text:='select irgendwas from irgendwo where wert=1'; aq.open; while not aq.eof do begin ... aq.next; end; aq.close; Parameter und ggf. der Zugriff auf das recordset sind für Tests erst einmal unnötig, für den laufenden Betrieb aber nicht zu verachten. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 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