FlowHeater Demo Video
 
FlowHeater - The Data Import / Export Specialist
 
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
  • Seite:
  • 1

THEMA: ODBC Datenbank-Trigger und Laufende Nummer

ODBC Datenbank-Trigger und Laufende Nummer 1 Monat 1 Woche her #3798

  • Grzegorz Wiktorowicz
  • Grzegorz Wiktorowiczs Avatar Autor
  • Offline
  • Beiträge: 2
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

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

ODBC Datenbank-Trigger und Laufende Nummer 1 Monat 1 Woche her #3799

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Beiträge: 1433
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

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.

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.

ODBC Datenbank-Trigger und Laufende Nummer 1 Monat 1 Woche her #3800

  • Grzegorz Wiktorowicz
  • Grzegorz Wiktorowiczs Avatar Autor
  • Offline
  • Beiträge: 2
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

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Letzte Änderung: von Grzegorz Wiktorowicz.
  • Seite:
  • 1

andere Sprachen

en

FlowHeater Home

de en

Impressum/Kontakt

Datenschutz

Copyright © 2009-2019 by FlowHeater GmbH.
Alle Rechte vorbehalten.

Follow us on

twitter  facebook

YouTube

 de en