[GELÖST] BASE-Abfrage: Wie Parameter per Makro übergeben?

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [GELÖST] BASE-Abfrage: Wie Parameter per Makro übergeben?

Re: [GELÖST] BASE-Abfrage: Wie Parameter per Makro übergeben

von F3K Total » Mi, 27.03.2013 06:17

Sauber! Transfer-Leistung 1+ :wink:
Gruß R

Re: BASE-Abfrage: Wie Parameter per Makro übergeben?

von geimist » Mi, 27.03.2013 01:40

Habe es rausgefunden:
oCon muss ich an Stelle wie oben so definieren:
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("Name-meiner-DB")
oCon = DataSource.GetConnection("","")

Re: [GELÖST] BASE-Abfrage: Wie Parameter per Makro übergeben

von geimist » Di, 26.03.2013 23:28

Eine Frage hätte ich dann noch:
Es gibt doch noch ein Szeniario, wo ich das Ganze von extern auslöse, d.h. nicht über ein Formular der DB mit der Abfrage. Ich möchte also 'thiscomponent' mit dem Zugriff auf die angemeldete DB ersetzten.
SQL-Abfragen mache ich bisher so:

Code: Alles auswählen

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDatenquelle = DatabaseContext.getByName("NAME-MEINER-DB")

If not oDatenquelle.IsPasswordRequired Then
	oDatVerb = oDatenquelle.getConnection("","")	'("Benutzername","Passwort")
else
	oHandler = oDatenquelle.createUnoService("com.sun.star.sdb.InteractionHandler")
	oDatVerb = oDatenquelle.ConnectWithCompletion(oHandler)
End If

oStatement = oDatVerb.createStatement()
oStatement.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_SENSITIVE
		   
sSQL = "SELECT ""MailPfad"" FROM ""CONFIG"" WHERE ""ID"" = 'config'"
oRow = oStatement.executeQuery( sSQL )
oRow.absolute(1)
Wie kann ich 'thiscomponent' jetzt hier in diesem Code ersetzen:

Code: Alles auswählen

Sub BerichtParameterabfrage
nID = 17
oform = thiscomponent.drawpage.forms(0)
oconnection = oform.activeconnection
oqExport = oconnection.Queries.getbyname("qExport")
oqExport.Command = "SELECT * FROM ""Table1"" WHERE ""ID"" = "& nID
end sub

Re: BASE-Abfrage: Wie Parameter per Makro übergeben?

von geimist » Mo, 25.03.2013 20:29

Super! Es klappt :D

Vielen Dank

Re: BASE-Abfrage: Wie Parameter per Makro übergeben?

von F3K Total » Mo, 25.03.2013 19:46

Dann sollte dies klappen:

Code: Alles auswählen

Sub BerichtParameterabfrage
nID = 17
oform = thiscomponent.drawpage.forms(0)
oconnection = oform.activeconnection
oqExport = oconnection.Queries.getbyname("qExport")
oqExport.Command = "SELECT * FROM ""Table1"" WHERE ""ID"" = "& nID
end sub
Gruß R

Re: BASE-Abfrage: Wie Parameter per Makro übergeben?

von geimist » Mo, 25.03.2013 19:35

Per Button - in mehreren Formularen.

Selbst wenn dein Makro so in einem Formular starte, erscheint Objektvariable nicht belegt. Ich glaube, die direkt DB-Ansprechbarkeit aus sich selbst heraus via 'thisdatabasedocument' wurde erst mit OOo 3.3 (?) eingeführt, wenn ich mich nicht täusche.
Dateianhänge
Bildschirmfoto 2013-03-25 um 19.43.27.png
Bildschirmfoto 2013-03-25 um 19.43.27.png (97.61 KiB) 5719 mal betrachtet

Re: BASE-Abfrage: Wie Parameter per Makro übergeben?

von F3K Total » Mo, 25.03.2013 19:32

von wo aus willst du das Makro starten?
Aus einem internen Formular?

Re: BASE-Abfrage: Wie Parameter per Makro übergeben?

von geimist » Mo, 25.03.2013 19:27

F3K Total hat geschrieben:Wenn, wie Du schreibst, der Parameter in der Datenbank liegt, benötigst Du gar kein Makro, sondern die passende Abfrage.
Das Ganze wird eine Art Serien E-Mail. Ich kann zwar die Abfrage so erstellen, dass das Dokument im Ganzen erstellt wird, aber ich möchte es etwas personalisieren. Ich werde den Bericht nacheinander mit unterschiedlichen Parametern aufrufen und die ausgegebene E-Mail persönlich gestalten. Daher benötige ich den Weg via Makro.

Re: BASE-Abfrage: Wie Parameter per Makro übergeben?

von geimist » Mo, 25.03.2013 19:22

F3K Total hat geschrieben:

Code: Alles auswählen

sub S_Create_Export_Query
    nID = 17
    oqExport = thisdatabasedocument.DataSource.QueryDefinitions.getbyname("qExport")
    oqExport.Command = "SELECT * FROM ""Table1"" WHERE ""ID"" = "& nID
end sub

Vielen Dank. Dieser Ansatz klingt sehr vielversprechend.

Da ich ja aber noch mit einer älteren OOo-Version arbeiten muss, gab es wohl die Ansprechbarkeit in Form von thisdatabasedocument noch nicht.

Mit dieser Form kann ich zwar eine neue Abfrage erstellen, aber keine bestehende ersetzen / updaten:

Code: Alles auswählen

Sub BerichtParameterabfrage

Dim DatabaseContext as Object
Dim oDatenquelle as Object
Dim oAbfDef as  Object 'die einzelne Abfrage
Dim oAbfragen as Object 'alle Abfragen (Sammelobject)

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDatenquelle = DatabaseContext.getByName("angemeldete DB")

oAbfDef = createUnoService ("com.sun.star.sdb.QueryDefinition")

oAbfDef.Command = "SELECT  ""Name"" FROM ""Adressen"" "

oAbfragen = oDatenquelle.getQueryDefinitions()
oAbfragen.insertByName ("TEST-b", oAbfDef)

End Sub
Das ist jetzt zwar sehr 'BASE-lastig', …
Gibt es da so was wie 'ubdateByName' an Stelle von 'insertByName'?

Re: BASE-Abfrage: Wie Parameter per Makro übergeben?

von F3K Total » Mo, 25.03.2013 17:57

Hi, klar gibt es die.
Du kannst Die Abfrage schlicht per Makro definieren.
Ein Beispiel: Angenommen die bereits angelegte Abfrage heißt qExport,
dann kannst Du mit diesem Code das SQL-Kommando neu setzen, wobei das Kommando ein String ist, den du nach belieben aufbauen kannst.

Code: Alles auswählen

sub S_Create_Export_Query
    nID = 17
    oqExport = thisdatabasedocument.DataSource.QueryDefinitions.getbyname("qExport")
    oqExport.Command = "SELECT * FROM ""Table1"" WHERE ""ID"" = "& nID
end sub
nID ist in diesem Falle ein veränderbarer Wert.

Viel Erfolg
Gruß R

EDIT: Wenn, wie Du schreibst, der Parameter in der Datenbank liegt, benötigst Du gar kein Makro, sondern die passende Abfrage.

Re: BASE-Abfrage: Wie Parameter per Makro übergeben?

von juetho » Mo, 25.03.2013 17:52

geimist hat geschrieben:Gibt es überhaupt solch eine Möglichkeit?
So etwas habe ich noch nicht gemacht, ich bin mir aber ziemlich sicher, dass es geht.

In deinem Makro rufst du doch einen Bericht ab. Wenn du den als Objekt deklarierst, kannst du ihn mit xray oder mri untersuchen. (Möglicherweise muss er zuerst geöffnet werden, bevor er zur Verfügung steht.) Genauso wie im Berichtsgenerator müsstest du dort unter Bericht > Daten > Filter die entsprechende Einstellung sehen und danach im Makro ändern können. Ich glaube, ich habe so etwas hier auch schon über die Forumssuche gesehen.

Unter Umständen muss die Abfrage geändert werden. Wichtig ist, dass der betreffende Parameter in der Spaltenliste enthalten ist (unabhängig davon, ob diese Spalte im Bericht auftauchen soll oder nicht); dann kann diese Spalte in der WHERE-Klausel und damit im Filter berücksichtigt werden.

Viel Erfolg! (Ich will es auch irgendwann einbauen.) Jürgen

[GELÖST] BASE-Abfrage: Wie Parameter per Makro übergeben?

von geimist » Mo, 25.03.2013 17:20

Hallo Zusammen,

Mein Aufbau:
Ich habe eine Abfrage mit der Parameterabfrage 'Mitarbeiter' (also an der entsprechenden Stelle in der Abfrage ein Fragezeichen gesetzt). Um diese Abfrage habe ich einen Bericht gebaut, den ich per Makro ausführe. Da kommt die Parameterabfragebox und dann wird das ganze an Thunderbird geleitet - resultierend aus diesem Thread.

Meine Frage:
Ich möchte an Stelle der Parameterabfragebox Werte aus der Datenbank nehmen. Aber wie kann ich diese Werte per Makro in eine Abfrage einbinden, die ja einem fertig formatierten Bericht zugrunde liegt.

Gibt es überhaupt solch eine Möglichkeit?

Vielen Dank schon einmal.

Nach oben