ich glaube, dass ich da ein Verständnisproblem habe was Resultsets angeht. Im Moment stecke ich total fest und weiß ehrlich gesagt nicht, warum mein Makro nicht läuft.
Hier der Code:
Code: Alles auswählen
Sub FilterContacts
Dim oForm as Object
Dim sClient as String
Dim sSQL as String
Dim oStatement as Object
Dim oResultset as Object
oForm = thisComponent.drawpage.forms.getByName("MainForm")
sClient = oForm.getByName("fmtclientID").currentvalue
sSQL = "SELECT ""client ID"" FROM ""tblClients"" WHERE ""client_name"" = '" & sClient & "'"
oStatement = oForm.ActiveConnection.createStatement()
oResultset = oStatement.executeQuery(sSQL)
MsgBox oResultset.getString(1)
End Sub
Ich weise das Makro einem Schaltknopf (zum Testen) zu und erhalte dann immer einen BASIC-Laufzeitfehler, Message: no data available. Das heißt wohl nichts anderes, als dass keine Daten vorhanden sind.
Nun habe ich aber überprüft, ob sClient korrekt ausgelesen wird (Ausgabe von sSQL bevor der Rest des Codes durchgeführt wird) und das scheint jetzt OK zu sein, außerdem habe ich auch überprüft, dass die Abfrage auch tatsächlich ein Ergebnis liefert (SQL-Abfrage manuell mit den Werten gestartet; ist auch OK). Ich habe auch überprüft, ob oResultset nicht leer ist (isNull und auch mit isBeforeFirst und isAfterLast); auch das scheint nicht der Fall zu sein.
Ich bin bisher davon ausgegangen, dass man die Ergebnisspalte des Resultsets mit getString() direkt abfragen kann, ganz gleich wo der Zeilen-Cursor steht, also ohne zuerst oResultset.first() o.ä. anzuwenden.
Trotzdem habe ich es mal mit first() (anstatt getString) probiert, und erhalte da die Fehlermeldung "Resultset set to forward only". Keine Ahnung was das jetzt heißt. Wenn ich stattdessen next() verwende, dann erhalte ich als Ausgabe "true", was wohl heißt, dass der Zeilen-Cursor ein Feld weiter gerückt ist. Wenn ich anhand von findColumn() die Spaltennummer meines Ergebnisses auslesen will (in meinem Fall oResultset.findColumn("client ID")), dann erhalte ich als Ergebnis "1".
Alles das spricht doch eher dafür, dass oResultset nicht leer ist und eigentlich mein gewünschtes Ergebnis erhält. Nur komme ich trotzdem nicht an den Wert; ich erhalte immer nur die Fehlermeldung "no data available".
Wie gesagt, vielleicht habe ich da einen fundamentalen Verständnisfehler. Wäre sehr nett, wenn mich jemand aufklären könnte.
Danke.
Sonja