Announcement

Collapse
No announcement yet.

ADO Tabelle mit mehreren Dataset

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

  • ADO Tabelle mit mehreren Dataset

    Hallo

    ich hab das Problem, dass ich eine MDB mit einer Tabelle habe. In diese Tabelle erfasst der Anwender Datensätze. Gleichzeitig werden aus dieser Tabelle die veralteten Datensätze gelöscht. Nun bekomme ich immer eine Fehlermeldung sobald der Datensatz gelöscht wird, der im DBGrid aktiv ist und ich einen Refresh ausführ auf die Tabelle.

    Wie krieg ich diese Meldung weg.

    Mit Tabelle.Aktiv = false und dann wieder true funktioniert das ganze. Aber nach ca. 20000 mal false/true stürtz das Programm ab mit der Meldung, dass keine Tabellen mehr geöffnet werden können.

    Gruss Markus

  • #2
    Probiere mal Requery.<p>
    Schöne Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      Hallo Mario

      habs probiert und s'funktioniert. Besten Dank (-:

      Nun habe ich den Befehl gesucht in der Hilfe, konnte ihn aber nirgens finden.

      Kannst Du mir den Unterschied von Refresh und Requery erklären, vorallem im Bezug auf die unter Hilfe TDataSet erwähnte Funktion von Refresh :

      "Die Methode Refresh aktualisiert eine Datenmenge durch erneutes Abrufen der Daten aus der Datenbank."

      Gruss Marku

      Comment


      • #4
        Hallo,

        an dieser Stelle unterscheidet sich ADO Express (dbGo) von den nativen ADO-Objekten. In meinem Buch <i>ADO und Delphi</i> liest sich das an den betroffenen Stellen (Auszüge) so:

        Das native <b>Recordset</b>-Objekt stellt die Methoden <b>Requery</b> und <b>Resync</b> zur Verfügung, um aktuelle Daten von der Datenbank abzufordern. Wenn das Programm einen clientseitigen Cursor verwendet und die OLE DB Client Cursor Engine die Datenmenge lokal im Arbeitsspeicher verwaltet, ist diese Kopie der Originaldaten irgendwann veraltet. Denn die Änderungen, die von anderen Anwendern in der Datenbank vorgenommen werden, sind solange unsichtbar, bis das Recordset-Objekt seine Daten in irgendeiner Form auffrischt. Damit diese Aktualisierung der Datenmenge im Einzelfall so effektiv wie möglich umgesetzt werden kann, stellt das Recordset-Objekt verschiedene Wege zur Verfügung.

        <b>Requery</b> = Die SELECT-Abfrage, die die Datenmenge des Recordset-Objekts erstellt hat, wird erneut ausgeführt.<br>
        <b>Resync</b> = Es werden nur bestimmte Datensätze der Datenmenge des Recordset-Objekts aktualisiert, indem eine angepasste SELECT-Abfrage ausgeführt wird.

        Wenn Sie überwiegend nur mit den <b>ADO Express</b>-Komponenten arbeiten, kommen Sie mit diesen Details am Anfang nicht in Berührung. Denn dort werden Sie wohl am Anfang zur Methode <b>Refresh</b> greifen, um die Datenmenge zu aktualisieren. Doch ein Blick in die VCL zeigt, dass auch ADO Express je nach der vorgefundenen Konfiguration ebenfalls entweder die Recordset-Methode Resync oder Requery aufruft. Immer dann, wenn die bereits vorgestellte Recordset-Eigenschaft Supports ermittelt, dass die Methode Resync unterstützt wird, ruft ADO Express diese Methode mit den Parametern adAffectAll und adResyncAllValues auf. Wird die Methode Resync für die aktuelle Datenbankverbindung nicht unterstützt, kommt die Recordset-Methode Requery zum Zug.

        Achtung Stolperstelle: Sowohl das Recordset-Objekt von ADO als auch die TADODataSet-Komponente aus ADO Express stellen die Methode Resync zur Verfügung. Allerdings steckt jeweils eine völlig andere Funktion dahinter, da die Komponente in diesem Fall nicht die Interface-Methode des nativen ADO-Objekts aufruft

        Comment

        Working...
        X