ich bin noch neu hier und bringe nicht sehr viel Erfahrung in der Datenbankentwicklung mit.
Inzwischen habe ich hier schon einige gute Tips erhalten, indem ich die vorhandenen Beiträge durchsucht habe.
Jetzt komme ich aber schon so lange an einer blöden Stelle nicht weiter, dass ich mal eine Frage stellen möchte, zu der ich die Antwort bisher nicht gefunden habe.
Situation ist eine Datenbank für den Bestand an einer Sammlung alter Bücher. Struktur ist: Hauptkategorie - Unterkategorie - Titel - Exemplar. Jede Tabelle hat eine eigene ID als Primärschlüssel. Diese vier wichtigsten Tabellen sind in dieser Reihenfolge miteinander 1:n-verknüpft.
Eine wesentliche Maske (also das Writer-Dokument, das meist als Formular im weiteren Sinne bezeichnet wird) dient zur Bearbeitung eines Datensatzes, indem für diesen die Informationen zum Titel (einschließlich zugehöriger Haupt- und Unterkategorie) sowie die damit verknüpften Exemplare angezeigt werden und bearbeitet werden können.
Eine zweite Maske dient der Auswahl eines Datensatzes zur Bearbeitung. Dazu habe ich die eindrucksvollen Instruktionen aus dem Makro-Handbuch v4.0 verwendet, die eine Suche über alle Felder ermöglicht. Dazu gehe ich allerdings nicht in eine Tabelle, sondern in eine Abfrage, die für jedes Exemplar eine Zeile mit allen verknüpften Informationen enthält.
Ziel ist es nun, dass ich im Suchergebnis eine Zeile (d. h. einen bestimmten Datensatz) markiere und über einen Makro die o. g. Bearbeitungsmaske aktiviere sowie deren Anzeige so filtere, dass sie nur den einen ausgewählten Datensatz zu bearbeiten gestattet. Nach Ende der Bearbeitung soll wieder die Suchmaske den Fokus erhalten.
Der Makro, der das leisten soll, liest also den Primärschlüssel des Buchtitels aus und aktiviert die Bearbeitungsmaske.
Dann will ich auf dieser Maske auf den relevanten Datensatz filtern. Dazu muss ich einen Filterstring erstellen und diesen auf die Maske anwenden. Dabei läuft der Makro aber auf den Fehler, dass er die Eigenschaft ".Filter" nicht kennt.
Langes Herumprobieren mit xray hat mich auch nicht weitergebracht. Daher jetzt die hoffnungsvolle Frage in die Runde, wie kann ich das beschriebene Ziel erreichen?
Ich gebe eine Fassung (von inzwischen vielen) dieses Makros mit dazu in der Hoffnung, dass das mein Problem erklärt.
Code: Alles auswählen
Sub Datensatz_uebertragen_red
'
' Jeremias, 18.03.2013, LibreOffice 3.6.5
'
' Der im Tabellenkontrollfeld (erste) markierte Datensatz soll
' zur Bearbeitung im Hauptbearbeitungsformular geöffnet werden.
'
Dim nID As Variant
Dim oBearbForm As Object
Dim oForm As Object
Dim oForm2 As Object
Dim oSpalte As Object
Dim oSubForm As Object
Dim sFilter As String
' Zunächst aus der Tabelle auf der Suchmaske
' den markierten Datensatz bestimmen.
oForm = ThisComponent.Drawpage.Forms.getByName("Frm_Suchmaske")
oSubForm = oForm.getByName("TKF_Suchergebnis")
oSpalte = oSubForm.getByName("spBuchID")
nID = oSpalte.Text
nID = CLng(nID)
' Sodann die Bearbeitungsmaske öffnen
oDoc = ThisComponent.Parent
oBearbForm = oDoc.Formdocuments.getByName("Frm_BuchBearbeitung")
oBearbForm.open
' Schließlich den Filter setzen
oBearbForm.Filter = " ""fdBuchID"" LIKE '" & CStr(nID) & "'" ' <--- Fehler
' <fdBuchID> ist der Feldname des Primärschlüssels
oBearbForm.ApplyFilter = True
oBearbForm.reload()
End Sub
Code: Alles auswählen
BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: Filter.