In einem Makro frage ich zunächst in einem Dialog eine Variable ab, die für die WHERE-Bedingung bei einem SELECT genutzt wird. Zunächst klappte das mehrfach. Seit ich das Arbeitsverzeichnis neu gesetzt hatte, gibt es nur noch Fehler. Mein Arbeitsablauf:
Unproblematischer Teil, aber der Vollständigkeit halber abgedruckt:
Code: Alles auswählen
sub Fachlisten_erstellen
rem Variable
Dim klasse As String
GlobalScope.BasicLibraries.LoadLibrary("Tools")
Path=createunoservice("com.sun.star.util.PathSettings")
Dim conn As Object
rem Datenbankzugriff
oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
dbSource = oDBContext.GetByName("Klassenlisten")
path.work = DirectoryNameoutofPath(thisComponent.getUrl(), "/")
conn = dbSource.GetConnection("","")
"klasse" im Dialog abfragen und übernehmen, ebenfalls noch problemlos:
Code: Alles auswählen
oDialog1 = LoadDialog("Standard", "Klasse_abfragen")
oDialog1.SetTitle("Vorlagen für Fachliste erstellen")
iResult = oDialog1.Execute()
rem Abbruch bei Cancel oder falschem Wert
klasse = oDialog1.GetControl("input").Text
i = CInt(klasse)
if (iResult = 0) or (i < 1) or (i > 13) then
exit sub
end if
oDialog1.Dispose()
Jetzt wird der SQL-Befehl vorbereitet und ausgeführt, danach knallt es:
Code: Alles auswählen
rem hole die Fächer der gewünschten Klasse per SQL
cmd = conn.CreateStatement()
cmdString = "SELECT Kuerzel, Titel, Fachname, Lehrer, Teilnahmevermerk " & chr(13) _
& "FROM Fachliste WHERE Klasse = " & klasse
' msgbox cmdstring nur zur Kontrolle, er sieht sauber aus
result = cmd.executeQuery(cmdString)
if IsNull(result) then
msgbox "Keine Datensätze gefunden"
else
while result.Next() ''' Hier knallt es !!!!!!
Fachliste_Erstellen( conn, _
klasse, result.getString(1), _
result.getString(2), result.getString(3), _
result.getString(4), result.getString(5) )
wend
end if
end sub
Die Sicherheitsabfrage IsNull wird mit false festgestellt. Bei result.Next kommt eine seltsame Fehlermeldung:
Fehlermeldung hat geschrieben:BASIC-Laufzeitfehler.
com.sun.star.uno.RuntimeException
Message: .
Was kann da passiert sein? Datensätze sind unverändert vorhanden, es sei denn, sie werden (warum auch immer) nicht mehr bereitgestellt. Welche Möglichkeiten habe ich, die Exception genauer zu untersuchen? Muss ich die Connection freigeben? Wenn ja, wann und wie? (Bisher habe ich sie offen gelassen, weil sie in der while-Schleife in jedem Durchgang für einen weiteren SELECT-Befehl benötigt wird.)
Ich habe viel versucht, auch den Parameter
klasse (der als String deklariert ist, der einem Integer entspricht) in Hochkommata oder chr(34) eingebunden - keine Änderung.
Hilfe! Jürgen
In einem Makro frage ich zunächst in einem Dialog eine Variable ab, die für die WHERE-Bedingung bei einem SELECT genutzt wird. Zunächst klappte das mehrfach. Seit ich das Arbeitsverzeichnis neu gesetzt hatte, gibt es nur noch Fehler. Mein Arbeitsablauf:
Unproblematischer Teil, aber der Vollständigkeit halber abgedruckt:
[code]sub Fachlisten_erstellen
rem Variable
Dim klasse As String
GlobalScope.BasicLibraries.LoadLibrary("Tools")
Path=createunoservice("com.sun.star.util.PathSettings")
Dim conn As Object
rem Datenbankzugriff
oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
dbSource = oDBContext.GetByName("Klassenlisten")
path.work = DirectoryNameoutofPath(thisComponent.getUrl(), "/")
conn = dbSource.GetConnection("","")[/code]
"klasse" im Dialog abfragen und übernehmen, ebenfalls noch problemlos:
[code]oDialog1 = LoadDialog("Standard", "Klasse_abfragen")
oDialog1.SetTitle("Vorlagen für Fachliste erstellen")
iResult = oDialog1.Execute()
rem Abbruch bei Cancel oder falschem Wert
klasse = oDialog1.GetControl("input").Text
i = CInt(klasse)
if (iResult = 0) or (i < 1) or (i > 13) then
exit sub
end if
oDialog1.Dispose()[/code]
Jetzt wird der SQL-Befehl vorbereitet und ausgeführt, danach knallt es:
[code]rem hole die Fächer der gewünschten Klasse per SQL
cmd = conn.CreateStatement()
cmdString = "SELECT Kuerzel, Titel, Fachname, Lehrer, Teilnahmevermerk " & chr(13) _
& "FROM Fachliste WHERE Klasse = " & klasse
' msgbox cmdstring nur zur Kontrolle, er sieht sauber aus
result = cmd.executeQuery(cmdString)
if IsNull(result) then
msgbox "Keine Datensätze gefunden"
else
while result.Next() ''' Hier knallt es !!!!!!
Fachliste_Erstellen( conn, _
klasse, result.getString(1), _
result.getString(2), result.getString(3), _
result.getString(4), result.getString(5) )
wend
end if
end sub[/code]
Die Sicherheitsabfrage IsNull wird mit false festgestellt. Bei result.Next kommt eine seltsame Fehlermeldung:
[quote="Fehlermeldung"]BASIC-Laufzeitfehler.
com.sun.star.uno.RuntimeException
Message: .[/quote]
Was kann da passiert sein? Datensätze sind unverändert vorhanden, es sei denn, sie werden (warum auch immer) nicht mehr bereitgestellt. Welche Möglichkeiten habe ich, die Exception genauer zu untersuchen? Muss ich die Connection freigeben? Wenn ja, wann und wie? (Bisher habe ich sie offen gelassen, weil sie in der while-Schleife in jedem Durchgang für einen weiteren SELECT-Befehl benötigt wird.)
Ich habe viel versucht, auch den Parameter [i]klasse [/i](der als String deklariert ist, der einem Integer entspricht) in Hochkommata oder chr(34) eingebunden - keine Änderung.
Hilfe! Jürgen