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.

Code: Alles auswählen

oForm = thisComponent.sheets(0).Drawpage.Forms(0)
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!