Announcement

Collapse
No announcement yet.

Delphi 5 / BDE 5.01 / MS SQL 7.0 : Probleme mit Triggern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delphi 5 / BDE 5.01 / MS SQL 7.0 : Probleme mit Triggern

    Hallo

    Ich arbeite gerade an einem älteren Programm, das ursprünglich mit Delphi 4 geschrieben wurde und über die BDE auf den MSSQL Server zugreift. Das Programm soll hinsichtlich seiner Performance verbessert werden, und da sehr viele Berechnungen ablaufen, wurde entschieden, einen wesentlichen Teil der Berechnungen als Feste Felder in der Datenbank zu speichern und dann durch Trigger berechnen zu lassen. Dabei bin ich auf folgende Probleme (Phänomene?) gestoßen:

    1. Wenn ich in der vorhandenen Anwendung neue Daten in eine Tabelle mit einem neuen Trigger einfüge oder ändere, sind die Daten zwar physikalisch auf dem Server, aber der Trigger wurde offensichtlich nicht ausgeführt.

    2. Eine wesentlich einfacher gehaltene Testanwendung hängt sich jedesmal auf, wenn ich in eine Tabelle mit einem neuen Trigger einfügen/ändern will.

    3. Das Einfügen/Ändern von Daten in einer Tabelle ohne Trigger klappt wie bisher, auch in der Testanwendung.

    4. Es gab bereits vorher "alte Trigger" in der Datenbank, diese werden nach wie vor ausgeführt.

    5. Mit ADO klappt alles so, wie es soll.

    Da das Programm sehr umfangreich ist, wäre eine Umstellung auf ADO recht aufwendig. Kann jemand Tips geben, wie man das mit der BDE noch hinkriegt?

  • #2
    Hallo,

    die BDE hat damit nichts zu tun, da Trigger automatisch nur <b>innerhalb</b> der SQL Server-Datenbank ablaufen. Im Gegensatz zu einer Stored Procedure kann ein Trigger niemals von außen explizit aufgerufen werden, daher kann die BDE nicht die Ursache sein.

    Beim SQL Server 7 gibt es (im Gegensatz zur 2000er Version) nur AFTER-Trigger, die <b>nach</b> einem bestimmten Ereignis (INSERT, UPDATE, DELETE) auslösen. Wenn das Programm über die BDE einen neuen Datensatz eingefügt hat, muss der INSERT-Trigger in jedem Fall auslösen. Dies kann mit einem Testprogramm verifiziert werden, bei dem der neue Datensatz über TQuery als INSERT-Anweisung eingefügt wird.

    Wenn das Programm jedoch über TTable auf die SQL Server 7-Datenbank zugreift und mehrere Datensätze im TDBGrid darstellt, hängt die Frage, ob nach dem Einfügen der neue Datensatz erfolgreich wieder eingelesen werden kann, von der Konfiguration der Eigenschaft <b>UpdateMode</b> ab. Wenn ein Trigger hinter den Kulissen (d.h. für die BDE unsichtbar) einige Spalten dieses Datensatzes ändert, sollte dort der Eintrag <b>upWhereKeyOnly</b> verwendet werden. Nur dann hat die Kombination VCL+BDE die Change, den neu eingefügten Datensatz erfolgreich wiederzufinden - allerdings nur dann, wenn der Primärschlüsselwert dieses Datensatzes bereits beim Einfügen der VCL/BDE bekannt war

    Comment

    Working...
    X