Ich möchte aus den eingegebenen Werte beim Anlegen eines neues Datensatzes
weitere Felder automatisiert ausfüllen. (Eigentlich nicht notwendig, aber für
den Anwender soll das zu sehen sein, damit er nur hinschauen muß.)
Dazu habe ich einen Limbas-Trigger angelegt: after insert und die passende
Funktion aufgerufen (in ext_gtag.inc geschrieben). Die Funktion besteht aus
Datenbank-Queries: "uptate tabelle set automatischesFeld = ... where id =
$ID".
Im SQL-Editor werden die auch richtig ausgewertet.
Will ich einen neuen Datensatz anlegen, sind die automatischen Felder schon
ausgefüllt, obwohl ich in den anderen Feldern noch gar keine Werte eingegeben
habe.
Vom Verständnis her muß doch erst der INSERT erfolgen (mit dem Klick auf
übernehmen) und danach der Trigger aufgerufen werden. Oder verstehe ich das
falsch?
Wie kann ich denn die gewünschte Funktionalität erreichen?
Beispiel zum Verständnis:
In einer Artikelverwaltung sind die Tabellen für die Artikel und die Hersteller und ich möchte eine Artikelnummer generieren. Die besteht aus einem Wert aus einem Pool (z.B. die Farbe), meiner Nummer für den Hersteller (in der anderen Tabelle via m:n-Verknüpfung in die Artikeltabelle "geholt" und der laufenden Nummer der Artikel dieses Herstellers (mit count aus der Verknüpfungstabelle geholt.) Alle 3 Felder sind in der Artikeltabelle und werden in einem vierten Feld via concat() aneinandergehängt.
Grüße
reiner
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Beim Anlegen wird zuerst ein leerer Datensatz erzeugt der dann bei 'übernehmen' abgeändert wird. Verhindern kann man dies dadurch das man in der Tabelleneinstellung den Parameter "reserviere ID" aktiviert. Dadurch wird der Datensatz erst erstellt wenn man auf 'übernehmen' drückt. Allerdings sind die Felder dadurch eingeschränkt. Alle Felder die eine ID benötigen wie z.B. Verknüpfungen werden erst nach dem ersten 'übernehmen' angezeigt.
Eine weitere Möglichkeit besteht darin in der Trigger-Funktion die $action Variable abzufangen. if($GLOBALS['action'] == 'gtab_neu ){...} # aktuelle action
if($GLOBALS['old_action'] == 'gtab_neu ){...} # vorherige action
Noch eine Möglichkeit ist eine eigene Erweiterung per JS und ajax welche die Daten per ajax holt , in die Eingabefelder einträgt und dann per 'übernehmen' speichert als hätte man sie händisch eingegeben.
Grüße
Axel
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo, Axel!
Vielen Dank für Deine Hinweise.
Die erste und einfachste Möglichkeit habe ich probiert und wie Du angekündigt hast, funktioniert das leider nicht. Die Verknüpfungen werden noch nicht abgefragt.
Für die anderen Möglichkeiten muss ich mich erst einarbeiten.
Grüße
Reiner
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo!
Ich möchte aus den eingegebenen Werte beim Anlegen eines neues Datensatzes
weitere Felder automatisiert ausfüllen. (Eigentlich nicht notwendig, aber für
den Anwender soll das zu sehen sein, damit er nur hinschauen muß.)
Dazu habe ich einen Limbas-Trigger angelegt: after insert und die passende
Funktion aufgerufen (in ext_gtag.inc geschrieben). Die Funktion besteht aus
Datenbank-Queries: "uptate tabelle set automatischesFeld = ... where id =
$ID".
Im SQL-Editor werden die auch richtig ausgewertet.
Will ich einen neuen Datensatz anlegen, sind die automatischen Felder schon
ausgefüllt, obwohl ich in den anderen Feldern noch gar keine Werte eingegeben
habe.
Vom Verständnis her muß doch erst der INSERT erfolgen (mit dem Klick auf
übernehmen) und danach der Trigger aufgerufen werden. Oder verstehe ich das
falsch?
Wie kann ich denn die gewünschte Funktionalität erreichen?
Beispiel zum Verständnis:
In einer Artikelverwaltung sind die Tabellen für die Artikel und die Hersteller und ich möchte eine Artikelnummer generieren. Die besteht aus einem Wert aus einem Pool (z.B. die Farbe), meiner Nummer für den Hersteller (in der anderen Tabelle via m:n-Verknüpfung in die Artikeltabelle "geholt" und der laufenden Nummer der Artikel dieses Herstellers (mit count aus der Verknüpfungstabelle geholt.) Alle 3 Felder sind in der Artikeltabelle und werden in einem vierten Feld via concat() aneinandergehängt.
Grüße
reiner
Beim Anlegen wird zuerst ein leerer Datensatz erzeugt der dann bei 'übernehmen' abgeändert wird. Verhindern kann man dies dadurch das man in der Tabelleneinstellung den Parameter "reserviere ID" aktiviert. Dadurch wird der Datensatz erst erstellt wenn man auf 'übernehmen' drückt. Allerdings sind die Felder dadurch eingeschränkt. Alle Felder die eine ID benötigen wie z.B. Verknüpfungen werden erst nach dem ersten 'übernehmen' angezeigt.
Eine weitere Möglichkeit besteht darin in der Trigger-Funktion die $action Variable abzufangen. if($GLOBALS['action'] == 'gtab_neu ){...} # aktuelle action
if($GLOBALS['old_action'] == 'gtab_neu ){...} # vorherige action
Noch eine Möglichkeit ist eine eigene Erweiterung per JS und ajax welche die Daten per ajax holt , in die Eingabefelder einträgt und dann per 'übernehmen' speichert als hätte man sie händisch eingegeben.
Grüße
Axel
Hallo, Axel!
Vielen Dank für Deine Hinweise.
Die erste und einfachste Möglichkeit habe ich probiert und wie Du angekündigt hast, funktioniert das leider nicht. Die Verknüpfungen werden noch nicht abgefragt.
Für die anderen Möglichkeiten muss ich mich erst einarbeiten.
Grüße
Reiner