Announcement

Collapse
No announcement yet.

Problem beim EInfügen von Daten

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

  • Problem beim EInfügen von Daten

    Hallo,
    ich stehe kurz vor dem ...

    In einer Anwendung, die auf eine Access-DB aufsetzt, habe ich folgendes Problem:

    ADO-Dataset mit dem Select auf eine Tabell.

    Der Status der Dataset ist dsBrowse. Beim Versuch einen neuen Datensatz einzufügen (Append / Insert) kommt die Fehlermeldung "Datenmenge werder im Einfüge- noch im Editmodus".

    Wer kennt das und hat die Lösung?

    Werfe ich den ADO-Dataset raus und lege ihn neu an, funtioniert es wieder für eine Zeit.

    Gruß in die Runde

    Kalli

  • #2
    Hallo,
    da anstelle von <i>ADO-RecordSet</i> der Begriff <i>ADO-DataSet</i> in der Frage vorkommt, vermute ich einmal, dass der Zugriff aus einer mit Borland Delphi entwickelten Anwendung erfolgt. Die ADOExpress- alias dbGo-Komponenten rufen intern jedoch das RecordSet-Objekt von ADO auf.
    <br>
    Die <b>AddNew</B>-Methode des Recordset-Objekts unterscheidet zwei Betriebsarten: <br>
    a) Im immediate update mode (AddNew wird ohne Parameter aufgerufen) geht das Recordset in den EditMode adEditAdd und puffert alle Schreibzugriffe solange zwischen, bis die Update-Methode aufgerufen wird. <br>
    b) Im direkten Modus (AddNew wird mit Parametern aufgerufen), schreibt ADO den neuen Datensatz sofort in die Datenbank - die EditMode-Eigenschaft wird dabei nicht geändert (adEditNone).
    <br>
    Allerdings gibt es hier in Delphi ein Problem. ADO wurde speziell für ASP und VB-Anwendungen konzipiert, die über die späte Bindung auf die COM-Objekte zugreifen. Beim Weg über die späte Bindung stehen die optionalen Parameter zur Verfügung, d.h. man darf dort AddNew ohne Parameter aufrufen. Das eigene Delphi-Programm greift jedoch in der Regel über die frühe Bindung zu - und hier erzwingt die Typprüfung des Compilers, dass alle Parameter angegeben werden müssen:<br>
    Fall a) späte Bindung: aRS.AddNew <br>
    Fall b) frühe Bindung: aRS.AddNew(EmptyParam, EmptyParam)<br><br>
    Damit auch in Delphi das von Microsoft dokumentierte Verhalten zur Verfügung steht, muss die späte Bindung für den Methodenaufruf von AddNew verwendet werden:
    <code>
    OleVariant(aRS).AddNew;
    </code>
    <br>
    &gt;...funtioniert es wieder für eine Zeit....
    Der Grund dafür hat mit einer anderen ADOExpress-Eigenheit zu tun, bei bestimmten Situtionen die Verbindung zum RecordSet-Objekt zu verlieren

    Comment

    Working...
    X