Warum ist die Abfrage nicht editierbar?

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

peschiber
**
Beiträge: 41
Registriert: So, 28.04.2019 08:51

Warum ist die Abfrage nicht editierbar?

Beitrag von peschiber »

Hallo,
Ausgangspunkt:
Tabelle 1 > enthält Stammdaten: Nachname usw.
Tabelle 2 > enthält Anschrift: Straße usw.

Sql basiert auf dem Filter:
:qID IS NULL OR "tbl_P_Stammdaten"."ID_P" = :qID

Anweisung:
SELECT "tbl_P_Stammdaten"."Nachname", "tbl_P_Anschrift"."P_Straße", "tbl_P_Stammdaten"."ID_P"
FROM "tbl_P_Stammdaten", "tbl_P_Anschrift"
WHERE "tbl_P_Stammdaten"."ID_P" = "tbl_P_Anschrift"."ID_P"
AND ( :qID IS NULL OR "tbl_P_Stammdaten"."ID_P" = :qID )
ORDER BY "tbl_P_Stammdaten"."Nachname" ASC

Es werden zwar die gewünschten Daten (un)gefiltert angezeigt, sind aber nicht editierbar.

Auch wenn das Forum nicht dazu da ist Basiswissen in Sql zu vermitteln, habe den Hinweis gelesen, wäre ich doch sehr dankbar, wenn mir als Einsteiger auf die Sprünge geholfen würde.

Von daher meine Frage:
Wie muss die Anweisung lauten, damit diese Anfrage editiert werden kann?

Danke, Peter
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Warum ist die Abfrage nicht editierbar?

Beitrag von RobertG »

Hallo Peter,

Abfragen, die editierbar sein sollen, müssen die Primärschlüssel aller betroffenen Tabellen enthalten. Bei Dir muss in der Abfrage also der Schlüssel der Stammdaten- und der Anschriftstabelle stehen.

Gruß

Robert
peschiber
**
Beiträge: 41
Registriert: So, 28.04.2019 08:51

Re: Warum ist die Abfrage nicht editierbar?

Beitrag von peschiber »

Hallo Robert

ganz lieben Dank, hast mir mit deinem Hinwies sehr geholfen.

Leider habe ich bezüglich einer anderen Abfrage ein ähnliches Problem, was das Editieren anbelangt, obwohl ich deinen Hinweis beachtet habe:
Abfragen, die editierbar sein sollen, müssen die Primärschlüssel aller betroffenen Tabellen enthalten.
Tabelle 1 > Nachname
Tabelle 2 > Familienstatus

Primerschlüssel: "tbl_Familienstatus"."ID_Fammilienstatus" & "tbl_P_Stammdaten02"."ID_P"
Beziehung:
"tbl_P_Stammdaten02"."Fammilienstatus" <> "tbl_Familienstatus"."ID_Fammilienstatus"

Sql-Anweisung
SELECT "tbl_P_Stammdaten02"."Nachname", "tbl_P_Stammdaten02"."Fammilienstatus", "tbl_Familienstatus"."familienstand", "tbl_Familienstatus"."ID_Fammilienstatus", "tbl_P_Stammdaten02"."ID_P"
FROM "tbl_P_Stammdaten02", "tbl_Familienstatus"
WHERE "tbl_P_Stammdaten02"."Fammilienstatus" = "tbl_Familienstatus"."ID_Fammilienstatus"

Bei dieser Anweisung kann ich zwar den Nachnamen ändern, beim Ändern des Familienstatus in der Tabelle "tbl_P_Stammdaten02"."Fammilienstatus" erhalte ich jedoch eine Fehlermeldung:

„Fehler beim Schreiben des aktuellen Datensätzes.“

Was ist falsch an der Anweisung?
Wie muss die Anweisung lauten, damit ich den Familienstatus in der Tabelle "tbl_P_Stammdaten02" ändern kann?

Für einen entsprechenden Hinweis, wäre ich sehr dankbar, Peter
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Warum ist die Abfrage nicht editierbar?

Beitrag von RobertG »

Hallo Peter,

Code: Alles auswählen

SELECT "tbl_P_Stammdaten02"."Nachname", 
"tbl_P_Stammdaten02"."Fammilienstatus", 
"tbl_Familienstatus"."familienstand", 
"tbl_Familienstatus"."ID_Fammilienstatus", 
"tbl_P_Stammdaten02"."ID_P"
FROM "tbl_P_Stammdaten02", "tbl_Familienstatus"
WHERE "tbl_P_Stammdaten02"."Fammilienstatus" = "tbl_Familienstatus"."ID_Fammilienstatus"
Du wirst in so einer Konstruktion nicht die Beziehungen zwischen den Tabellen ändern können. Du kannst aber sehr wohl den Inhalt beider Tabellen ändern.

Machst Du daraus eine korrelierende Abfrage, so kannst Du nur den Inhalt von "tbl_P_Stammdaten02" ändern - dafür aber auch die Beziehung zu "tbl_Familienstatus":

Code: Alles auswählen

SELECT "a"."Nachname", 
"a"."Fammilienstatus", 
(SELECT "familienstand" FROM "tbl_Familienstatus" WHERE "ID_Fammilienstatus" = "a"."Fammilienstatus") AS "familienstand",
"a"."ID_P"
FROM "tbl_P_Stammdaten02" AS "a"
Gruß

Robert
peschiber
**
Beiträge: 41
Registriert: So, 28.04.2019 08:51

Re: Warum ist die Abfrage nicht editierbar?

Beitrag von peschiber »

Hallo Robert,

ganz lieben Dank für deine Hilfe und vor allem dafür, dass du dir noch die Mühe machst, „meine“ Feldnamen in deine Anweisung einzubauen.

Leider habe ich momentan nur sehr wenig Zeit mich mit Base zu beschäftigen, dürften eigentlich nur maximal 4 Stunden pro Woche sein. (Muss mich selbstdiziplinieren!)

Dennoch wäre ich dir dankbar, wenn du mir einen Rat geben könntest bezüglich des weiteren Vorgehens, was Abfragen anbelangt.

Während ich zu Anfang mehr oder weniger alle Daten in eine Tabelle gepackt habe: Name, Anschrift, Telefon, Familienstatus, Geschlecht, Vertrauensperson usw. - typisch Anfänger – habe ich angefangen, all die Informationen auf verschiedene Tabellen zu verteilen, was zur Folge hatte, dass ich plötzlich als Anfänger mit dem Problem der Editierbarkeit der Datensätze konfrontiert wurde.

Das „Stammblatt“ - Formular wird, falls erforderlich, geplante ca. 14 Unterformulare enthalten, um alle inzwischen auf mehrere Tabellen aufgeteilte Daten in einem einzigen Formular anzuzeigen und editieren zu können. Das gesamte Formular basiert auf einem Filter.

Meine Frage bezüglich Sql:
Ist es sinnvoller dem jeweiligen Unterformular eine Sql-Anweisung zuzuordnen oder besser eine einzige Sql-Anweisung für das gesamte Formular zu konzipieren.
Letzteres dürfte sicherlich dann eine wesentlich kompliziertere Sql-Anweisung werden?
Hätte aber, vermute ich, den riesigen Vorteil, dass ich ohne entsprechende Unterformulare auskomme.
Performanz ist bezüglich meiner Minidatenbank zweitrangig, da es sich maximal um 600 Stammdatensätze handeln wird.

Mit freundlichen Grüßen Peter, El Salvador
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Warum ist die Abfrage nicht editierbar?

Beitrag von RobertG »

Hallo Peter,

zum einen: Aufsplitten auf verschiedene Tabelle wird aus 3 Gründen gemacht.
Das ist einmal, dass bestimmte Daten in der Ursprungstabelle oft wiederholt werden. Beispielsweise, wenn Personen eine bestimmte Sportart zugeordnet wird. Die Sportart steht in einer separaten Tabelle. Gespeichert wird der Primärschlüssel.
Das ist zum anderen, wenn eine Zeile sonst mehrmals vorkommen müsste, da einer Person z.B. mehrere Sportarten ausübt.
Und als letztes ist das mit dem Aufteilen dann der Fall, wenn in verschiedenen Datensätzen häufig die gleichen Felder leer bleiben. Dann wird eben in einer 1:1-Verbindung ausgesondert.

Nun zu den Formularen: Grundsätzlich würde ich nicht in Abfragen etwas zusammenfassen, was Du anschließend auf Formulare verteilen willst. In der Regel bestehen bei mir Formulare höchstens aus einer Abfrage zu der Datengrundlage des Hauptformulars, damit ich diese Daten gegebenenfalls für eine Filterung durchsuchen kann. Die Unterformulare geben dazu doch sowieso nur die passenden Daten wieder, werden also bereits durch das Hauptformular gefiltert.

Gruß

Robert
peschiber
**
Beiträge: 41
Registriert: So, 28.04.2019 08:51

Re: Warum ist die Abfrage nicht editierbar?

Beitrag von peschiber »

Hallo Robert,

herzlichen Dank für deine Hinweise.
Als Einsteiger, der zunächst viel gelesen hat, bevor er sich an die Realisierung des ersten Miniprojektes in Base herangetastet hat, bin ich mehr als verunsichert, was die Aufteilung in Tabellen anbelangt.
Ich bin mir nicht sicher, ob du oder „R“ das hervorragende Beispielprogramm „Medien ohne Makro“ für Einsteiger „entwickelt“ hast.
Aber in dem Beispiel werden sogar Straßen in einer extra Tabelle erfasst.

Nachdem bei mir die „Stammdatei-Tabelle“ ca. 50 Feldnamen enthielt, von Nachname, Geburtstag, Anschrift, Vertrauensperson über Versicherung bis Kommunikation ( Handy, Sozial Media), habe ich angefangen, diese auf verschiedene Tabellen zu verteilen.
Das war nicht so ein Akt, weil meine Test-Stammdaten zur Zeit nur aus 20 Datensätze bestehen.
(Und via Calc dank Lucy Müller auf YouTube einfach zu realisieren.)

Nur hatte die Aufteilung zur Folge, dass ich plötzlich mit der Nicht-Editierbarkeit der Datensätze konfrontiert wurde.

Was die Redundanz anbelangt, ist das bei meinen geplanten Miniprogramm vernachlässigbar.
Eher schon zu berücksichtigen, dass etliche Felder leer bleiben, weil z. B. keine Vertrauensperson oder ein Sozial Media-Account vorhanden ist.
Bei maximal ca. 600 Stammdatensätzen sicher verschmerzbar? Oder?

Von daher meine konkrete Frage:
Zurück zum ersten Entwurf: ca. 50 Feldnamen in der „Stammdaten“ oder doch aufteilen?

Was natürlich nicht heißt, dass zusätzliche Tabellen bei meinem Miniprogramm erforderlich sind z. B. Termine etc.

Mit lieben Grüßen, Peter El Salvador

Mein Motto:Armut durch Bildung bekämpfen
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Warum ist die Abfrage nicht editierbar?

Beitrag von RobertG »

Hallo Peter,

erst einmal noch etwas zu den Tabelleninhalten. Wenn Du die Mediendatenbank aus dem Handbuch ansprichst: Da ist nur eine Tabelle aufgesplittet worden, so dass zwei 1:1-Beziehungen entstehen. Das liegt daran, dass die Leser-Tabelle entweder die Personendetails aus der Zuweisung zu Schulklassen oder aus der Zuweisung zu Adressen holt. Wäre alles zusammen in einer großen Tabelle, so könnte das genauso funktionieren; es würden aber eben bei Leuten mit Klassenzuweisung die Adressfelder frei bleiben und umgekehrt. Auch bei der Auslagerung von Daten in separate Tabellen ist immer die Frage, wie oft eine gleichbleibende Eingabe wohl vorkommt. So sind die Straßen in der Mediendatenbank ausgelagert, weil diese Datenbank eine sehr begrenzt lokale Erfassung von Personen beinhaltet und sich da auch die Straßennamen oft wiederholen können. Wenn so eine Datenbank Inhalte eines Landkreises beherbergen würde, dann hätte ich die Straßennamen direkt in die Adressaufnahme gepackt.

Ich würde die Aufteilung einer Tabelle dann vermeiden, wenn sie nur "zu viele Felder" hat. Da ist die Arbeit mit einer einzigen Tabelle einfacher. Nur funktioniert das natürlich weniger gut mit Haupt- und Unterformularen, sondern in der Regel mit einem Formular für alle Felder. Das kann natürlich auch heißen, dass Du Felder, die nicht direkt ausgefüllt werden müssen, aus Platzmangel im Startformular eben auf weitere Formulare verteilst und dann von einem zum nächsten Formular springst.

Gruß

Robert
Antworten