Seite 1 von 1
BASE - Abfragen editierbar
Verfasst: Mi 31. Aug 2016, 11:37
von LO_Micha
Hallo,
ich habe immer wieder einmal Schwierigkeiten, Abfragen die auf mehreren Tabellen basieren, editierbar (Datenätze hinzufügen oder ändern) zu halten. Laut
BASE-Handbuch / Eingabemöglichkeit in Abfragen sollen Abfragen editierbar sein, wenn kein Tabellen-Alias verwendet wird und die Primärschlüssel-Felder der beteiligten Tabellen enthalten sind.
Hierzu ein Beispiel
auf Grundlage der Beispiel-DB 'Medien ohne Makros' (gekürzt): Enthalten sind zwei Tabellen
- * 'Medien' (n-Tabelle)
* 'Medienart' (1-Tabelle).
Beide Tabellen haben ein Primärschlüsselfeld 'ID', die Tabelle 'Medienart' zusätzlich ein typ- und inhaltsgleiches Feld 'Dummy'.
Außerdem enthält das Beispiel zwei Abfragen
- * Medien editierbar: Verknüpfung auf das Primärschlüsselfeld 'ID' der Tabelle 'Medienart',
* Medien NICHTeditierbar: Verknüpfung auf das Feld 'Dummy' der Tabelle 'Medienart'.
Ist meine Ansicht richtig, dass für editierbare Abfragen
der Bezug auf die 1-Tabelle auf das Primärschlüsselfeld erfolgen muss? Oder gibt es noch andere Bedingungen?
Danke.
Michael
Re: BASE - Abfragen editierbar
Verfasst: Mi 31. Aug 2016, 19:19
von RobertG
Hallo Michael,
ist wohl korrekt so: Abfragen sind nur dann editierbar, wenn die Primärschlüssel der entsprechenden Tabellen enthalten sind, aber eben auch die Fremdschlüsselverbindung korrekt gewählt wird.
Ich wäre nicht darauf gekommen, dass jemand eine Fremdschlüsselverbindung in einer Abfrage bewusst abwählt - dann passt doch die Relation bei einer eventuellen Eingabe nicht mehr. Sobald Du trotz der Verbindung zum Dummyfeld noch die Verbindung Fremdschlüssel - Primärschlüssel setzt, dann funktioniert die Eingabe auch wieder.
Ob ein weiteres Feld, wie z.B. das Feld "Dummy", genau den gleichen Inhalt und den gleichen Feldtyp hat, spielt dabei keine Rolle. Das bekommt ja die Datenbank von der Definition her nicht mit. Es macht ja auch keinen Sinn, innerhalb einer Tabelle zwei Felder mit durchgängig gleichen Inhalten zu führen
Ich werde da wohl einen Satz in der Beschreibung ergänzen müssen, der explizit auf die Verbindung hinweist.
Edit: Habe das jetzt für die zukünftige Version des Handbuch Base 5.3 aufgenommen. Steht auf S. 259, zur Zeit natürlich in dem Ordner für die Weiterentwicklung des Base-Handbuchs. Siehe meine untenstehende Signatur.
Gruß
Robert
Re: BASE - Abfragen editierbar
Verfasst: Do 1. Sep 2016, 19:17
von LO_Micha
Hallo Robert,
vielen Dank für Überprüfung und Bestätigung.
RobertG hat geschrieben:ist wohl korrekt so: Abfragen sind nur dann editierbar, wenn die Primärschlüssel der entsprechenden Tabellen enthalten sind, aber eben auch die Fremdschlüsselverbindung korrekt gewählt wird.
Ich wäre nicht darauf gekommen, dass jemand eine Fremdschlüsselverbindung in einer Abfrage bewusst abwählt - dann passt doch die Relation bei einer eventuellen Eingabe nicht mehr.
Ja klar, das Feld 'Dummy' in 'Medienart' ist gesperrt. Aber mySQL mag Primärschlüssel vorzugsweise als Autowert und ACCESS mag nicht so gern andere Spalten als den Primärschlüssel verwenden. Daher kam bei mir das Konstrukt, werde ich wohl ändern ...
RobertG hat geschrieben:Sobald Du trotz der Verbindung zum Dummyfeld noch die Verbindung Fremdschlüssel - Primärschlüssel setzt, dann funktioniert die Eingabe auch wieder.
Könntest Du mir das bitte zu Lernzwecken in das Beispiel einfügen? Ich habe es hier versucht: Die Links werden zu einem verbunden und die Abfrage bleibt nicht editierbar. Bug oder Bedienfehler?
Danke
Michael
Re: BASE - Abfragen editierbar
Verfasst: Do 1. Sep 2016, 21:01
von RobertG
Hallo Michael,
diese Abfrage (nach Abschalten des Designmodus) ist nicht editierbar:
Code: Alles auswählen
SELECT "Medien"."ID", "Medien"."Autor", "Medien"."Titel", "Medien"."E_Jahr", "MedienArt"."Medienart", "MedienArt"."ID", "MedienArt"."Dummy" FROM "MedienArt", "Medien" WHERE "MedienArt"."Dummy" = "Medien"."Medienart_ID"
Diese Abfrage dann schon:
Code: Alles auswählen
SELECT "Medien"."ID", "Medien"."Autor", "Medien"."Titel", "Medien"."E_Jahr", "MedienArt"."Medienart", "MedienArt"."ID", "MedienArt"."Dummy" FROM "MedienArt", "Medien" WHERE "MedienArt"."Dummy" = "Medien"."Medienart_ID" AND "MedienArt"."ID" = "Medien"."Medienart_ID"
Du hattest, wenn ich mich recht entsinne, da sogar noch irgendeine JOIN-Verbindung drin. Wenn Du die über die GUI wieder rein bringst, dann ist die Abfrage wieder nicht editierbar. Die folgende Abfrage funktioniert aber auch mit einem JOIN:
Code: Alles auswählen
SELECT "Medien"."ID", "Medien"."Autor", "Medien"."Titel", "Medien"."E_Jahr", "MedienArt"."Medienart", "MedienArt"."ID", "MedienArt"."Dummy" FROM "Medien" LEFT JOIN "MedienArt" ON "MedienArt"."ID" = "Medien"."Medienart_ID" AND "MedienArt"."Dummy" = "Medien"."Medienart_ID"
Bei der JOIN-Verbindung, die mir die GUI raus schmeißt, muss ich dafür sorgen, dass die Verbindung zwischen Primärschlüssel und Fremdschlüssel direkt hinter dem ON steht. Steht stattdessen "MedienArt"."Dummy" = "Medien"."Medienart_ID" direkt hinter dem ON, so ist die Abfrage nicht editierbar.
Gruß
Robert