Announcement

Collapse
No announcement yet.

Nicht-BLOB-Spalte in der Tabelle erforderlich

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

  • Nicht-BLOB-Spalte in der Tabelle erforderlich

    Nach einem AppendRecord mit TTable erhalte ich eine Exception: EDBEngine Error "Für diese Operation ist eine Nicht-BLOB-Spalte in der Tabelle erforderlich!" Errorcode 12292

    Weiß jemand, was diesen Fehler verursacht? Ich arbeite untr D5 mit MySQL. Mit dem Debugger bin ich in die Tiefen der BDE vorgestoßen bis zu einem "NotifyLinkTypes", aber den eigentlichen Auslöser konnte ich nicht ausmachen.

    Mein Datensatz wird (korrekt) in die Datenbank geschrieben, danach in einem DBGrid angezeigt und einige Felder in TDBText und TDBMemos reflektiert.

    Vielen Dank für jede Hilfe,
    Björn

  • #2
    Hast Du die ODBC-Konfiguration richtig vorgenommen (http://www.mysql.com/doc/en/MyODBC_clients.html)?

    Auszug:

    BDE applications
    To get these to work, you should set the option flags Don't optimize column widths and Return matching rows.

    Selbst ist mir diese Fehlermeldung noch nicht untergekommen

    Comment


    • #3
      Ja, die ODBC läuft perfekt - neuste Treiberversionen, DB-Admin-Tool meldet keine Fehler und wie gesagt: Der Datenbankeintrag selbst geht ja!!!

      Das Ärgerliche ist, dass die BDE einen Phantomfehler produziert. Erst nachdem der Datensatz geschrieben ist rödelt die BDE durch alle Kompononenten zum Updaten der Darstellung. Dabei kommt es zu dieser Fehlermeldung.

      Schließe ich dann das Projekt und öffne es wieder, sind die neuen Daten in der Datenbank noch drin (völlig fehlerfrei) und siehe da - auf einmal kann die BDE sie auch anzeigen.

      Der Fehler passiert immer dann, wenn ich mit ApppendRecord ein DB-Feld vom Spaltentyp TEXT (also Memo) eintrage. Trage ich einen Datensatz ein, ohne die Memofelder auszufüllen, geht es.

      Meine Frage: Was will die BDE von mir, dass sie mit meinen eigentlich korrekten Daten auch zufrieden ist?

      Mir würde es schon sehr weiterhelfen, wenn jemand herausfinden könnte, was überhaupt den Errorcode 12292 auslösen kann. Ich finde keine Dokumentation.

      Allerbesten Dank, Weltfahre

      Comment


      • #4
        Hallo,

        >Ich finde keine Dokumentation.

        Borland dokumentiert die BDE-Fehlercodes in seiner <i>Technical Information Database</i> unter dem Eintrag <i>TI283B.txt BDE Error listing</i>.

        Derartige Fehlermeldung kommen im Zusammenhang mit BLOb-Daten regelmässig dann, wenn <br>
        a) die Tabelle keinen Primärschlüssel nutzt, <br>
        b) die Tabelle einen ungeeigneten Datentyp für die Primärschlüsselspalte nutzt, oder <br>
        c) die TTable-Komponente nicht die Einstellung <b>upWhereKeyOnly</b> für die Eigenschaft <b>UpdateMode</b> nutzt

        Comment


        • #5
          Danke Andreas, das war es!

          Meine TTable verwendet einen Secondary Key (weil ich nicht nach der AutoInc ID sortiere, sondern alphabetisch nach einem anderen Feld).

          Nach einem AppendRecord wird der Secondary Key aber wohl nicht automatisch aktualisiert: Im Grid erscheint der neue Datensatz zweimal. Erst nach einem Refresh ist der Secondary Key aktuell.

          Das TMemo, das ein BLOB-Feld des neuen Datensatzes anzeigt, steht auf AutoDisplay, dadurch werden BLOB-Felder aus neuen/geänderten Datensätzen automatisch geladen.

          Das Problem: Das TMemo.AutoDisplay erfolgt VOR dem TTable.AutoRefresh und findet so keinen gültig indizierten Datensatz vor.

          Meine Lösung:
          TDBMemo.AutoDisplay := false;
          TTable.AppendRecord(...);
          TTable.Refresh;
          TDBMemo.AutoDisplay := true;

          Ich finde, dass sich die BDE hier selbst ein Bein stellt und mir ein völlig unnötiges Workaround aufzwingt.

          Danke für Eure Hilfe,
          Björ

          Comment

          Working...
          X