Problem beim Verbinden mit ODBC-Datenbank (W2K3)

(Firma: Q3) #2322600
Lesenswert?

Ich habe eine Anwendung, die unter Windows läuft und sich beim Start 
automatisch über ODBC mit einem MSSQL-Server verbinden soll. Zum 
Abspeichern der Zugangsdaten kann ich im Setup meiner Anwendung die 
Connect-Funktion ohne Parameter aufrufen - dadurch kommt eine Auswahlbox 
aus dem System hoch. Die von mir verwendete Datenquelle ist eine 
Computerdatenquelle, d.h. mit der Anmeldung am Computer habe ich auch 
das Zugriffsrecht. Ich wähle also die Datenbank aus und speichere dann 
den sog. Connect-String ab.
Unter Angabe dieses Strings kann ich (eigentlich) danach beliebig oft 
und ohne erneute Dialogbox die Verbindung immer wieder herstellen.

Das klappt auch meistens, allerdings nicht immer. Gelegentlich wird auch 
die Datenbank zu Wartungszwecken mal heruntergefahren oder der Server, 
auf dem die Anwendung läuft, muss wegen eines Updates mal neu gestartet 
werden. Grob geschätzt klappt das automatische Wiederverbinden zwanzig 
mal problemlos und beim einundzwanzigsten Mal kommt die saublöde 
Dialogbox hoch und das ganze System steht. Und da es ein meist 
unbeobachtet laufender Server ist, manchmal ziemlich lange, was an 
anderer Stelle Ärger hervorruft.

Langer Rede kurzer Sinn: Wieso kann sowas passieren, wie kann ich das 
verhindern?
Gast #2325436
Lesenswert?

Ich denke mit Computerdatenquelle meint Frank eine System-DSN.

Mit Problemen bei einer Netzwerkverbindung muss immer gerechnet werden.

Das muss die Anwendung entsprechend behandeln können.

Hat man keinen Einfluss auf die Anwendung müsste man eine
Überwachundsanwendung schreiben, welche ünerprüft ob die zu 
überwachenden Anwendung die Dialogbox geöffnet hat.
Wenn dies der Fall ist müßte die zu überwachende Anwendung beendet und 
neu gestartet werden.

Gruß JensM.
(Firma: Q3) #2327704
Lesenswert?

Mach ich doch ... Bei der ersten Benutzung (oder einer Änderung) wird 
absichtlich versucht, die Verbindung ohne Angabe eines Connect-String 
und einer Datenbank herzustellen.

Das provoziert eine Dialogbox herbei  (allerdings nicht die oben 
erwähnte unerwünschte), in der ich eine Datenquelle auswählen kann.

Mit dem Klick auf OK wird die Verbindung hergestellt und ich erhalte den 
Connection-String zwecks Abspeicherung, was ich auch tue. Wie bereits 
beschrieben gelingt das WIederverbinden mit diesem gespeicherten 
Connection-String ja auch in geschätzten 99 von 100 Fällen.
Gast #2327853
Lesenswert?

Wie connectest Du denn zur DB (welche Funktion, welche Sprache).
SQLDriverConnect kennt beispielsweise ein Flag um die Dialogbox zu 
unterdrücken (SQL_DRIVER_NOPROMPT), dann kommt einfach ein Error zurück 
wenn die Verbindung fehlschlägt. Falls Du CDatabase benutzt mußt Du 
statt Open die OpenEx Methode mit CDatabase::noOdbcDialog benutzen.
(Firma: Q3) #2328268
Lesenswert?

... schrieb:
> Wie connectest Du denn zur DB

Mit dem ODBC-Pugin von RealStudio ... ist ein objektorientiertes Basic 
mit Crosscompiler (Mac, Win, Linux). Da es sich um eine Hochsprache 
handelt, habe ich nur abstrakte Methoden, die konkreten Mechanismen 
dahinter sind mir im Detail unbekannt. Sieht ungefär so aus:

Das hier bringt mir den System-Auswahldialog für eine Datenquelle auf 
den Schirm und liefert den Connection-String, falls ich eine DB auswähle 
und OK klicke:
1
dim db as new odbcdatabase
2
if db.connect then constr=db.datatsource

Wenn ich den String habe (frisch geholt oder aus dem Setup geladen), 
kann ich ohne jeden weiteren Dialog verbinden und SQL-Statements 
ausfühern:
1
dim db as new odbcdatabase
2
db.datasource=constr
3
if db.connect then ...

Wichtig: Was ich im Eingangs-Post bemängelte bzw. für blöde und böse 
hielt, war NICHT der Dialog zur Auswahl einer Datenquelle, sondern ein 
anderer (kleinerer) Dialog, der zu der korrekt gewählten Datenquelle 
plötzlich Benutzernamen und Passwort haben wollte, obwohl es sich um 
eine Systemdatenquelle handelt. Kann es sein, dass da gerade zu dieser 
Zeit im Hintergrund ein Admin an der Datenbank "herumgepfuscht" hat?
Gast #2328839
Lesenswert?

Frank Esselbach schrieb:
> Mit dem ODBC-Pugin von RealStudio ... ist ein objektorientiertes Basic

Auweia :)
Davon hab ich leider keinen blassen Schimmer. Kannst ja mal schauen ob 
ODBCConstant was passendes hergibt, die Onlinedoku ist leider ziemlich 
bescheiden. Es gibt wohl auch noch ein Connectionattribut 
SQL_ATTR_QUIET_MODE was man auf Null setzen kann, keine Ahnung ob das 
hier hilft.
Gast #2328852
Lesenswert?

Läubi .. schrieb:
> Probier doch mal die
> SQL_DRIVER_NOPROMPT Option anzuhängen wie von '... (Gast)'
> vorgeschlagen.

Könnte schwierig werden, eigentlich ist das der Wert eines 
Flagparameters der Connect Funktion. Die von dem komischen Basic hat 
aber leider überhaupt keine Parameter :(
Keine Ahnung, ob man das auch irgentwie über den Connectstring angeben 
kann.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren