Seite 1 von 2
[solved] Base, BASIC-Laufzeitfehler: No data is available
Verfasst: Mo 30. Mär 2015, 19:28
von tweety
Hi all,
ich finde den Fehler einfach nicht!
Folgendes Progrämmlein habe ich für LibreOffice Base zusammengetippt und scheinbar unterwegs irgendwo einen Fehler eingebaut, denn es kommt als Fehlermeldung:
BASIC-Laufzeitfehler. (4.3.5.2)
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: No data is available.
Am Ende des Makros gebe ich zum Test zwei Message Boxes aus, kopiere ich von dort den String aus dem ersten (strSQL) in eine Abfrage oder in das SQL-Fenster von Base, erscheint das richtige Ergebnis.
Zu Ostern vielleicht schonmal eine Vorübung zum Suchen
Hier das Makro noch dazu.
Code: Alles auswählen
Sub getSchoolLeader ()
Dim oForm as Object
Dim oDataSource as Object
Dim oQueryStatement as Object
Dim oQueryResult as Object
Dim strSchoolID as String
Dim strSQL as String
oDataSource = ThisComponent.Parent.CurrentController
If NOT (oDataSource.isConnected()) THEN
oDataSource.connect()
END IF
oForm = ThisComponent.DrawPage.Forms.GetByName("frm_Mitglieder")
oQueryStatement = oDataSource.ActiveConnection.createStatement()
strSchoolID = oForm.GetByName("Schul-ID").currentValue
strSQL = "SELECT ""tbl_Ausbilder"".""Titel"", ""tbl_Ausbilder"".""Vorname"", ""tbl_Ausbilder"".""Name"" "_
+ "FROM ""tbl_Schulen"", ""tbl_Ausbilder"" "_
+ "WHERE ""tbl_Schulen"".""Schulleiter"" = ""tbl_Ausbilder"".""ID"" AND ""tbl_Schulen"".""ID"" = '" + strSchoolID + "'"
oQueryResult = oQueryStatement.ExecuteQuery(strSQL)
msgbox strSQL
msgbox oQueryResult.GetString(1)
End Sub
Wäre nett, wenn ihr mal drüberschauen könntet.
Greez2all
Tweety
Re: Base, BASIC-Laufzeitfehler. Message: No data is availabl
Verfasst: Mo 30. Mär 2015, 23:40
von mikele
Hallo,
ich bin mir nicht sicher, aber fehlt am Ende
Code: Alles auswählen
strSQL = "SELECT ""tbl_Ausbilder"".""Titel"", ""tbl_Ausbilder"".""Vorname"", ""tbl_Ausbilder"".""Name"" "_
+ "FROM ""tbl_Schulen"", ""tbl_Ausbilder"" "_
+ "WHERE ""tbl_Schulen"".""Schulleiter"" = ""tbl_Ausbilder"".""ID"" AND ""tbl_Schulen"".""ID"" = '" + strSchoolID + "'"
nicht noch ein Ausführungszeichen, um den "WHERE - Zweig abzuschließen?
Re: Base, BASIC-Laufzeitfehler. Message: No data is availabl
Verfasst: Di 31. Mär 2015, 00:35
von tweety
Hi Mikele,
soweit ich weiß (und probiert habe) ist es egal ob man
Code: Alles auswählen
... + "WHERE ""tbl_Schulen"".""Schulleiter"" = ""tbl_Ausbilder"".""ID"" AND ""tbl_Schulen"".""ID"" = '" + strSchoolID + "'"
oder
Code: Alles auswählen
+ "WHERE ""tbl_Schulen"".""Schulleiter"" = ""tbl_Ausbilder"".""ID"" AND ""tbl_Schulen"".""ID"" = " + strSchoolID
schreibt.
Der Ausgabestring sieht dann so aus
Code: Alles auswählen
... WHERE "tbl_Schulen"."Schulleiter" = "tbl_Ausbilder"."ID" AND "tbl_Schulen"."ID" = '1'
bzw.
... WHERE "tbl_Schulen"."Schulleiter" = "tbl_Ausbilder"."ID" AND "tbl_Schulen"."ID" = 1
Mit den einfachen Hochkommata habe ich aus einem Beispiel genauso übernommen, und über den SQL Dialog per Direkteingabe kommt bei beiden Varianten das selbe richtige Ergebnis heraus.
Der Fehler tritt im Code auch erst bei der zweiten msgbox auf, da wurde die Abfrage ja (vielleicht) schon durchgeführt.
Danke trotzdem
Tweety
Re: Base, BASIC-Laufzeitfehler. Message: No data is availabl
Verfasst: Di 31. Mär 2015, 11:50
von tweety
Hi Mikki,
danke für den Hinweis.
Folgende Fehlermeldung kommt dann bei der Zeile
Type: com.sun.star.sdbc.SQLException
Message: Column not found: 6 in statement [SELECT "tbl_Ausbilder"."Titel", "tbl_Ausbilder"."Vorname", "tbl_Ausbilder"."Name" FROM "tbl_Schulen", "tbl_Ausbilder" WHERE "tbl_Schulen"."Schulleiter" = "tbl_Ausbilder"."ID" AND "tbl_Schulen"."ID" = "6"
Geändet habe ich es von einfachen auf doppelte Anführungszeichen:
Code: Alles auswählen
...+ "WHERE ""tbl_Schulen"".""Schulleiter"" = ""tbl_Ausbilder"".""ID"" AND ""tbl_Schulen"".""ID"" = """ + strSchoolID + """"
Die selbe Fehlermeldung bekomme ich dann auch, wenn ich die SQL Anweisung direkt verwende. Oder habe ich mich jetzt bei den Anführungszeichen wieder vertan?
Ich hätte es damit erklärt, daß in doppelten Anführungszeichen alle Spalten einer Tabelle/Abfrage aufgeführt werden müssen. Da es sich bei strSchoolID aber um den Vergleichswert handelt, nachdem "gefilter" wird, müssen entweder einfache oder gar keine Anführungszeichen verwendet werden. Vielleicht...
Noch eine Idee?
greez2all
Tweety
Re: Base, BASIC-Laufzeitfehler. Message: No data is availabl
Verfasst: Di 31. Mär 2015, 12:21
von tweety
Hallo Mikki,
"tbl_Schulen"."ID" ist ein numerischer Wert.
strSchoolID = oForm.GetByName("Schul-ID").currentValue ist ebenfalls ein numerischer Wert aus einem Kombinationsfeld, dessen Inhalt aus einer Abfrage kommt.
Ich hatte strSchulID auch schon als iSchulID und entsprechend also Integer deklariert, mit dem selben Ergebnis, daß keine Daten vorhanden sind. Ich war auch der Meinung, daß es egal ist, da strSQL ein String ist und der numerische Wert entsprechend konvertiert wird, oder?
greez2all
Tweety
Re: Base, BASIC-Laufzeitfehler. Message: No data is availabl
Verfasst: Di 31. Mär 2015, 14:59
von tweety
Hallo Mikki,
ja Danke für die Hilfe. Ich denke auch, daß die Syntax des SQL-Statements soweit korrekt ist, aber irgendwo ist vielleicht noch ein anderes Fehlerchen.
Vielleicht hat ja jemand noch eine Idee
Bis denne
Tweety
Re: Base, BASIC-Laufzeitfehler. Message: No data is availabl
Verfasst: Do 2. Apr 2015, 17:38
von mikele
Hallo,
soweit ich es nachlesen konnte, wäre das SQL-Kommando in deinem Fall:
Code: Alles auswählen
SELECT tbl_Ausbilder.Titel, tbl_Ausbilder.Vorname, tbl_Ausbilder.Name FROM tbl_Schulen, tbl_Ausbilder WHERE tbl_Schulen.Schulleiter = tbl_Ausbilder.ID AND tbl_Schulen.ID = strSchoolID
Das Ganze als String
Code: Alles auswählen
"SELECT tbl_Ausbilder.Titel, tbl_Ausbilder.Vorname, tbl_Ausbilder.Name FROM tbl_Schulen, tbl_Ausbilder WHERE tbl_Schulen.Schulleiter = tbl_Ausbilder.ID AND tbl_Schulen.ID = strSchoolID"
würde eigentlich reichen, aber die Eigennamen müssen in doppelte Hochkommas gesetzt werden und diese müsse in dem String maskiert werden (Thomas Krummbein: Makros in OpenOffice.org 3). Daher denke ich, es müsste so aussehen:
Code: Alles auswählen
"SELECT ""tbl_Ausbilder"".""Titel"", ""tbl_Ausbilder"".""Vorname"", ""tbl_Ausbilder"".""Name"" FROM ""tbl_Schulen"", ""tbl_Ausbilder"" WHERE ""tbl_Schulen"".""Schulleiter"" = ""tbl_Ausbilder"".""ID"" AND ""tbl_Schulen"".""ID"" = strSchoolID"
Bei letzten Ausdruck handelt es sich ja nicht um eienn Eigennamen (der Datenbank) sondern um eine Variable. Ich bin aber nicht sicher, ob die Variable als solche in dieser Abfrage korrekt behandelt wird.
Re: Base, BASIC-Laufzeitfehler. Message: No data is availabl
Verfasst: Do 2. Apr 2015, 18:17
von mikele
Hallo,
Korrektur/ zu meinem letzten Beitrag. Damit der Variablenwert von strSchoolID richtig in den SQL-Komandostring eingebaut wird müsste es so gehen:
Code: Alles auswählen
"SELECT ""tbl_Ausbilder"".""Titel"", ""tbl_Ausbilder"".""Vorname"", ""tbl_Ausbilder"".""Name"" FROM ""tbl_Schulen"", ""tbl_Ausbilder"" WHERE ""tbl_Schulen"".""Schulleiter"" = ""tbl_Ausbilder"".""ID"" AND ""tbl_Schulen"".""ID"" ='" & strSchoolID & "' "
So wie ich es jetzt sehe unterscheiden sich unsere LÖsungen nur im + und &

Vielleicht liegt der Fehler ja ganz woanders. Ich vermute jetzt mal, dass oQueryResult korrekt bestimmt wird und der Fehler im Auslesen liegt.
Was passiert, wenn du vor
die Zeile
einfügst?
Re: Base, BASIC-Laufzeitfehler. Message: No data is availabl
Verfasst: Do 2. Apr 2015, 18:24
von tweety
Hallo Mikele,
dank für Deinen weiteren Denkanstoß
Wie Du aber schon selbst sagtest ist deine zweite Code-Zeile nicht korrekt, weil dann tbl_Schulen.ID gleich dem String/Text "strSchoolID" abgefragt wird, und nicht der Inhalt dieser Variablen (0,1,2,3,4,...).
Die Meldung bleibt auch gleich, wenn ich anstelle der Variablen einen Zahl vorgebe. Also zum Beispiel:
Code: Alles auswählen
"SELECT ""tbl_Ausbilder"".""Titel"", ""tbl_Ausbilder"".""Vorname"", ""tbl_Ausbilder"".""Name"" FROM ""tbl_Schulen"", ""tbl_Ausbilder"" WHERE ""tbl_Schulen"".""Schulleiter"" = ""tbl_Ausbilder"".""ID"" AND ""tbl_Schulen"".""ID"" = 1"
Von daher denke ich eher, daß irgendwo die Verbindung zur Datenbank hängt, aber die SQL Syntax korrekt ist. Also irgendwo hier:
Code: Alles auswählen
oDataSource = ThisComponent.Parent.CurrentController
If NOT (oDataSource.isConnected()) THEN
oDataSource.connect()
END IF
oForm = ThisComponent.DrawPage.Forms.GetByName("frm_Mitglieder")
oQueryStatement = oDataSource.ActiveConnection.createStatement()
Ich wüßte aber nicht wie ich das prüfen sollte. Für mich auch nicht verständlich, weil doch eigentlich die Abfrage losgelöst vom Formular ist und mit oDataSource doch eigentlich auf die Datenbank zugegriffen werden sollte, die das "Formular enthält".
greez2all
Tweety
Re: Base, BASIC-Laufzeitfehler. Message: No data is availabl
Verfasst: Do 2. Apr 2015, 19:58
von tweety