Base/PostgreSQL: INSERT/UPDATE auf Views

Hallo zusammen,

PostgreSQL (9.4) kennt "Updatable Views". Das sind "einfache" Views, die INSERT, UPDATE und DELETE erlauben.

In (Postgre-) sieht das etwa so aus:

CREATE table person (name text, ort text, land text);
CREATE VIEW laender AS SELECT land FROM person;
INSERT INTO laender (land) VALUES ('Schweiz');

Schaue ich mit LO Base auf solch eine PostgreSQL-Datenbank, erscheinen alle Views mit bei den Tabellen. Sie lassen sich auch öffnen, aber das Erfassen bzw. Ändern von Daten scheint nicht möglich zu sein.

Ebenso wenig scheint das Erfassen bzw. Ändern möglich zu sein, wenn ich ein Formular auf solch eine View aufbaue. Auch dort werden die bestehenden Datensätze zwar angezeigt, aber das Ändern ist nicht möglich.

Gibt es eine Möglichkeit, dieses PostgreSQL-Fature in LO Base zu nutzen?

(An den Einstellungen in "Formular-Eigenschaften" scheint es nicht zu liegen. Dort sind die Felder "Daten hinzufügen", "Daten ändern" und "Daten löschen" alle auf "Ja" gesetzt.)

Für Tips immer dankbar ist
Ulrich

Hallo Ulrich,

Schaue ich mit LO Base auf solch eine PostgreSQL-Datenbank,
erscheinen alle Views mit bei den Tabellen. Sie lassen sich auch
öffnen, aber das Erfassen bzw. Ändern von Daten scheint nicht
möglich zu sein.

Hast Du versucht, über Extras → SQL einen entsprechenden Update-Befehl
abzusetzen? Ich kann das hier mangels PostgreSQL-Installation nicht
testen.

Wenn das funktioniert könnte vielleicht helfen, die Analyse des
SQL-Befehls im Formular auszuschalten.

Wenn die direkte Abgabe des SQL-Befehls nicht funktioniert, dann wird
die Möglichkeit durch die PostgreSQL-Verbindung nicht zur Verfügung
gestellt.

Gruß

Robert

Hallo Robert,

hatte ich nicht, habe ich jetzt nachgeholt. Der SQL-Update-Befehl lautet

update ansicht set vorname='Heinz' where nachname='Müller'

(wobei ansicht eine View ist) und wird unter Extras --> SQL ohne Probleme ausgeführt.

Auch habe ich jetzt in den Formular-Eigenschaften "SQL Befehl analysieren" abgeschaltet.

Leider hilft das nicht. Im Formular kann ich schon die Einträge nicht ändern, geschweige denn dass Speichern möglich wäre. Der Cursor wird in den Feldern zwar sichtbar, er lässt sich auch bewegen, aber Eingaben von Buchstaben usw. werden ignoriert.

Offenbar erkennt LO Base schon beim Aufbau bzw. beim Erstellen des Formulars, dass es sich bei der Datenquelle um eine View und nicht im eine Tabelle handelt. Entsprechend stellt es die Möglichkeit zu editieren nicht zur Verfügung.

Gibt es noch 'ne Chance?

Gruß
Ulrich

Ulrich Goebel schrieb:

Offenbar erkennt LO Base schon beim Aufbau bzw. beim Erstellen
des Formulars, dass es sich bei der Datenquelle um eine View
und nicht im eine Tabelle handelt. Entsprechend stellt es die
Möglichkeit zu editieren nicht zur Verfügung.

Meines Wissens ist für die Editierbarkeit Voraussetzung, dass ein
Primärschlüsselfeld im View enthalten ist.
Ist das hier der Fall?

Stefan

Hallo Stefan,

ich habe die View entsprechend geändert. D.h. ich habe den in der zugrunde liegenden Primärschlüssel in die View aufgenommen:

create table a (id serial primariy key, feld text,...)
create view v as select id, text,...

Dann habe ich den Primärschlüssel als eins von vielen Feldern in das Base-Formular mit aufgenommen. Die Eigenschaft "SQL-Befehl analysieren" habe ich auf "Nein" gestellt

So hatte ich jedenfalls Deinen Tip verstanden.

Leider bleibt mein Problem bestehen: Das Formular akzeptiert keine Änderungen in den Feldern.

Übrigens: Das Update/Insert/Delete auf der View funktioniert auf PostgreSQL-Ebene unabhängig von dem Primärschlüssel in der View, z.B. wie schon vorher gesagt über Extras-->SQL.

Gruß
Ulrich