meine erstes "Projekt" mit Base ist eine Rechnungsdatenbank. Inzwischen habe ich als Access-Umsteiger das Prinzip mit den Makros einigermaßen begriffen.
Mein neues Problem: Im Handbuch fand ich einen Codeschnippsel, in dem ich oForm etc angepasst habe.
Code: Alles auswählen
SUB Filtern_und_Drucken
DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT
DIM oForm AS OBJECT
DIM oFeld AS OBJECT
DIM oDatenquelle AS OBJECT
DIM oVerbindung AS OBJECT
DIM oSQL_Anweisung AS OBJECT
DIM stSQL AS STRING
oDoc = thisComponent
oDrawpage = oDoc.Drawpage
oForm = oDrawpage.Forms.getByName("MainForm")
oFeld = oForm.getByName("fmtID")
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
oVerbindung = oDatenquelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()
stSql = "UPDATE ""Filter"" SET ""Integer"" = '"+oFeld.GetCurrentValue()+"' WHERE
""ID"" = TRUE"
oSQL_Anweisung.executeUpdate(stSql)
ThisDatabaseDocument.ReportDocuments.getByName("Rechnung").open
END SUB
Anschließend wird der Bericht gestartet. Die Ansicht, auf der der Bericht beruht, wurde entsprechend um eine Bedingung erweitert:
... WHERE "Rechnung_ID" = IFNULL((SELECT "Integer" FROM "Filter" WHERE "ID" = TRUE),"Rechnung_ID") ...
Es wird das Feld "Integer" ausgelesen. Falls dieses Feld keinen Wert enthält wird stattdessen
"Rechnung_ID" = "Rechnung_ID" gesetzt. Das bedeutet, dass alle Datensätze angezeigt werden –
nicht nur der Filterdatensatz. So können also gegebenenfalls mit der gleichen Ansicht auch alle
gespeicherten Rechnungen ausgedruckt werden.
Wo muss die Bedingung eingetragen qwerden?