GELÖST Listenfeld in Unterformular nicht auswählbar

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

seballa
**
Beiträge: 24
Registriert: So, 18.09.2005 10:38

GELÖST Listenfeld in Unterformular nicht auswählbar

Beitrag von seballa »

Hallo,

ich frage mit LO(6.3.4.2) Base eine MYSQL Datenbank mittels dem mysql-java-connector ab.
Um mich nach einer längeren SQL Pausewieder damit vertraut zu machen habe ich mich die Youtube Videos von Lucky Müller angesehen und mich wieder ein bisschen eingelesen.

EDIT2:
Ich habe mein Problem durchschaut und kann es jetzt besser erklären, habe aber keine Lösung.
Ich versuche folgendes:

Im Beispiel viewtopic.php?f=27&t=54234#p237478 ist in der Tabelle Adressen die ID der Tabelle Haarfarben gespeichert, die dann im Formular ins Listenfeld geschrieben wird. Gefiltert wird nach Vor und oder Nachname. Dies kann ich auch wunderbar gleichzeitig tun.

Ich möchte jetzt zwei Dinge auf einmal mit der Haarfarbe tun:
  • einerseits nach der Haarfarbe im Klartext filtern
  • anderseits möchte ich dass die Haarfarbe in einem Listenfeld angezeigt wird und ich diese in der Liste ändern kann


Um nach der Haarfarbe (im Klartext) Filtern zu können muss ich sie in meiner Abfrage auch auslesen und mit dem Feld ID in der Tabelle Haarfarben verknüpfen. Damit sieht meine Query so aus:

Code: Alles auswählen

SELECT
    `Adressen`.`ID`,
    `Adressen`.`Nachname`,
    `Adressen`.`Vorname`,
    `Adressen`.`Strasse`,
    `Adressen`.`PLZ`,
    `Adressen`.`Ort`,
    `Haarfarben`.`Haarfarbe`
FROM
    `Adressen`,
    `Haarfarben`
WHERE
    (
        LOWER(`Haarfarben`.`Haarfarbe`) 
			LIKE 
		LOWER(CONCAT(:qHaarfarbe, '%')) 
			OR 
		:qHaarfarbe IS NULL
    ) 
AND 
`Haarfarben`.`ID` = `Adressen`.`Haarfarbe`
Die letzte Zeile ist mein Verhängnis, nur so bekomme ich eine Tabelle mit korrekt zugeordneten Haarfarben, aber durch die Verknüpfung ist eine Veränderung in der Liste nicht möglich, die korrekte Haarfarbe wird angezeigt, das Feld bleibt grau und ich kann die Haarfarbe nicht verändern. https://postimg.cc/cgPLJgHz


Danke für Tipps
Seballa
Zuletzt geändert von seballa am Mo, 20.01.2020 15:33, insgesamt 1-mal geändert.
seballa
**
Beiträge: 24
Registriert: So, 18.09.2005 10:38

Re: Listenfeld in Unterformular nicht auswählbar

Beitrag von seballa »

Ich konnte mein Problem nun selbst lösen. Die Antwort war es ein weiteres Unterformular (3. Ebene Filter-->Abfrage-->Tabelle) zu erstellen und die ID mit der ID der Abfrage zu verknüpfen, das Listenfeld greift jetzt auf die Tabelle zu und nicht mehr auf die Abfrage und meine gewünschte Funktion klappt. Ich habe das auch einmal in der Beispieldatei ergänzt.

Grüße
Seballa
Dateianhänge
Adressen_Liste_und_Filter.odb
siehe auch Video Tutorials http://de.openoffice.info/viewtopic.php?f=27&t=54234#p237478
(72.5 KiB) 145-mal heruntergeladen
seballa
**
Beiträge: 24
Registriert: So, 18.09.2005 10:38

Re: GELÖST Listenfeld in Unterformular nicht auswählbar

Beitrag von seballa »

Ich habe festgestellt, dass es mit einer Abfrage über mehrere Tabellen nicht mehr möglich ist einen Datensatz hinzuzufügen, das habe ich gelöst in dem ich noch ein Formular in der ersten Ebene erstellt habe mit zwei Knöpfen "Neu" und "Speichern" sowie einem Textfeld für den Namen des neuen Datensatzes.
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: GELÖST Listenfeld in Unterformular nicht auswählbar

Beitrag von F3K Total »

Hallo seballa,
wenn die Klartextsuche eine feste Bedingung ist, dann muss es wohl so kompliziert sein, wie du es gemacht hast.
Wenn nicht, kannst du statt des Textfeldes einfach ein Listenfeld zum Filtern nehmen, dann bleibt die Abfrage beschreibbar.
Alles etwas einfacher.
Gruß R
Dateianhänge
Adressen_Liste_und_Filter.odb
(71.95 KiB) 155-mal heruntergeladen
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: GELÖST Listenfeld in Unterformular nicht auswählbar

Beitrag von F3K Total »

Hallo,
noch eine Idee, folgende Abfrage, mit korrelierender Unterabfrage für die Haarfarbe ist beschreibbar:

Code: Alles auswählen

SELECT
    "ID",
    "Nachname",
    "Vorname",
    "Strasse",
    "PLZ",
    "Ort",
    "Haarfarbe",
    ( SELECT "Haarfarbe" FROM "Haarfarben" WHERE "Adressen"."Haarfarbe" = "Haarfarben"."ID" ) "HF"
FROM
    "Adressen"
WHERE
    ( LOWER ( "HF" ) LIKE LOWER ( :qHaarfarbe || '%' ) OR :qHaarfarbe IS NULL )
Gruß R
seballa
**
Beiträge: 24
Registriert: So, 18.09.2005 10:38

Re: GELÖST Listenfeld in Unterformular nicht auswählbar

Beitrag von seballa »

Hallo,

vielen Dank! Deiner erste Lösung klappt auch in MYSQL wunderbar. Ein Dropdownfeld ist in meinem Fall völlig ausreichend, ich frage eine begrenzte Auswahl an Kategorien (Weinsorten) und Lieferanten (Winzern) ab, ich baue meine bereits in BASE vorhandene Weinkellerdatenbank neu in schöner, sauberer und mit Zugriff von unterwegs.

Dein PLAN B geht leider mit MYSQL nicht, nach ein bisschen Googlen weiß ich auch warum. Die Reihenfolge bei MYSQL ist:

FROM clause
WHERE clause
GROUP BY clause
HAVING clause
SELECT clause
ORDER BY clause

Dadurch wirft die Abfrage einen Fehler, die Tabelle HF ist in der Where clause noch nicht bekannt.

Diese Abfrage wird zwar korrekt ausgeführt, aber ist wiederum nicht beschreibbar.

Code: Alles auswählen

SELECT
    "ID",
    "Nachname",
    "Vorname",
    "Strasse",
    "PLZ",
    "Ort",
    "Haarfarbe",
    ( SELECT "Haarfarbe" FROM "Haarfarben" WHERE "Adressen"."Haarfarbe" = "Haarfarben"."ID" ) "HF"
FROM
    "Adressen"
WHERE
    ( 
    	LOWER ( ( SELECT "Haarfarbe" FROM "Haarfarben" WHERE "Adressen"."Haarfarbe" = "Haarfarben"."ID" )) 
    LIKE 
    	LOWER (CONCAT( :qHaarfarbe, '%' )) OR :qHaarfarbe IS NULL 
    )
Mein Ziel ist es meine DB ohne Makros zu bauen mal sehen, ob ich es hin bekomme aber das war ein großer Schritt vorwärts.

Nochmal danke für die schnelle Hilfe und die tollen Videos, hilft mir sehr!

Seballa
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: GELÖST Listenfeld in Unterformular nicht auswählbar

Beitrag von F3K Total »

Vielleicht so:

Code: Alles auswählen

SELECT
    "ID",
    "Nachname",
    "Vorname"
    "Strasse",
    "PLZ",
    "Ort",
    "Haarfarbe",
    ( SELECT "Haarfarbe" FROM "Haarfarben" WHERE "Adressen"."Haarfarbe" = "Haarfarben"."ID" ) "HF"
FROM
    "Adressen"
WHERE
    ( LOWER
        ((SELECT
            "Haarfarbe"
         FROM
             "Haarfarben"
         WHERE
             "Adressen"."Haarfarbe" = "Haarfarben"."ID" 
         ))
         LIKE
             LOWER ( :qHaarfarbe || '%' )
         OR
             :qHaarfarbe IS NULL )
Gruß R
Antworten