Variablen über Programmstart hinaus definieren

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Theophilus
Beiträge: 92
Registriert: Di 27. Sep 2011, 12:30

Variablen über Programmstart hinaus definieren

Beitrag von Theophilus » Mi 5. Jun 2019, 11:21

Moin, moin,
ich möchte eine Variable definieren, die sich ca 1x im Jahr ändert (Jahrgang einer Gruppe).
Bislang habe ich sie von Hand in den Makrotext geschrieben, aber irgendwie stehe ich jede Jahr neu vor der Frage, wo ich sie denn noch gleich versteckt hatte ... Darum hätte ich gern einen Knopf, der mir erlaubt, die Variable neu zu definieren.
Wie mache ich das am besten?
Mir schwebt vor, eine Tabelle anzulegen, die Variablenbezeichnung und Wert enthält. Da schreibe ich dann rein: Jg 2019.
Aber ich stehe gerade auf dem Schlauch, wie ich meine globale Variable damit befülle.
als Selectbefehl ganz einfach - aber wie bekomme ich den Wert in die Variable?
Oder geht es noch einfacher?
Herzliche Grüße aus dem Hohen Norden!

LO 6.0.6.2 unter Xubuntu 18.04

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

Re: Variablen über Programmstart hinaus definieren

Beitrag von RobertG » Mi 5. Jun 2019, 16:23

Hallo Theophilus,

würde ich auch mit der Tabelle machen. Weißt Du jetzt nicht, wie Du aus einer Tabelle einen Wert mit Makro ausliest? Dann klappt das Folgende:

Code: Alles auswählen

SUB Startvariable
DIM oDatasource AS OBJECT
DIM oConnection AS OBJECT
DIM oSQL_Statement AS OBJECT
DIM stSql AS STRING
DIM oResult AS OBJECT
oDatasource = thisDatabaseDocument.CurrentController
IF NOT (oDatasource.isConnected()) THEN oDatasource.connect()
oConnection = oDatasource.ActiveConnection()
oSQL_Statement = oConnection.createStatement()
stSql = "SELECT ""Var"" FROM ""Varspeicher"" WHERE ""ID"" = TRUE"
oResult = oSQL_Statement.executeQuery(stSql)
WHILE oResult.next
stGlobalVar = oResult.getString(1)
WEND
END SUB
Ich bin davon ausgegangen, dass die Tabelle "Varspeicher" einen Primärschlüssel "ID" als Ja/Nein-Feld hat, also maximal 2 Zeilen speichern kann. In der Zeile, in der das Feld "ID" angeklickt ist, wird der Wert der Variablen im Feld "Var" als Text gespeichert. Mit der WHILE - WEND-Schleife wird durch das Ergebnis der Abfrage gegangen. Diese Schleife benötigst Du eigentlich nicht, da nur ein Wert abgefragt wird. Es reicht, oResult.next und anschließend oResult.getString(1). Das Ergebnis der Abfrage wird in stGobalVar geschrieben. Das Makro sollte dann mit dem Start der Datenbankdatei gestartet werden, also mit "Ansicht wurde erzeugt" oder "Dokument öffnen" (einzige Möglichkeit bei aktuellen LO-Versionen und Base) unter Extras > Anpassen > Ereignisse verbinden.

Gruß

Robert

Antworten