Announcement

Collapse
No announcement yet.

Datenänderung über AC2000 auf SQL-Server bringt unsinnige Fehlermeldungen

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

  • Datenänderung über AC2000 auf SQL-Server bringt unsinnige Fehlermeldungen

    Hallo!

    Ich habe ein Problem, welches ich mir einfach nicht erklären kann und
    welches allmählich ziemlich ärgerlich wird. Das Phänomen:
    <br><br>
    Eine Tabelle (als Beispiel) heißt Etat und führt über Trigger weitere
    umfangreichere Änderungen an der DB aus. Wenn ich die Änderungen über
    den Enterprise-Manager direkt an der Tabelle ausführe klappt alles, wie
    es sein soll. Es werden bei zulässigen Eingaben die Daten gespeichert
    und ansonsten die richtige Fehlermeldung angezeigt.<br>
    Wenn ich dasselbe von AC2000 aus mache (entweder direkt auf der Tabellenansicht oder über ein Formular), kommen Fehlermeldungen wie "unkorrekte oder fehlende Schlüsselinformationen" bzw. es seien "zuviele Zeilen von der Aktualisierung betroffen". Obwohl ein Fehler angezeigt wird, werden die Daten korrekt gespeichert bzw. nicht gespeichert, wenn dies nicht zulässig ist. Die Fehlermeldungen erscheinen einfach nur deplaziert und falsch.<br>
    Ich habe schon mehrere Varianten ausgeführt, unter anderem die entsprechenden Aktualisierungen direkt per ADO-Befehle zu übermitteln. Im Prinzip ändert das an dem Phänomen nichts.<br>
    Ich habe auch schonmal das MDAC 2.6 installiert, es schien erst etwas gebracht zu haben, aber im Nachhinein war das wohl ein Trugschluß. Dieses Verhalten konnte ich auf mehreren Rechnern feststellen, allerdings waren es alles Systeme mit Windows 95/98.<br>
    <br>
    Ich verstehe das alles nicht mehr, obwohl die Datenbank kurz vor der Auslieferung steht. Vielleicht hat jemand von Euch einen heißen Tipp für mich!? Wer hat vielleicht ähnliche Erfahrungen gemacht?

    Ulrich

  • #2
    Hallo,

    immer dann, wenn die Fehlermeldungen "<i>unkorrekte oder fehlende Schlüsselinformationen</i>" bzw. "<i>zuviele Zeilen von der Aktualisierung betroffen</i>" nach einem UPDATE-Aufruf zurückgeliefert werden, kann ADO den betroffenen Datensatz nicht mehr im Bestand wiederfinden. Konkret passiert (bei ungeeigneter Konfiguration) folgendes: <br>
    1. UPDATE des neuen Datensatzes, ADO verwenden als WHERE-Einschränkung alle bekannten Spalten <br>
    2. TRIGGER ändern Datenbankintern einige Felder, ohne das ADO (auf der Client-Seite) davon etwas mitbekommt <br>
    3. ADO versucht nun, die Client-Daten zu aktualisieren, indem eine SELECT-Abfrage mit der gleichen WHERE-Einschränkung verwendet wird. Da TRIGGER einige Werte geändert haben, schlägt dies fehl.

    Ich habe mit Delphi 5.01, SQL Server 7 (SP2) und ADO 2.5 diesen Fall einmal nachgebaut. Da ich einen Client-side-Cursor (d.h. ADO puffert das RecordSet auf dem Client) und <b>ctKeyset</b> verwendet habe, konnte ADO auch dann ein UPDATE problemlos abwickeln, wenn TRIGGER einige Werte geändert haben. Ich würde zuerst in ACCESS versuchen, die Standardkonfiguration zu ändern (wenn das geht?).

    P.S: Selbstverständlich sollten alle Tabellen einen geeigneten Primärschlüssel (INTEGER-Spalte) verwenden.
    &#10

    Comment


    • #3
      Hallo!

      Ich habe jetzt die Lösung meines Problems gefunden (ich hatte dabei
      einen Tipp bekommen):<p>

      Es ist wichtig, das Statement <b>SET NOCOUNT</b> ON in allen Triggern
      anzugeben. Ansonsten kommt ADO durcheinander und bringt diese
      unsinnigen Fehlermeldungen.<p>

      Der Rest meines Codes war korrekt. Wenn ihr demnächst auf ähnliche
      Probleme stoßt, vielleicht lag es daran. Mir selbst war der
      Sachverhalt bisher unbekannt.

      Ulric

      Comment

      Working...
      X