[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