Wieso weist du der ODBCQuery schon die Connection zu, obwohl Du diese noch nicht mal aufgemacht hast?
..weil ich das für diesen Testagenten genau so aus der Notes Designer Hilfe entnommen habe, eben genau um mich da in der Reihenfolge garantiert nicht zu vertun. Siehe Stichwort: "Examples: Execute Method"
Du machst ein connect, überprüfst nicht, ob das gut gegangen ist und wunderst Dich dann später, dass die Abfragen nicht funktionieren?
Hüstel.
Auch das ist dem Testagenten geschuldet, in dem ich stattdessen prüfe ob das Execute Statement erfolgreich war. Mein "echter" Agent enthält sehr wohl eine Prüfung, aber das bringt mich nicht weiter:
If Not con.ConnectTo(dsn,user,passwd) Then
Messagebox "Could not connect to " & dsn,, "Error"
Exit Sub
End If
Ich habe mittlerweile noch etwas herumgespielt, und vielleicht einen Hinweis gefunden. Ich habe folgende kleine Ergänzung vorgenommen:
Set con = New ODBCConnection
con.SilentMode = True
Set qry = New ODBCQuery
Set result = New ODBCResultSet
Set qry.Connection = con
Set result.Query = qry
status= con.ConnectTo(dsn,user,passwd)
'status= con.ConnectTo(dsn)
'Es gibt zwei alternative Anmeldekommandos, je nachem ob ich die System DSN mit Windows Authentifizierung oder SQl Server Authentifizierung teste
qry.SQL = "SELECT * FROM LEADRECORDS"
If Not result.Execute Then
Messagebox result.GetExtendedErrorMessage,,result.GetErrorMessage
Exit Sub
End If
tables = con.ListTables(dsn)
If con.GetError <> DBstsSuccess Then
Messagebox con.GetExtendedErrorMessage,, con.GetErrorMessage
Exit Sub
End If
Ich setze also den silentMode der Connection auf "true" und öffne danach die Connection. (status = true danach).
Aber bei Aufruf der Zeile
tables = con.ListTables(dsn)
werde ich plötzlich mit einem Anmeldedialog für die Datenbank konfrontiert, obwohl die Connection längst geöffnet sein sollte, und ich wegen con.silentMode=true nicht gefragt werden sollte . "tables" enthält danach tatsächlich eine Auflistung aller Tabellen der Datenbank. Die Verbindung steht also spätestens jetzt (warum nicht schon vorher entzieht sich meiner Kenntniss, da vorher bei ...
If Not result.Execute Then
Messagebox result.GetExtendedErrorMessage,,result.GetErrorMessage
Exit Sub
End If
... ja kein Fehler ausgegeben wird.
Nichts desdo trotz liefert
status = result.UpdateRow
wieder false zurück, und die Datenbank wird nicht aktualisiert.
Ist vielleicht ein blöder Gedanke, aber für mich sieht das so aus, als ob die Connection immer nur für das genau nächste Datenbankkommando gültig ist, und danach verworfen wird.