Announcement

Collapse
No announcement yet.

Microsoft Cursor Engine - Fehler 0x80040E38

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

  • Microsoft Cursor Engine - Fehler 0x80040E38

    Hallo,

    ich habe ein Problem mit den Datenbank Komponenten. Sowohl die von Delphi, als auch selber geschriebene lösen beim ADODataset.Post einen Fehler aus.<br>
    Folgenden Aufbau hat mein Program:<br>
    MySQL 4.19 - MyODBC - TADOConnection - TBetterADODataSet - TDataSource<br>
    (bei TADODataSet statt TBetterADODataSet gibt's den selben Fehler)<br>
    am DataSource hängt nun z.B. ein DBNavigatior und ein DBEdit, welches mit einem Feld in der Tabelle verknüpft ist. (Typ eigentlich egal; nehmen wir z.B. varchar(64) )
    Natürlich existiert auch ein Primärschlüssen in der Tabelle!<br>
    Soweit so gut. Funktioniert bis hierher. Ich kann Werte einfügen, bearbeiten, löschen und was man halt so damit machen kann.<br>
    Beim Bearbeiten gibt es allerdings folgenden reproduzierbaren Fehler:<br>
    1. Ändere ich frisch aus der DB geladenen Wert im DBEdit z.B. von 'Test' auf 'Test2'
    2. und verlasse das Feld (ohne Post auzulösen oder der DBNavigator sonst irgendwie zu benutzen),
    3. um das DBEdit nun erneut anzuklicken und den Wert wieder zurück auf 'Test' zu ändern,<br>
    gibt es folgenden Fehler:

    Nummer: 0x80040E38
    Beschreibung: Die zum Aktualisieren angegebene Zeile wurde nicht gefunden. Einige Werte wurden seit dem letzten Lesen ggf. geändert.
    Ursprung: Microsoft Cursor Engine()<br>
    Dabei habe ich ja den Wert ja eigentlich gar nicht geändert.<br>
    Und auch das SQL-Statement aus den LOGs schaut gut aus:
    UPDATE `testdb`.`adressen` SET `name`='Test' WHERE `IndexNr`=1 AND `Suchname`='Test'

    Ändert man Update_Criteria auf adCriteriaKey sieht es so aus:
    UPDATE `testdb`.`adressen` SET `name`='Test' WHERE `IndexNr`=1

    aber selbst da wird die Exception geworfen!<br>
    Man kann das ganze zwar etwas umgehen, indem man eigene Komponenten schreibt, und dort DataLink.UpdateRecord nicht bei CM_EXIT auslöst, und im UpdateData Event vom DataLink den Field.Value Wert nur neu setzt, wenn sich der Wert wirklich verändert hat. Damit hat man aber nun das Problem, wenn z.B. 2 verschiedene DBEdits auf die gleiche Spalte zeigen, und man einen Wert im einen DBEdit ändert, dieser nach Verlassen des Edits nicht an das andere DBEdit propagiert wird.

    Das Problem tritt also scheinbar genau dann auf, wenn in DataLink.Field.Value ein neuer Wert geladen wird, der aber gleich dem alten ist.<br>
    Kann mir dabei vielleicht jemand von euch weiterhelfen?
    Wäre super nett. Bin nämlich bereits am verzweifeln.<br>
    Danke, Chris

  • #2
    Hast Du diese <a href="http://dev.mysql.com/doc/mysql/en/programs-known-to-work-with-myodbc.html">Tipps</a> befolgt?

    Ich würde dir aber empfehlen native auf MySQL zuzugreifen z.B. mit <a href="http://crlab.com/mydac/">MySQL DAC</a>. Damit ersparst Du dir einiges an Installationaufwand als auch Konfigurationsprobleme.
    Der Protokollstack:

    MySQL 4.19 - LibMySQL.Dll - MyODBC - TADOConnection - TBetterADODataSet - TDataSource

    verkürzt sich maximal auf

    MySQL 4.19 - MySQLDAC - TDataSource.<br>

    Und damit sind weniger Problem zu erwarte

    Comment


    • #3
      Danke für Deine schnelle Antwort. Ich dachte eigentlich dass ich alle Tips beachtet hatte.
      Aber nachdem ich durch den Tip nochmal auf die Verbindungsparameter aufmerksam gemacht wurde, habe ich damit ein wenig rumgespielt und es unter anderem mit OPTION=3 im VerbindungsString versucht (Bit 2 = 'found rows' statt affected rows).
      Damit funktioniert es nun! Danke nochmal

      Comment

      Working...
      X