Announcement

Collapse
No announcement yet.

Fehlermeldung beim Speichern eines Memofeldes in einer master/detail Beziehung

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

  • Fehlermeldung beim Speichern eines Memofeldes in einer master/detail Beziehung

    Hallo,

    ich verwende eine Access2000 DB, Delphi 4 und die Aloha ADO DB-Komponenten. In der DB befinden sich zwei Tabellen die über ein Integer Feld (KundenID) miteinander verknüpft sind. Die Detailtabelle enthält ein Memofeld. Wird jetzt im Programm das Memofeld editiert und der veränderte Inhalt soll gespeichert werden, bekomme ich eine EOLEException mit dem Wortlaut: "Speichern nicht möglich. Momentane Sperrung durch anderen Benutzer." Nach dem Bestätigen und einem weitern F9 kommt eine zweite EOLEException: "Ein Objekt, das dem angefordertem Namen oder dem Ordinalverweis entsproicht, kann nicht gefunden werden."

    Laut Jason Wager von Aloha ist das ein ADO Problem. Was kann diese Meldung verursachen und vor allen Dingen, wie kann ich das umschiffen.

    Viele Grüsse<BR>
    Uwe

  • #2
    Hallo,

    &gt;Laut Jason Wager von Aloha ist das ein ADO Problem...

    das halte ich für eine Schutzbehauptung, denn mit dem von Borland zusammen mit Delphi 6 ausgelieferten Demo-Projekt <i>C:\Programme\Borland\Delphi6\Demos\Ado\AdoTest\ ADOTEST.dpr</i> für ADO Express (setzt ebenfalls auf die ADO-Objekte auf) kann ein Datensatz problemlos gespeichert werden, wenn eine Änderung in einer <i>Memo</i>-Spalte vorgenommen wurde.

    Es gibt mindestens 5 Fehlermöglichkeiten: <br>
    1. Bug in den Komponenten <br>
    2. Ungeeignete Konfiguration der ADO-Objekte <br>
    3. Ungeeigneter Zugriff auf die Tabelle<br>
    4. Ungeeignete Struktur der Tabelle (kein Primärschlüssel) <br>
    5. Nicht zusammenpassende MDAC- und MDB-Version <br>
    (die neue Jet-Engine 4.0 "liebt" das neue 2000er-Format von ACCESS-Datenbank-Dateien, mit dem alten 97er-Format gibt es Einschränkungen)

    Wie sieht ein kleines Beispiel aus, mit dem das Problem jederzeit reproduziert werden kann

    Comment


    • #3
      Hallo Andreas,

      also, nach langen "herumpfriemeln" habe ich die Lösung gefunden: es gibt für die TaoADOTable Komponente ein Property das heisst "Enable Events". Laut Hilfe bedeutet dies "If this property is set to True, then events from the underlying record set (ADORecordSet property) will have its COM events translated into Delphi events." Ich behaupte jetzt nicht, dass ich verstehe, was das bedeutet, aber seit dem die Einstellung "True" ist, läuft es. Vielleicht kannst Du mir ja mal erklären, was es damit auf sich hat, damit ich es auch verstehe.

      Viele Grüsse und nochmals merci
      <br>
      Uw

      Comment


      • #4
        Hallo,

        hinter ADO verbergen sich COM-Objekte, die von den "Kunden" (also dem eigenen Programm) über Automation fernbedient werden. Damit der Rück-Kanal vom COM-Objekt (ADO) zum eigenen Programm zur Verfügung steht, lösen die ADO-Objekte immer dann COM-Events (Benachrichtigungen) aus, wenn das Programm von irgend einem wichtigen Ereignis informiert werden muss. Das eigene Programm wertet über die Komponenten diese COM-Events aus, um reagieren zu können bzw. die Nachfrage des COM-Objekts richtig beantworten zu können.

        Anscheinend kann man bei der TaoADOTable-Komponente diesen Rück-Kanal über die Eigenschaft abschalten - wobei das eine sehr außergewöhnlich Einstellung ist. Mit der Einstellung "True" verhält sich TaoADOTable an dieser Stelle so, wie ADO das erwartet

        Comment

        Working...
        X