[FOSSGIS-Talk] QGIS 3, Tabellenbeziehungen, Werte aus einer Hilfstabelle verwenden

Peter K. webentry at web.de
Mi Apr 28 09:44:19 CEST 2021


Guten Morgen Bernd und Marco,

ein neuer Tag, und alle guten Dinge sind drei ;-).

Aus einer ORACLE-DB sind die Geometrietabelle "Flächenobjekte" und eine geometrielose
Tabelle "Schlüsselwerte" geladen.
Bis jetzt werden diese Tabellen mit einer anderen Anwendung verwendet, eigentlich eine
CAD Anwendung mit GIS Funktionalitäten.
Datenbankseitig aber auch in der CAD-Anwendung wurden diverse Rutinen erstellt, damit beim
Erzeugen von neuen Objekten automatisch bestimmte Tabellenfelder mit Werten gefüllt werden.
Das sind so Standard Dinge wie 'CREATE' und 'EDIT' Datum und welcher 'USER' was gemacht hat.
Dazu werden aber auch automatisch Tabellenfelder mit Werten aus der DB-Tabelle "Schlüsselwerte"
in die DB-Tabelle "Flächenobjekte" eingefügt, in Abhängigkeit des Wertes in der Tabellenspalte 'CODE', der als erstes beim
erstellen eines neuen Flächenobjektes eingetragen wird.
Diese Funktionen werden über Trigger in der ORACLE-DB ausgeführt.

Derzeit läuft das in der CAD-Anwendung so ab:
- die Geometrietabelle wird in das CAD Programm geladen und die Flächenobjekt dargestellt
- zum Bearbeiten muss der Anwender die DB sperren
- im CAD Programm wurde eine Funktion erstellt, mit VBA, die der Anwender aufruft
- dort wählt dieser zuerst aus, welchen Flächentyp er erstellen will
- der Wert dazu, kommt aus der DB-Tabelle "Schlüsselwerte"
- erst dann kann der Anwender das neue Objekt zeichnen
- nach der Zeichenaktion nutzt der Anwender wieder ein eigenes Tool, das eine Eingabemaske öffnet deren Datenfelder auf die
  DB-Tabelle "Flächenobjekte" zugreift
- durch die Trigger in der DB, wurden bestimmte Datenfelder schon mit Werten befüllt, die eben abhängig zum ausgewählten
  Flächentyp sind und aus der DB-Tabelle "Schlüsselwerte" kommen
- in der Eingabemaske können dann noch ergänzende Werte eingetragen werden, die in der DB-Tabelle "Flächenobjekte" landen
- zum Schluss müssen die Änderungen an die DB gepostet werden

Das ganze soll jetzt so ähnlich in QGIS erfolgen.
In QGIS ist die DB-Tabelle "Schlüsselwerte" über eine 'Werteabbildung' mit der DB-Tabelle "Flächenobjekte" verbunden.
So kann im Formular nach dem erstellen eines neuen Flächenobjekte der Flächentyp ausgewählt werden.
Nach dieser Aktion, und dem speichern, sollten dann auch in die anderen Tabellenfelder die entsprechenden Werte eingefügt werden.
Die Trigger in der ORACLE-DB reagieren wohl nicht auf den Eintrag in QGIS.

Zu CASE WHEN:
Habe ich bereits versucht, aber es funktioniert nicht.
In den Layereigenschaften wurde unter 'Attributformular' für die entsprechenden Layer im Menüpunkt 'Vorgaben'
eine CASE WHEN Regel eingetragen, mit dutzenden Werten. Es wurde auch die Funktion 'Vorgabewert bei Aktualisierung anwenden'
aktiviert. Wenn ich ein neues Flächenobjekt erzeuge, wird in diese Felder aber nichts eingetragen.

Habe es auch unter 'Felder' mit dem Feldrechner versucht, dabei "friert" QGIS ein, weil es dann wohl
alle bestehenden Werte neu schreibt.

Auch mit 'Beziehungen' unter den Projekteigenschaften habe ich herum probiert. Da ist aber auch die Frage, wie bekomme
ich eine regelbasierte Verknüpfung zwischen der Tabellenspalte 'CODE' in der DB-Tabelle "Flächenobjekte" und den anderen
Tabellenspalten in der DB-Tabelle "Schlüsselwerte".

Wie anfänglich schon erwähnt, kann ich Datenbankseitig nichts ändern. Die Vorgabe lautet derzeit, QGIS nutzen nur wenn die bestehenden
DB-Tabellen unverändert verwendet werden.

Danke schon mal für eure Bemühungen, und 'Kopfschmerzen'.

Gruß Peter


> Gesendet: Dienstag, 27. April 2021 um 16:12 Uhr
> Von: "Bernd Vogelgesang" <bernd.vogelgesang at gmx.de>
> An: "Peter K." <webentry at web.de>
> Cc: "FOSSGIS" <FOSSGIS-Talk-Liste at fossgis.de>
> Betreff: Re: Aw: Re: [FOSSGIS-Talk] QGIS 3, Tabellenbeziehungen, Werte aus einer Hilfstabelle verwenden
>
> Hi Peter,
> 
> tut gar nicht mehr weh.
> 
> Aber ich kann es leider weiterhin nicht vollumfänglich begreifen, da ja
> deine Anwendung weiterhin im Dunklen bleibt, also was dann mit dem Layer
> passiert, bzw. wozu er dienen soll.
> 
> Da ich aber bald den Bildschirm verlasse, schmeisse ich nur kurz den
> Begriff "Virtuellen Layer" in den Raum:
> 
> Da kann man entsprechend Abfragen in SQL (würg!) basteln, die
> entsprechende Spalten auf Grundlage deiner zwei Datenquellen befüllen.
> 
> Du fügst also in Deinem Objektlayer ein neues Objekt hinzu, und in
> deinem Virtuellen Layer aktualisieren sich dann automatisch die
> entsprechenden Werte.
> 
> Da das Ding ja nur "virtuell" ist, musst du ggf. Zwischen- oder
> Endstände als Datei exportieren.
> 
> Nur so als Idee.
> 
> Gruß,
> 
> Bernd


Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste