![]() |
Datenbank: MSSQL • Version: 2008R2 • Zugriff über: Ado
SQL connection Fehler abfangen
Hallo,
ich habe folgendes Problem. Ich möchte meine Datenbankverbindung anpassen und ein Dialog (ÄHNLICH wie UDL Datei) für den Bunutzer anzeigen lassen wenn die Datenbankverbindung fehl schlägt. Ist zB. der DB-Name falsch kommt eine Fehlermeldung von Windows/SQLServer und das finally wird nicht mehr ausgeführt. Benutze MSSQLServer 2008R2 Express
Delphi-Quellcode:
Danke für eure Hilfe
// Verbindungsaufbau zum SQL Server
ADOC_ChristDB.Connected := false; ADOC_ChristDB.ConnectionString := SQL_Server; try ADOC_ChristDB.open; finally if ADOC_ChristDB.Connected = false then begin ADOC_ChristDB.close; OpenSQLServerForm := TOpenSQLServerForm.Create(Application); // OpenSQLServerForm.ShowModal; //Application.Terminate; end; end; Grüße Pet |
AW: SQL connection Fehler abfangen
Was passiert, wenn Du das try eine Zeile nach oben schiebst? Wäre ein except auf bestimmte Fehler hier nicht besser?
|
AW: SQL connection Fehler abfangen
Zunächst mal müsstest du das open nach dem try machen. Da das open den Fehler verursacht, aber bei dir nicht im Schutzblock steht, kann das Finally nicht greifen.
Außerdem: Nicht
Delphi-Quellcode:
sondern
if ADOC_ChristDB.Connected = false then
Delphi-Quellcode:
Das wurde im Forum schon so oft besprochen, dass ich es hier nicht nochmal erkläre.
if not ADOC_ChristDB.Connected then
|
AW: SQL connection Fehler abfangen
Sorry try ist verrutscht und ist vor open.
Mit except tritt das gleiche Problem auf. Mit "IF not" ändert sich auch nichts. Wenn ich einen Haltepunkt bei " ADOC_ChristDB.open;" setze und debugge funktioniert es. |
AW: SQL connection Fehler abfangen
Zitat:
Zum Thema: Wenn die Connection fehlgeschlagen ist, also Connected auf False steht, solltest du kein Close der Connection mehr machen. Eventuell (kann ich hier nicht testen) führt das zu einer weiteren Exception. Dadurch würde der Rest im Finally-Block nicht mehr ausgeführt. Warum es dann beim Debuggen trotzdem durchlaufen wird, kann ich dir so nicht sagen. |
AW: SQL connection Fehler abfangen
Leider hat das mit der "ADOC_ChristDB.close;" auch nichts gebracht.
|
AW: SQL connection Fehler abfangen
Hmm..
Hast Du dass mal mit einer Fehlerausgabe getest? Nach folgendem Schema?
Delphi-Quellcode:
(Aus dem Kopf herunter getippt...)
ADOC_ChristDB.CLose;
ADOC_ChristDB.ConnectionString := SQL_Server; try ADOC_ChristDB.Open; except // OLE-Exception von MS/ADO on e: EOLEException do begin // Zum Testen!! ShowMessage('[' + E.ClassName + '] ' + IntToHEX(E.ErrorCode,8) + ' ' + E.Source + #13#10 + E.Message); // Hier könnte auf den spezifischen ErrorCode von Microsoft reagiert werden!!! //OpenSQLServerForm := TOpenSQLServerForm.Create(Application); // //OpenSQLServerForm.ShowModal; end; // Andere Exception on e: Exception do begin ShowMessage(E.Message); end; end; |
AW: SQL connection Fehler abfangen
Problem besteht immer noch. Auf mit OLEExeption.
|
AW: SQL connection Fehler abfangen
Ich habe den Verdacht, dass du an der falschen Stelle suchst.
Mache mal zwischen jedem schritt ein ShowMessage, damit du siehst, wie weit dein Programm kommt. Meine Vermutung ist, dass der Fehler im TOpenSQLServerForm.Create(Application) entsteht. Aber das ist nur Spekulation. |
AW: SQL connection Fehler abfangen
Hmm..
Zitat:
Wenn ja, was wird den als Fehler angezeigt? |
AW: SQL connection Fehler abfangen
es kommt die Fehlermeldung
"Cannot open database "dbname" requested by Login. The Login failed" diese Meldung kommt wohl von open und das except wird wohl nicht mehr ausgeführt. |
AW: SQL connection Fehler abfangen
Hmm..
Zitat:
Wenn Du mein Muster-Src verwendet hast, sollte zum einen im Debugger (beim Open) die Fehlermeldung kommen und anschließend von der Exception ein ShowMessage. Bei OLE-Fehlern (und hierzu gehört dein Fehler) sollte auch der FehlerCode kommen, bei allen anderen nur der Text. Deshalb: Welcher Text wird wann angezeigt, mit oder ohne OLE-Fehlercode? |
AW: SQL connection Fehler abfangen
Es kommt nur die Exception von open.
Beim debuggen springt er gar nicht in die Exeptions rein. |
AW: SQL connection Fehler abfangen
Gibt es nicht dieses Problem, wenn eine VCL Komponente (connection) in der IDE bereits geöffnet ist und dann beim Start / Formcreate sofort erneut diesen Zustand herstellen will?
(Ich bekomm es nicht mehr richtig zusammen, die in der IDE geöffnete Connection muss ja auch irgendwie richtig konfiguriert sein, sonst wäre sie nicht offen) |
AW: SQL connection Fehler abfangen
So habe das Problem gefunden und gelöst.
Im OI stand die Eigenschaft "ConnectOption" auf "coAsyncConnect" :-D Grüße Pet |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:42 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 by Thomas Breitkreuz