Wir sind auf Ihre Unterstützung angewiesen!
💚 BITTE helfen Sie uns HEUTE mit einer SPENDE 💚
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Über ein Listenfeld mit Abfrage 2 Felder in der Tabelle im Subformular befüllen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Benutzeravatar
zwackel
Beiträge: 10
Registriert: Di 2. Apr 2019, 22:17

Re: Über ein Listenfeld mit Abfrage 2 Felder in der Tabelle im Subformular befüllen

Beitrag von zwackel » Mi 29. Jan 2020, 20:49

Ich kaufe mir auch gerne ein Buch, um mein Unwissen zu beseitigen, wo ich nach der Lektüre mein Makro selber schreiben kann. Also mit Anleitung zum Makro für meinen Filter ...
Viele Grüße
Volker

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

Re: Über ein Listenfeld mit Abfrage 2 Felder in der Tabelle im Subformular befüllen

Beitrag von RobertG » Mi 29. Jan 2020, 21:32

Hallo Volker,

Du willst also jetzt einen Filter in einem Subformular haben? Nicht ein Listenfeld, das zwei Felder gleichzeitig beschreiben soll?

Der Code, den Du da nutzt, spricht ein Hauptformular an (von dem es auf einer Ebene mehrere geben kann). Willst Du eine Ebene tiefer kommen, so musst Du über das Hauptformular das Unterformular ansprechen. Schau einmal in das Kapitel "Zugriff auf ein Formular" - wie der von Dir genannte Code ebenfalls Base-Handbuch > Makros ...

Code: Alles auswählen

oForm = thisComponent.Drawpage.Forms.getByName("MainForm").getByName("SubForm")
So ähnlich dürfte das bei Dir aussehen, wenn Du die Formular nicht selbst benannt/umbenannt hast.

Wenn ich die Vorlage von Dir sehe erleidest Du damit aber auch eine Bauchlandung: In dem Formular existieren zwei Formulare "MainForm" und darin zwei Unterformulare "SubForm". Welches soll nun genommen werden? Die jeweils zweiten gleichlautenden Formulare leer sind wäre es angebracht, die erst einmal zu löschen.

Es ist nicht so, dass Dir hier keiner helfen will. Nur wäre aus meiner Sicht die beste Hilfe, wenn zuerst einmal die Tabellen stimmig wären. Und das passt (zumindest in dem Beispiel, das Du geliefert hast) nicht zu einer möglichen Problemlösung.

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

Benutzeravatar
zwackel
Beiträge: 10
Registriert: Di 2. Apr 2019, 22:17

Re: Über ein Listenfeld mit Abfrage 2 Felder in der Tabelle im Subformular befüllen

Beitrag von zwackel » Do 30. Jan 2020, 20:36

Ich glaub ich muss da nochmal ganz von vorne anfangen. Das zweite Hauptformular/ Subformular hat mir Base reingemacht. Die habe ich bei verschiedenen Formularen gefunden und gelöscht. Keine Ahnung was da bei LibreOffice schief läuft.
Also wenn alles korrekt ist und ich die Fehler von Libreoffice alle gefunden habe, sollte das also gehen?
Wo ist der Fehler SQL-Status: HY000 Es existiert keine Tabelle "Heft" hat sich auch irgendwie selbst geheilt und kommt jetzt nicht mehr.
Die Grundsatzfrage bezüglich des Index müssen wir hier nicht weiterführen, ich will nur sinnvoll mein Ziel erreichen.

Danke für die Hilfe, jetzt bekomme ich den nächsten Fehler.
"firebird_sdbc error: *Dynamic SQL Error *SQL error code = -206 *Column unknown *Art *At line 1, column 34 caused by 'isc_dsql_prepare'"

SUB FilterSetzen
DIM oDoc AS OBJECT
DIM oForm AS OBJECT
DIM oFeld AS OBJECT
DIM stFilter As String
oForm = thisComponent.Drawpage.Forms.getByName("MainForm").getByName("SubForm")
oFeld = oForm.getByName("SubForm_Grid").getByName("Art_SW")
stFilter = oFeld.Text
oForm.filter = " UPPER(""Art"") LIKE '%'||'" + UCase(stFilter) + "'||'%'"
oForm.ApplyFilter = TRUE
oForm.reload()
End Sub

Wie setze ich den Filter richtig?

Ich möchte in dem SQL
SELECT "Schlagwort", "Kürzel", "Art" FROM "Schlagwort" ORDER BY "Art", "Schlagwort"
den Filter auf das Feld Art setzen, so dass der Inhalt des Feldes "lstSchlagwort" der Tabelle des Subformulars nur die Werte anzeigt, die den Wert des Feldes "Art_SW" im Feld "Art" der Abfrage enthalten.

Ich hoffe ich habe das verständlich beschrieben.
Viele Grüße
Volker

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

Re: Über ein Listenfeld mit Abfrage 2 Felder in der Tabelle im Subformular befüllen

Beitrag von RobertG » Do 30. Jan 2020, 20:59

Hallo Volker,

der Filter, den Du da setzt, ist der gleiche, den Du in den Eigenschaften des Formulars setzen kannst. Die Basis für Dein Unterformular ist die Tabelle "Art_SW", die kein Feld "Art" besitzt.

Du möchtest stattdessen eine Abfrage filtern, die Du für ein Listenfeld nutzt. So etwas kannst Du nicht über den Formularfilter erledigen. Die einfachste Variante ist es, die Abfrage mit einer Filtertabelle zu verknüpfen, die nur einen einzigen Datensatz beinhaltet. In Deinem Falle wird das Makro dann ausgelöst, wenn in dem Feld "Art_SW" der Inhalt geändert wurde (Focusverlust o.ä.). Dann wird zuerst der Wert des Feldes in der Filtertabelle gespeichert und danach das betreffende Listenfeld neu geladen.

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

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

Re: Über ein Listenfeld mit Abfrage 2 Felder in der Tabelle im Subformular befüllen

Beitrag von RobertG » Sa 1. Feb 2020, 11:10

Ich komme noch einmal auf den ursprünglichen Thread zurück:
Ich habe die angefügte Beispieldatenbank einmal so geändert, dass zumindest das Ziel erreicht würde. Dazu habe ich allerdings die Relationen zwischen den Tabellen größtenteils entfernt, weil es einfach nicht geht, 2 Felder mit einem Listenfeld zu übertragen (1 Feld - 1 Kontrollelement).

So ist die Datenbank (wie vorher auch) vom Aufbau her natürlich nicht fehlerfrei, weil eben die zugrundeliegende eingebettete Firebird-Datenbank die Beziehungen nicht mehr kontrolliert. Zumindest funktioniert aber die Beziehung Hauptformular zu Unterformular.

Die Tabelle "Heft" habe ich dabei völlig raus gelassen, da sie ja noch nicht in das Formular eingebaut wurde und die gleiche "Krankheit" hat: 2 Primärschlüssel, die beide übertragen werden müssten.

Übrigens: Die Datenbank enthält bereits in der Ursprungserstellung eine n:m-Beziehung. Die Tabelle "Art_SW" sollte nämlich zwei Tabellen über die Primärschlüssel miteinander verbinden. Jedem Artikel sollten mehrere Schlagworte zugeordnet werden können, jedem Schlagwort aber auch mehrere Artikel.
Dateianhänge
ZeitschriftenTeilArtikelHeft_ohneRelationen.zip
Neufassung ohne Relationen
(183.51 KiB) 163-mal heruntergeladen
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

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten