Seite 1 von 1
Listbox (im Formular) auslesen durch Makro
Verfasst: Do, 24.07.2008 08:41
von sg1985
Hallo,
ich habe eine Listbox in einem Formular das durch klicken auf eine Schaltfläche per Makro (Select Abfrage) befüllt wird.
Nun möchte ich durch ein Makro, das auf einer anderen Schaltfläche liegt, den gewählten Eintrag aus der Listbox auslesen, um
diesen als Parameter für eine SQL Abfrage in diesem Makro zu benutzen.
Bis jetzt schaut mein Makro, um den Inhalt der Listbox (mit dem Namen ListBox2) im Formular (mit dem Namen Standard) auszulesen,
folgendermaßen aus:
Code: Alles auswählen
Dim oList as Object, aListe(), oForm as Object, tempSel as String
oForm = thisComponent.sheets(0).Drawpage.Forms(0)
oList = oForm.getControl("ListBox2")
'wenn ein Eintrag in der Liste gewählt wurde
if oList.SelectedItemPos > -1 then
' gewählten Text holen
tempSel = oList.SelectedItem
msgbox tempSel
end if
[/
leider funktioniert es nicht, und ich bekomme bei der Zeile "oList = oForm.getControl("ListBox2")" den Fehler "Eigenschaft oder
Methode nicht gefunden".
Im Forum finde ich leider nur Informationen, wie man eine Listbox aus einem Dialog ausliest.
Hat jemand eine Idee, was da falsch sein könnte?
lg
Re: Listbox (im Formular) auslesen durch Makro
Verfasst: Do, 24.07.2008 10:33
von turtle47
Guten Morgen Sg1985,
bei mir funktioniert folgender Code:
Code: Alles auswählen
Sub Listbox_select
oDoc = thisComponent
oController = oDoc.getCurrentController()
oform =odoc.drawpage.forms.getbyindex(0)
oList = oForm.getByName("ListBox")
oListCtr = ThisComponent.CurrentController.GetControl(oList)
oTextCtr = oListCtr.SelectedItem
oPosCtr = oListCtr.SelectedItempos
msgbox oTextCtr
msgbox oPosCtr
End Sub
Bei Dir auch?
Jürgen
Re: Listbox (im Formular) auslesen durch Makro
Verfasst: Do, 24.07.2008 10:52
von sg1985
leider nicht, ich habe es folgendermaßen umgeändert (Variablen definiert):
Code: Alles auswählen
Dim oDoc as Object, cController as Object, oForm as Object, oList as Object
Dim oListCtr as Object, oTextCtr as Object, oPosCtr as Object
oDoc = thisComponent
oController = oDoc.getCurrentController()
oForm = oDoc.drawpage.forms.getbyindex(0)
oList = oForm.getByName("ListBox2")
oListCtr = ThisComponent.CurrentController.GetControl(oList)
oTextCtr = oListCtr.SelectedItem
oPosCtr = oListCtr.SelectedItempos
msgbox oTextCtr
msgbox oPosCtr
ich erhalte aber in der Zeile "oForm = oDoc.drawpage.forms.getbyindex(0)" den Fehler "Eigenschaft oder Methode nicht gefunden"
Re: Listbox (im Formular) auslesen durch Makro
Verfasst: Do, 24.07.2008 11:27
von ykcim
Hallo,
irgendwie ist Dein Code etwas durcheinander.
Zuerst versucht das Formular eines Sheets zu holen.
In Deinem zweiten Post versuchst Du das Formular aber von einem Text zu holen.
Code: Alles auswählen
oDoc = thisComponent
oForm = oDoc.drawpage.forms.getbyindex(0)
Wenn es sich immer noch um ein Calc-Dokument handelt geht das nicht.
mfg
Michael
Re: Listbox (im Formular) auslesen durch Makro
Verfasst: Do, 24.07.2008 11:41
von sg1985
danke für eure Bemühungen, mein Makro funktioniert nun, ich kann den selektierten Eintrag aus der Listbox auslesen und in einen String speichern.
Nun hänge ich aber beim nächsten Problem: ich brauche diesen selektierten Listboxeintrag, der in der Variable "oTextCtr" steht, als Parameter
für die Select Abfrage.
Ich möchte also schreiben: Select id from staff where name = oTextCtr
Natürlich funktioniert das so nicht, also wie gebe ich in einer Select Anweisung an, dass es sich bei oTextCtr um eine Variable handelt?
Re: Listbox (im Formular) auslesen durch Makro
Verfasst: Do, 24.07.2008 11:47
von turtle47
sg1985 hat geschrieben:danke für eure Bemühungen, mein Makro funktioniert nun, ich kann den selektierten Eintrag aus der Listbox auslesen und in einen String speichern.[/[uote]
Wir möchten auch gerne noch was lernen. Was hast Du denn verändert das es jetzt funktioniert?
Re: Listbox (im Formular) auslesen durch Makro
Verfasst: Do, 24.07.2008 11:58
von ykcim
Um Deine Variable in dem Selectbefehl zu bekommen musst Du den String zusammensetzen.
selectstr="Select id from staff where name ='"+oTextCtr+"'"
ergibt dann
Select id from staff where name='Variable'
Für den Selectbefehl muß der String noch in Hochkommas ' eingeklammert werden.
mfg
Michael
Re: Listbox (im Formular) auslesen durch Makro
Verfasst: Do, 24.07.2008 12:20
von sg1985
hallo turtle47,
so schaut das funktionierende Makro nun aus:
Code: Alles auswählen
sub Abfrage
' Datenbankverbindung
' Kontext holen
oDatenbankKontext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
' Datenquelle auswählen
' Name der registrierten Datenquelle
oDatenquelle = oDatenbankKontext.getByName( "db_test3" )
'
oDatenquelle.setLoginTimeout( 10 )
' Verbindung zur DB herstellen
'
If Not oDatenquelle.IsPasswordRequired Then
oVerbindung = oDatenquelle.getConnection("postgres","")
Else
oInteractionHandler = createUnoService( "com.sun.star.sdb.InteractionHandler" )
oVerbindung = oDatenquelle.connectWithCompletion( oInteractionHandler )
End If
' Verbindung nicht geklappt
If IsNull( oVerbindung ) Then
msgbox "keine Verbindung zur DB (user/passwort falsch?)"
exit sub
End If
Dim oForm as Object, oList as Object
Dim oListCtr as Object, oTextCtr as String, oPosCtr as String
oForm = thisComponent.sheets(0).Drawpage.Forms.getByName("Standard")
oList = oForm.getByName("ListBox")
oListCtr = ThisComponent.CurrentController.GetControl(oList)
oTextCtr = oListCtr.SelectedItem
oPosCtr = oListCtr.SelectedItempos
msgbox oTextCtr
msgbox oPosCtr
'Abfrage
Dim s as String
sSQL = "SELECT s_id from staff where s_lname='"+oTextCtr+"';"
oStatement = oVerbindung.createStatement
oResultSet = oStatement.executeQuery( sSQL )
if oResultSet.Next() then
s = oResultSet.getString(1)
msgBox s
end if
End Sub
Re: Listbox (im Formular) auslesen durch Makro
Verfasst: Do, 24.07.2008 12:21
von sg1985
danke Michael, das funktioniert wunderbar!