Listbox (im Formular) auslesen durch Makro

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Listbox (im Formular) auslesen durch Makro

Beitrag 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
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Listbox (im Formular) auslesen durch Makro

Beitrag 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
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Listbox (im Formular) auslesen durch Makro

Beitrag 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"
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Re: Listbox (im Formular) auslesen durch Makro

Beitrag 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
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Listbox (im Formular) auslesen durch Makro

Beitrag 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?
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Listbox (im Formular) auslesen durch Makro

Beitrag 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?
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Re: Listbox (im Formular) auslesen durch Makro

Beitrag 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
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Listbox (im Formular) auslesen durch Makro

Beitrag 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
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Listbox (im Formular) auslesen durch Makro

Beitrag von sg1985 »

danke Michael, das funktioniert wunderbar!
Antworten