Announcement

Collapse
No announcement yet.

Feldwerte über Trigger prüfen

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

  • Feldwerte über Trigger prüfen

    <p>Hallo</p>
    <p>Ich habe folgendes Problem: Ich habe 2 Tabellen, um Adressen abzulegen. Zum
    einen den Adresskopf (ID, MATCHCODE) und zum anderen Anschriften (ID,
    AdresskopfID, Name, Strasse ... LI_ANSCHRIFT, RE_ANSCHRIFT), in der ich zu jedem
    Adresskopf n Anschriften anlegen kann. In der Anschriftentabelle kann ich dann
    bestimmen, welche Anschrift Rechnungsanschrift (RE_ANSCHRIFT Ja/Nein) und welche
    Anschrift Lieferanschrift (LI_ANSCHRIFT Ja/Nein) sein soll. <br>
    Nun soll es aber so sein, das pro Adresskopf min. und max. eine Anschrift
    Lieferanschrift/Rechnungsanschrift sein darf/muss. Anders gesagt es soll nicht
    möglich sein, das 2 Anschriften pro Adresskopf Lieferanschrift sind und es keine
    Rechnungsanschrift gibt. Soviel zur Theorie!</p>

    <p>Wie realisiere ich das nun in InterBase? Sicher über Trigger. Denn einen
    Index kann ich nicht nehmen. Es kann ja sein, das es 5 Anschriften zu einem
    Adresskopf gibt und davon sind dann 4 KEINE LI_/RE_Anschrift.</p>

    <p>Bsp.: Adresse 1 ist Li_Anschrift. Benutzer wählt Adresse 2 und
    sagt diese soll Li_Anschrift werden. Jetzt könnte man via Trigger sagen: </p>

    <p><b>if new</b>.LI_ANSCHRIFT='<font color="#0000FF">Ja</font>' <b>then</b> <br>
    &nbsp; <b>update</b> Anschriften <b>set</b> LI_ANSCHRIFT='<font color="#0000FF">Nein</font>'
    <b>where</b> AdresskopfID=<b>new</b>.AdresskopfID <b>and</b> ID&lt;&gt;<b>new</b>.ID;</p>

    <p>Um alle anderen Anschriften auf Li_Anschrift='<font color="#0000FF">Nein</font>'
    zu setzen. Aber was ist wenn der Benutzer Adresse 1 wählt (diese ist
    Li_Anschrift) und entfernt den Haken für Li_Anschrift?</p>

    <p>Das ganze soll wenn möglich nur auf Serverseite realisiert werden.</p>

    <p>Bin für jeden Hinweis dankbar.</p>

    <p>M.Pannier</p>

  • #2
    Hallo,

    &gt;Sicher über Trigger

    warum sich mit den Einschränkungen einer Kopie plagen, wenn das Original (Stored Procedure) das Ganze viel eleganter umsetzen kann? Ich würde den Zugriff auf die beiden Tabellen in eine Stored Procedure (SP) auslagern, die alle Input-Daten als Parameter übergeben bekommt. Die SP prüft dann vorher die Einhaltung der Regeln, um dann erst den Schreibzugriff auf die Tabellen zu starten.

    Ein Trigger ist nur ein Sonderfall einer SP, die vom Server automatisch ausgeführt wird, wenn die auslösende Bedingung erkannt wird

    Comment


    • #3
      Hallo.<br>
      Erst mal Danke für die Antwort. "Einschränkung einer Kopie"?? Diese herangehensweise (über SP) hab ich noch gar nicht in Betracht gezogen. Werd ich mal probieren. Denn ich hatte mit Triggern immer das Problem, das ich, wenn ich alle Möglichkeiten durchgespielt habe, immer eine Endlosschleife (bei den update Triggern) erhalten habe. Denn Update könnte bei insert oder delete einer Anschrift gemacht werden. Und wenn ich dann im Update-Trigger einmal nach LI_Anschrift='Nein' und einmal nach LI_Anschrift='Ja' mit jeweils unterschiedlichen Aktionen (wieder ein update) abgefragt habe, dann hat er sich nicht mehr eingekriegt.<br>
      Gruß M.Pannie

      Comment

      Working...
      X