Öffnen einer Base-Abfrage über ein Macro & Werteübergabe

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

Moderator: Moderatoren

smguenther
**
Beiträge: 23
Registriert: So, 22.04.2007 14:07

Öffnen einer Base-Abfrage über ein Macro & Werteübergabe

Beitrag von smguenther »

Hi,

ich habe trotz eifriger Suche im Forum keinen Hinweis auf eine Lösung für mein folgendes Problem gefunden:

In Base habe ich ein Formular mit 8 Kombo-Boxen, die Werte dieser Boxen sollen als Kriterium für eine Abfrage dienen.
Wie bringe ich es mit einem Makro fertig, diese Abfrage zu öffnen und gleichzeitig die 8 Werte als Kriterium zu übergeben?
Hat eine(r) von Euch so etwas schon einmal realisiert?

Danke für jeden Tipp / Hinweis,

Stefan
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Öffnen einer Base-Abfrage über ein Macro & Werteübergabe

Beitrag von komma4 »

hole Dir die gewählten Werte der 8 controls, baue eine Abfrage zusammen und starte sie.

den gewählten Wert einer Listbox holen:

Code: Alles auswählen

oListe = oDialog.getControl("ListBox1")
' wenn ein Eintrag in der Liste gewählt wurde
if oListe.SelectedItemPos > -1 then
	' gewählten Text holen
	tempSel = oListe.SelectedItem
Abfrage gegen eine registrierte Datenquelle

Code: Alles auswählen

' Datenbankverbindung
' Kontext holen
oDatenbankKontext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
' Datenquelle auswählen
oDatenquelle = oDatenbankKontext.getByName( "DBName" )  ' Name der Datenquelle

' Verbindung herstellen: benutzer und passwort übergeben !!!
oDatenquelle.setLoginTimeout( 10 ) 

oVerbindung = oDatenquelle.getConnection( "", "" )

sSQL = "SELECT " & _
		" r.nummer , " & _
		" k.name " & _
	" FROM " & _
		" t091_rechnung as r, " & _
		" t090_kunde as k " & _
	" WHERE " & _
		" r.t090_id = k.id "& _
	" ORDER BY "& _
		" r.nummer ASC ;"
' Statement erzeugen
oStatement = oVerbindung.createStatement
' Abfrage absetzen
oResultSet = oStatement.executeQuery( sSQL )

While oResultSet.Next()
....
Mehr zum Behandeln von Dialogen in meinem Beispiel ATL2 - AutoTextListe2

Hilft das weiter?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
smguenther
**
Beiträge: 23
Registriert: So, 22.04.2007 14:07

Re: Öffnen einer Base-Abfrage über ein Macro & Werteübergabe

Beitrag von smguenther »

Hi,
komma4 hat geschrieben:hole Dir die gewählten Werte der 8 controls, baue eine Abfrage zusammen und starte sie.

den gewählten Wert einer Listbox holen:

Code: Alles auswählen

oListe = oDialog.getControl("ListBox1")
' wenn ein Eintrag in der Liste gewählt wurde
if oListe.SelectedItemPos > -1 then
	' gewählten Text holen
	tempSel = oListe.SelectedItem
Da ich erst seit ein paar Tagen mit den Macros spiele, ist meine Lösung is dahin etwas simpler gestrickt;

Code: Alles auswählen

	oForm = ThisComponent.drawpage.forms.getByName("Standard") 
	oControl = oForm.getByName("ComboBox")
	oControl1 = oForm.getByName("ComboBox1")
        oControl2 = oForm.getByName("ComboBox2")	
        oControl3 = oForm.getByName("ComboBox3")	
        oControl4 = oForm.getByName("ComboBox4")	
        oControl5 = oForm.getByName("ComboBox5")	
        oControl6 = oForm.getByName("ComboBox6")	
        oControl7 = oForm.getByName("ComboBox7")
komma4 hat geschrieben: Abfrage gegen eine registrierte Datenquelle

Code: Alles auswählen

' Datenbankverbindung
sSQL = "SELECT " & _
		" r.nummer , " & _
		" k.name " & _
	" FROM " & _
		" t091_rechnung as r, " & _
		" t090_kunde as k " & _
	" WHERE " & _
		" r.t090_id = k.id "& _
	" ORDER BY "& _
		" r.nummer ASC ;"
' Statement erzeugen
oStatement = oVerbindung.createStatement
' Abfrage absetzen
oResultSet = oStatement.executeQuery( sSQL )

While oResultSet.Next()
....
Hilft das weiter?
Hm, ich sehe da nicht den Zusammenhang zwischen dem ersten und dem zweiten Teil. Meine Hoffnung/Idee war es, daß ich die Werte der ComboBoxen in Form eines Arrays an eine bereits bestehende Abfrage übergeben könnte. So a la loadComponentFromURL.
Oder wäre es möglich, mit loadComponentfromURL erst die Abfrage zu starten und ihr dann zu sagen, daß sie sich als Kriterien die Werte aus den Komboboxen holen soll?

Gruß,

Stefan
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Öffnen einer Base-Abfrage über ein Macro & Werteübergabe

Beitrag von komma4 »

Deine "simple" Lösung ist doch OK. Hier könntest Du etwas Tipparbeit sparen, indem Du die verkürtze Schreibweise nutzt

Code: Alles auswählen

With oForm
 oControl = .getByName( "ComboBox" )
 oControl1 = .getByName( "ComboBox1" )
' u.s.w.
End With
Damit hast Du aber nur die Objekte, noch nicht die markierten Einträge, oder?

Teil2:
Ich weiss von keinem Weg eine Abfrage mit Variablen in BASE zu formulieren, die während der Ausführung von einem Makro besetzt werden (anders, als eine Parameter-Abfrage interaktiv auszuführen).

Deshalb dieses Beispiel:
nach dem Holen der Werte aus Deinen Komboboxen erstellst Du mit Basic die SQL-Abfrage und lässt sie gegen die DB laufen.

Werde Licht?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Antworten