[FOSSGIS-Talk] QGIS: automatisches Ausfüllen von Feldern aufgrund der Eingabe in einem bestimmten Feld

Claas Leiner claas.leiner at gkg-kassel.de
So Jun 14 18:11:54 CEST 2020


Hallo Martin,


Möglichkeit 1:
Über Layer > Eigenschaften > Verknüpfungen
eine Tabelle mit den weiteren Werten anhand des gemeinsamen
Schlüssel-Kürzels anjoinen.
Anschließend den gejointen layer als neuen Layer abspeichern umd die
gejointen Werte fest in dne Layer zu schreiben.

-------------------
Möglichkeit 2:
Vorgabe mit Ausdruck

Unter
Layer > Eigenschaften > Attributformular
das automatischezu füllende Feld auswählen
und unter
"Vorgaben" einen Vorgabewert eigeben.
Der Vorgabewert kann ein bedingter Ausdruck sein:
z.B:

Das automatisch zu füllende Feld ist "Farbe" und soll automatisch auf
Grundlage des Feldes "color" gefüllt werden

Case
when "color" = 'red' then 'rot'
when "color" = 'green' then 'grün'
when "color" = 'vlue' then 'blau'
end

-------------------
Möglichkeit 3: (Gleiches Beispiel)
Eingabemaske mit Werbeziehung und Filterung der Werte über
current_value().

Unter
Layer > Eigenschaften > Attributformular > Bedienelementtyp
für das Feld "color" und das Feld "farbe"
den Typ Wertbeziehung auswählen.
Als Layer für die Werbeziehung die Tabelle
"de_en_bez" auswählen.
Die Tabelle verfügt über zwei Spalten. color und farbe

engl  | deu
------|------
red   | rot
green | grün
blue  | blau

für das Feld color sind die Bezeichnungen:
Schlüsselspalte: engl
Werstpalte:	 engl

Anschließend kann der englichsche Farbbegriff über ein Drop-Down-Menü
eingeben werden


Für das Feld farbe sind die Bezeichnungen:
Schlüsselspalte: deu
Werstpalte:	 deu

Zusätzlich ist hier ein Filterausdruck mit current_value() notwendig:
 "color" = current_value( 'engl').

Wenn jetzt in die Eingabemaske unter "color" red eingebenen wird,
schaltet das drop-down-Menü für "Farbe" automatisch auf rot, weil  der
Wert der Spalte "engl" in der Beziehungstabelle "de_en_bez" dem vorher
für color eingegebennen Wert entsprechen muss und sich in der
entsprechenden Zeile bei "deu" der Wert rot findet.

-----------------------
Möglichkeit 4:
Ein Trigger in der Datenbank (SpatiaLite, Geopackage, PostGis)
Wäre über den DB-Manager oder über ein Tool der entsprechenden Datenbank
einzugeben.

Für Geopackage oder SpatiaLite z.B.:

Create trigger color_ins
after insert on beispiel_layer
begin
 update beispiel_layer
 set
 farbe =
	Case
	when "color" = 'red' then 'rot'
	when "color" = 'green' then 'grün'
	when "color" = 'vlue' then 'blau'
	end
  ;
end
;

Create trigger color_up
after update of color
on beispiel_layer
begin
 update beispiel_layer
 set
 farbe =
	Case
	when "color" = 'red' then 'rot'
	when "color" = 'green' then 'grün'
	when "color" = 'vlue' then 'blau'
	end
  ;
end
;



Viele Grüße,

Claas

-- 
-----------------------------------------
GKG-Kassel - Dr.-Ing. Claas Leiner
QGIS-Support und mehr

Geodatenservice, Kartenwerkstatt &
GIS-Schule Kassel

Wilhelmshöher Allee 304 E
34131 Kassel
Tel. 0561/56013445
claas.leiner at gkg-kassel.de
----------------------------------------
http://www.gkg-kassel.de
----------------------------------------
Unterstützen Sie QGIS
QGIS-DE e.V. | http://qgis.de
QGIS Projekt | http://qgis.org/de/site/


Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste