- Beiträge: 9
ODBC Datenbank-Trigger und Laufende Nummer
- Grzegorz Wiktorowicz
- Autor
- Offline
- Benutzer
Weniger
Mehr
5 Jahre 3 Monate her #3798
von Grzegorz Wiktorowicz
ODBC Datenbank-Trigger und Laufende Nummer wurde erstellt von Grzegorz Wiktorowicz
Guten Tag!
Ich habe zwei unterschiedliche Herausforderung zu bewältigen und folgende Fragen dazu.
1. Lassen sich in einer firebird Datenbank (WAWI) durch update/insert o.ä Trigger anfeuern? Wenn ich z.B. in der Datenbank Artikel-Mengen der Auftragspositionen aktualisiere, werden zwar die Mengen, aber nicht wie gewohnt der Gesamtpreis aktualisiert.
2. Beim Update von Artikelpositionen in meiner firebird (WAWI) Datenbank aktualisiere ich die Artikel mittels der Laufenden Nummer (dem Primärschlüssel), die ich zuvor exportiert hatte.
Die Laufende Nummer (Feldname: LfdNr, Typ: Zahl) ist eine automatisch vom WAWI-Programm hochgezählte interne Nummer, die unabhängig von der Artikelnummer ist. Das Feld LfdNr ist ein Primärschlüsselfeld. Durch den Primärschlüsselfeld werden die Datensätze in einer Tabelle eindeutig gekennzeichnet. Das heißt, der Wert im Feld LfdNr darf nur einmal in der betreffenden Tabelle vorkommen. Beim erstellen einer Auftragsposition wird für jeden neuen Datensatz automatisch eine neue Nummer generiert. Soweit so gut.
Wenn ich jetzt aber neue Artikel in die Datenbank schreiben möchte, fehlt mir diese Laufende Nummer und ich kann den Auftrag um weitere (neue) Artikel nicht erweitern. Wie kann hier verfahren werden? Letzte LfdNr auslesen, hochzählen und wieder übergeben. Oder gibt es vielleicht andere Ansätze.
Vielen Dank im Voraus für Ihre Unterstützung!
Gregor
Ich habe zwei unterschiedliche Herausforderung zu bewältigen und folgende Fragen dazu.
1. Lassen sich in einer firebird Datenbank (WAWI) durch update/insert o.ä Trigger anfeuern? Wenn ich z.B. in der Datenbank Artikel-Mengen der Auftragspositionen aktualisiere, werden zwar die Mengen, aber nicht wie gewohnt der Gesamtpreis aktualisiert.
2. Beim Update von Artikelpositionen in meiner firebird (WAWI) Datenbank aktualisiere ich die Artikel mittels der Laufenden Nummer (dem Primärschlüssel), die ich zuvor exportiert hatte.
Die Laufende Nummer (Feldname: LfdNr, Typ: Zahl) ist eine automatisch vom WAWI-Programm hochgezählte interne Nummer, die unabhängig von der Artikelnummer ist. Das Feld LfdNr ist ein Primärschlüsselfeld. Durch den Primärschlüsselfeld werden die Datensätze in einer Tabelle eindeutig gekennzeichnet. Das heißt, der Wert im Feld LfdNr darf nur einmal in der betreffenden Tabelle vorkommen. Beim erstellen einer Auftragsposition wird für jeden neuen Datensatz automatisch eine neue Nummer generiert. Soweit so gut.
Wenn ich jetzt aber neue Artikel in die Datenbank schreiben möchte, fehlt mir diese Laufende Nummer und ich kann den Auftrag um weitere (neue) Artikel nicht erweitern. Wie kann hier verfahren werden? Letzte LfdNr auslesen, hochzählen und wieder übergeben. Oder gibt es vielleicht andere Ansätze.
Vielen Dank im Voraus für Ihre Unterstützung!
Gregor
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
5 Jahre 3 Monate her #3799
von FlowHeater-Team
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
FlowHeater-Team antwortete auf ODBC Datenbank-Trigger und Laufende Nummer
Hallo Herr Wiktorowicz,
zu 1) Es sollten eigentlich schon bei einem INSERT bzw. UPDATE die auf der betroffenen Tabelle definierten Datenbank Trigger ausgeführt/ausgelöst werden. Sie schreiben, dass beim Import Ihre Mengen aktualisiert werden aber der Gesamtpreis nicht. Kann es sein, dass der Trigger für den Gesamtpreis auf einer anderen Tabelle angelegt ist und deshalb nicht geworfen wird? Evtl. liegt es aber auch am Transaktionsverhalten von Firebird. Der FlowHeater verwendet per Default eine Datenbank Transaktion für eine Ausführung, evtl. kommte Firebird damit nicht klar. Versuchen Sie mal in den ODBC Adapter Einstellung der Firebird Datenbank Transaktionen zu deaktivieren, siehe Screenshot 1.
zu 2) Das können Sie über den SQL Heater durchführen. Hier tragen Sie die Firebird Funktion „gen_id(<generator/sequence name>, 1)“ ein, siehe Screenshot 2. Den Platzhalter „(<generator/sequence name>“ müssen Sie mit dem auf dem Feld hinterlegten Sequence bzw. Generator Namen ersetzen. So wird vor dem IMPORT eine neue ID erzeugt, die Sie in der Definition auswerten und verwenden können.
Achtung: Wenn Sie das verwenden müssen Sie darauf achten, dass in der Definition nur INSERT und keine UPDATES verarbeitet werden.
Firebird/ODBC Datenbank Transaktionen deaktivieren
SQL Heater Firebird nächsten SEQUENCE Wert abrufen
zu 1) Es sollten eigentlich schon bei einem INSERT bzw. UPDATE die auf der betroffenen Tabelle definierten Datenbank Trigger ausgeführt/ausgelöst werden. Sie schreiben, dass beim Import Ihre Mengen aktualisiert werden aber der Gesamtpreis nicht. Kann es sein, dass der Trigger für den Gesamtpreis auf einer anderen Tabelle angelegt ist und deshalb nicht geworfen wird? Evtl. liegt es aber auch am Transaktionsverhalten von Firebird. Der FlowHeater verwendet per Default eine Datenbank Transaktion für eine Ausführung, evtl. kommte Firebird damit nicht klar. Versuchen Sie mal in den ODBC Adapter Einstellung der Firebird Datenbank Transaktionen zu deaktivieren, siehe Screenshot 1.
zu 2) Das können Sie über den SQL Heater durchführen. Hier tragen Sie die Firebird Funktion „gen_id(<generator/sequence name>, 1)“ ein, siehe Screenshot 2. Den Platzhalter „(<generator/sequence name>“ müssen Sie mit dem auf dem Feld hinterlegten Sequence bzw. Generator Namen ersetzen. So wird vor dem IMPORT eine neue ID erzeugt, die Sie in der Definition auswerten und verwenden können.
Achtung: Wenn Sie das verwenden müssen Sie darauf achten, dass in der Definition nur INSERT und keine UPDATES verarbeitet werden.
Firebird/ODBC Datenbank Transaktionen deaktivieren
SQL Heater Firebird nächsten SEQUENCE Wert abrufen
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Anhänge:
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Grzegorz Wiktorowicz
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 9
5 Jahre 3 Monate her - 5 Jahre 3 Monate her #3800
von Grzegorz Wiktorowicz
Grzegorz Wiktorowicz antwortete auf ODBC Datenbank-Trigger und Laufende Nummer
Hallo Herr Stark!
Vielen Dank zunächst für diese tolle Ausführung.
zu 1) Es scheint etwas komplizierter zu sein. Der Trigger liegt augenscheinlich richtig. Hier komme ich noch einmal auf Sie zurück.
zu 2) Die Lösung funktioniert etwas abgeändert soweit gut: "SELECT GEN_ID(gen_lfdnr, 1) FROM RDB$DATABASE"
Freundliche Grüße
Grzegorz Wiktorowicz
Vielen Dank zunächst für diese tolle Ausführung.
zu 1) Es scheint etwas komplizierter zu sein. Der Trigger liegt augenscheinlich richtig. Hier komme ich noch einmal auf Sie zurück.
zu 2) Die Lösung funktioniert etwas abgeändert soweit gut: "SELECT GEN_ID(gen_lfdnr, 1) FROM RDB$DATABASE"
Freundliche Grüße
Grzegorz Wiktorowicz
Letzte Änderung: 5 Jahre 3 Monate her von Grzegorz Wiktorowicz.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 0.264 Sekunden