Announcement

Collapse
No announcement yet.

ADO-Einsteigerproblem

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

  • ADO-Einsteigerproblem

    Hallo Experten,

    Bei meinen ersten ADO-Experimenten habe ich das Problem bei Insert- Update-Operationen,daß die Fehlermeldung erscheint 'Die zum Aktualisieren angegebene Zeile wurde nicht gefunden. Einige Werte wurden seit dem letzten Lesen ggf. geändert.'. Ich verwende D5, ADO-Expreß und hier
    TADOTable und TADODataset - was könnten hier mein prinzipiellen Fehler sein?

    Für alle Hinweise dankbar Wolfgang

  • #2
    Hallo,

    bei der Frage fehlen die zwei wichtigsten Hinweise: <br>
    1. Welche Datenbank wird verwendet? <br>
    2. Welcher OLE DB-Provider wird verwendet?<br>
    Das Verhalten der ADO-Objekte hängt von der Eigenschaften von 1+2 ab.

    In der Standard-Konfiguration verwendet ADO eine UPDATE-Anweisung, bei der alle alten Feldwerte in der WHERE-Einschränkung aufgeführt werden. Findet die Datenbank keinen Datensatz, der zu dieser WHERE-Einschränkung "passt", gibt ADO die o.g. Fehlermeldung aus. Dafür kann es verschiedene Gründe geben (TIMESTAMP-Spalte, BLOb-Spate, Wert von anderem Benutzer geändert usw).

    Um zu prüfen, ob dieser Fall vorliegt, würde ich nach dem Öffnen der TADODataSet-Instanz folgendes machen:
    <pre>
    uses ADOInt;

    procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
    with ADODataSet1.Recordset do
    begin
    Properties['Update Criteria'].Value := adCriteriaKey;
    Properties['Update Resync'].Value := adResyncAll;
    end;
    end;
    </pre>
    Wird die Checkbox angeklickt, schaltet <b>adCriteriaKey</b> explizit in den Schlüsselmodus um, d.h. beim UPDATE-Aufruf wird als WHERE-Kritierium nur die Primärschlüssel-Spalte dieser Tabelle verwendet. Wenn dann immer noch die Fehlermeldung kommt, wie sieht die Struktur der Tabelle aus

    Comment


    • #3
      Hallo Herr Kosch,

      vielen Dank für die schnelle Beantwortung, die Einbindung der paar Quellzeilen hat schon geholfen.

      Noch zu meinem gestrigen Problem:

      Für meine Experimente nutzte ich Paradoxdateien (meine bisherige Standard-DB) über den ODBC-Treiber, Ziel sind aber ACCESS und MS SQL-Server, evtl. weitere DB. Ich werde also schnellstens auch mit diesen experimentieren um nicht weitere Überraschungen zu erleben.

      Ich hatte mit dem Update einer Datei keine Probleme, nur wenn ich hier einen neuen Datensatz anlegte, ein Post ausführte und danach nochmals diesen Datensatz ändern wollte.
      Mit der anderen Datei erfaßte ich nur Werte über DBCheckboxen und hier trat ständig das Updateproblem auf.

      mfg Wolfgan

      Comment


      • #4
        Hallo,

        wenn der Datensatz (ohne die Datenmenge neu aufzubauen) ein 2. Mal geändert werden soll, hift <i>Update Resync</i> weiter (da adResyncAll in jedem Fall alle aktuellen Daten abholt und in die RecordSet-internen Datenpuffer übernimmt)

        Comment

        Working...
        X