Makroproblem für SQL-Abfrage aus Calc-Zelle
Verfasst: So, 07.10.2007 16:33
Hallo,
ich habe von openmind (leider ist er nicht mehr aktiv) ein Makro gefunden, dass die Ausführung von SQL-Befehlen aus einer Calc-Zelle heraus ermöglichen soll.
Leider funktioniert das Makro nicht. Und ich kenne mich noch nicht wirklich in OO Basic aus. Ich bekomme einen Laufzeitfehler bei:
DataSource = DatabaseContext.getByName( database ) und ResultSet = Statement.executeQuery( query )
Hier meine Frage:
Wie bekomme ich das Makro als reguläre Funktion in OO Calc zum laufen, so dass ich, wie bei jeder anderen Funktion, meinen SQL-Befehl "SELECT irgendwas FROM tabelle WHERE blablabla" eingeben kann.
Vielen Dank für eure Hilfe!!!
Hier das Makro:
Global DatabaseContext as Object
Global DataSource as Object
Global Connection as Object
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Funktion zur Abfrage einer Datenbank
' Diese Funktion kann in einer Calc-Zelle benutzt werden,
' um einen SQL-Abfrage auf einer Datenbank (registrierte
' Datenquelle) abzusetzen und ein Datenfeld als Wert
' in die Calc-Zelle zu schreiben.
'
' Die Calc-Funktion hat folgende Syntax:
' =SQLABRAGE( datenbank; query; feldindex )
'
' datenbank = Name der registirierten Datenquelle
' query = SELECT-Statement als String
' field = Feldindex für Rückgabewert (default: 1)
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function SQLABFRAGE ( database as String, query as String, Optional field as Integer )
Dim Statement as Object
Dim ResultSet as Object
Dim retVal as String
retVal = ""
' optionales Argument testen
If IsMissing( field ) then
' default 1, wenn kein Index deklariert
field = 1
End If
' Datenbank-Kontext initialisiert?
If IsNull( DatabaseContext ) then
' Datenbank-Kontext holen
DatabaseContext = createUnoService_
("com.sun.star.sdb.DatabaseContext")
End If
' DatenQuelle bereits ausgewählt?
If IsNull( DataSource ) then
' registrierte Datenquelle holen
DataSource = DatabaseContext.getByName( database )
End If
' DB-VErbindung bereit erstellt?
If IsNull ( Connection ) then
' Verbindung zur Datenbank holen
Connection = DataSource.GetConnection("","")
End If
' Datenbank-Statement holen
Statement = Connection.createStatement()
' query absetzen ergibt ein ResultSet
ResultSet = Statement.executeQuery( query )
If Not IsNull( ResultSet ) then
' wir wollen nur die erste Zeile
If ResultSet.next then
retVal = ResultSet.getString( field )
End If
End If
ResultSet.close()
Statement.close()
SQLABFRAGE = retVal
End Function
ich habe von openmind (leider ist er nicht mehr aktiv) ein Makro gefunden, dass die Ausführung von SQL-Befehlen aus einer Calc-Zelle heraus ermöglichen soll.
Leider funktioniert das Makro nicht. Und ich kenne mich noch nicht wirklich in OO Basic aus. Ich bekomme einen Laufzeitfehler bei:
DataSource = DatabaseContext.getByName( database ) und ResultSet = Statement.executeQuery( query )
Hier meine Frage:
Wie bekomme ich das Makro als reguläre Funktion in OO Calc zum laufen, so dass ich, wie bei jeder anderen Funktion, meinen SQL-Befehl "SELECT irgendwas FROM tabelle WHERE blablabla" eingeben kann.
Vielen Dank für eure Hilfe!!!
Hier das Makro:
Global DatabaseContext as Object
Global DataSource as Object
Global Connection as Object
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Funktion zur Abfrage einer Datenbank
' Diese Funktion kann in einer Calc-Zelle benutzt werden,
' um einen SQL-Abfrage auf einer Datenbank (registrierte
' Datenquelle) abzusetzen und ein Datenfeld als Wert
' in die Calc-Zelle zu schreiben.
'
' Die Calc-Funktion hat folgende Syntax:
' =SQLABRAGE( datenbank; query; feldindex )
'
' datenbank = Name der registirierten Datenquelle
' query = SELECT-Statement als String
' field = Feldindex für Rückgabewert (default: 1)
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function SQLABFRAGE ( database as String, query as String, Optional field as Integer )
Dim Statement as Object
Dim ResultSet as Object
Dim retVal as String
retVal = ""
' optionales Argument testen
If IsMissing( field ) then
' default 1, wenn kein Index deklariert
field = 1
End If
' Datenbank-Kontext initialisiert?
If IsNull( DatabaseContext ) then
' Datenbank-Kontext holen
DatabaseContext = createUnoService_
("com.sun.star.sdb.DatabaseContext")
End If
' DatenQuelle bereits ausgewählt?
If IsNull( DataSource ) then
' registrierte Datenquelle holen
DataSource = DatabaseContext.getByName( database )
End If
' DB-VErbindung bereit erstellt?
If IsNull ( Connection ) then
' Verbindung zur Datenbank holen
Connection = DataSource.GetConnection("","")
End If
' Datenbank-Statement holen
Statement = Connection.createStatement()
' query absetzen ergibt ein ResultSet
ResultSet = Statement.executeQuery( query )
If Not IsNull( ResultSet ) then
' wir wollen nur die erste Zeile
If ResultSet.next then
retVal = ResultSet.getString( field )
End If
End If
ResultSet.close()
Statement.close()
SQLABFRAGE = retVal
End Function