Parameter-Abfrage aus Makro aufrufen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
MHvM
Beiträge: 4
Registriert: Do 14. Feb 2019, 14:51

Parameter-Abfrage aus Makro aufrufen

Beitrag von MHvM » Do 14. Feb 2019, 15:22

Ich habe eine Datenbank mit einer Abfrage, in die ein oder zwei (versch. Varianten) Parameter (beschreiben jeweils ein Datum) eingebaut sind. Diese Abfrage wird als Datenquelle für einen Bericht genutzt. Um den Bericht zu generieren, werde ich ohnehin ein Makro laufen lassen, da ich die Zellhöhen dynamisch halten muss. (Siehe viewtopic.php?t=15762 und viewtopic.php?t=18598) Bei der Gelegenheit würde ich die beiden Parameter gerne aus einem Formular entnehmen.

Ich stelle mir also vor, ein zusätzliches Formular "Bericht erzeugen" zu generieren, das zwei Felder enthält, in die ich die Daten eingeben kann, und einen Button "Bericht erzeugen", der ein Makro aufruft, dass dann mit diesen Daten den Bericht erzeugt, der die parametrisierte Abfrage nutzt. Dazu muss ich beim Öffnen des Berichts über

Code: Alles auswählen

ThisDatabaseDocument.ReportDocuments.getByName("Berichtsname").open
ja irgendwie die Parameter übergeben.

Geht das? Wenn ja, wie? Bzw. wo kann ich das nachlesen?

RobertG
Beiträge: 1969
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Parameter-Abfrage aus Makro aufrufen

Beitrag von RobertG » Do 14. Feb 2019, 15:46

Hallo MHvM,

alles, was Du ohne Makros direkt mit der Datenbank erledigen kannst, das erledige auch mit der Datenbank. Ist schneller und einfacher. Für Deinen Fall: keine Parameterabfrage sondern eine Abfrage mit Unterabfragen. Die Unterabfragen lesen ihre Inhalte aus einer Tabelle, die bei mir z.B. standardmäßig "Filter" heißt und deren Primärschlüssel eine Ja/Nein-Feld ist, weil ich über das Formular immer wieder die gleiche Zeile bearbeite.

Mit dem Druck auf den Button, der den Bericht starten soll, wird zuerst die Zeile der Filtertabelle beschrieben und dann der Bericht gestartet.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

MHvM
Beiträge: 4
Registriert: Do 14. Feb 2019, 14:51

Re: Parameter-Abfrage aus Makro aufrufen

Beitrag von MHvM » Do 14. Feb 2019, 23:24

Hallo,

das klingt plausibel, und ich glaube, ich habe die relevanten Passagen aus dem Handbuch usw. alle gefunden. Nur an einer Stelle komme ich nicht weiter: der SQL-String

Code: Alles auswählen

	stSql = "UPDATE ""Filter_Datum"" SET ""Anf_Datum"" = '" + oDatum1.GetCurrentValue() +"', ""End_Datum"" = '" + oDatum2.GetCurrentValue() +"'  WHERE ""ID"" = TRUE"
erzeugt bei mir einen "Wrong data type"-Fehler. Ich vermute, das liegt daran, dass "GetCurrentValue()" etwas zurückliefert, das die HSQLDB nicht als Datum interpretieren kann. Die beiden Formularfelder oDatum1 und oDatum2 sind (im Formular) vom Typ "Formatiertes Feld", als Formatierung habe ich dann "Datum / JJJJ-MM-TT" gewählt. (Das war geraten, stimmt anscheinend nicht.)

Ich vermute, ich muss erst den Rückgabewert von GetCurrentValue irgendwie konvertieren: nur, wie?

Vielen Dank für jede Hilfe,

Mirko

RobertG
Beiträge: 1969
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Parameter-Abfrage aus Makro aufrufen

Beitrag von RobertG » Fr 15. Feb 2019, 16:21

Hallo Mirko,

beim Datum kannst Du natürlich nicht einfach den currentValue nehmen. Schau Dir dazu einmal im Makro-Kapitel > "Bedienbarkeit verbessern" > "Datumswert aus einem Formularwert in eine Datumsvariable umwandeln" an. Wenn Du mit einer aktuellen LibreOffice-Version arbeitest, dann kannst Du natürlich die Abfrage der Version raus lassen. Bei Dir steht dann nicht

Code: Alles auswählen

Datumswert = CDateFromIso(oFeld.CurrentValue.Year & stMonat & stTag)
sondern

Code: Alles auswählen

Datumswert = oFeld.CurrentValue.Year & "-" & stMonat & "-"& stTag
Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

MHvM
Beiträge: 4
Registriert: Do 14. Feb 2019, 14:51

Re: Parameter-Abfrage aus Makro aufrufen

Beitrag von MHvM » Mi 27. Feb 2019, 13:16

Hallo, heute habe ich einmal wieder Zeit, mich um mein LO-Projekt zu kümmern.

Vielen Dank für den Hinweis auf den Zugriff auf die Komponenten des Rückgabewertes. Damit bin ich einen Schritt weiter.

Gerne hätte ich das selbst herausgefunden. Dazu hätte ich einerseits eine "Tabelle" o. ä. gebraucht, der man entnehmen kann, welchen Typ der Ergebnis von getCurrentValue (je nach Objekt) hat, und eine weitere, welche Methoden Objekte dieses Typs anbieten. Wo kann ich solche Informationen systematisch zusammengestellt finden? Also so etwas wie eine Sprachreferenz, die vielleicht nicht anfängerfreundlich ist, aber dafür alle Sprachelemente und die Standardbibliothek vollständig, querverlinkt und verlässlich darstellt. Also so etwas wie unter https://docs.python.org/3/ für Python. Für LO Basic habe ich das noch nicht gefunden. Ich kenne bislang das Kapitel zur Makroprogrammierung aus dem Base-Handbuch, eine "Übersicht" zur Makroprogrammierung für LO, und div. Hilfeseiten wie https://help.libreoffice.org/Basic/CDat ... on_Runtime die aber nicht zu einer umfassend verlinkten Referenz zu gehören scheinen. Oder anders gefragt: Woher beziehen die Makro-Experten ihr Wissen?

Der nächste Stolperstein, vor dem ich stehe: Wie frage ich ab, ob oForm.getCurrentValue leer ist (also ob das Formularfeld leer ist)? Der Test

Code: Alles auswählen

oFeld.CurrentValue = ""
bringt's offenbar nicht. Wenn ich's aber nicht abfrage, funktionieren die folgenden Schritte natürlich nicht.

Am liebsten wüsste ich jetzt: wie kann ich selbst herausfinden, wie die Antwort lautet...
(Am zweitliebsten natürlich: wie geht's denn nun?)

Vielen Dank, Mirko

RobertG
Beiträge: 1969
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Parameter-Abfrage aus Makro aufrufen

Beitrag von RobertG » Mi 27. Feb 2019, 17:41

Hallo Mirko,

die Referenz dazu ist die SDK. Du musst also in den Softwarequellen nach einem Paket suchen, in dem SDK steht.

Die SDK gibt es natürlich auch online. Gegebenenfalls kannst Du von hier starten: https://api.libreoffice.org/.

Ich untersuche immer die einzelnen Elemente mit XRay: http://berma.pagesperso-orange.fr/index2.html. Da gibt es auch eine Version, die das Ganze in deutscher Sprache erklärt.

Wenn Du nach suchst, dann ist das ein leerer Text. Deswegen gegebenenfalls schauen, ob die Formularfelder die Eigenschaft "Text" haben und dann mit

Code: Alles auswählen

oFeld.Text = ""
nachhaken.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

MHvM
Beiträge: 4
Registriert: Do 14. Feb 2019, 14:51

Re: Parameter-Abfrage aus Makro aufrufen

Beitrag von MHvM » Mi 27. Feb 2019, 20:22

Hallo Robert,
RobertG hat geschrieben:
Mi 27. Feb 2019, 17:41
Hallo Mirko,

die Referenz dazu ist die SDK. Du musst also in den Softwarequellen nach einem Paket suchen, in dem SDK steht.
Die SDK gibt es natürlich auch online. Gegebenenfalls kannst Du von hier starten: https://api.libreoffice.org/.
Super, das ist genau das, was mir fehlte. Google hat mir das nie gezeigt. (Ich habe allerdings auch nie nach der SDK gesucht :| )
Ich untersuche immer die einzelnen Elemente mit XRay: http://berma.pagesperso-orange.fr/index2.html. Da gibt es auch eine Version, die das Ganze in deutscher Sprache erklärt.
Und das ist ja noch superer (falls das geht.) Vielen Dank, das hilft weiter!

Viele Grüße,

Mirko

Antworten