chinesisch - vereinfacht   deutsch   Englisch (USA)   französisch   holländisch   portugiesisch - iberisch   spanisch  

Home




Usenet Posting #22 - Trigeminal Software, Inc. (German)



Betreff: INFO: Formular Recordsets gegen Formular RecordsetClones in Access 2000
(ursprünglich gepostet 22.1.00)

Diese zwei Objekte sorgen für ziemlich viel Verwirrung, deshalb halte ich es für eine gute Idee, zu versuchen, einige der Fragen dahinter zu klären

Zuerst mal ist da der RecordsetClone. Dieses Objekt gibt es seit Access 2.0, und es ermöglichte Ihnen, ein DAO-Recordset zu erhalten, das ein Clone des Recordsets war, das Access für das Formular selber verwendete. Da es ein Clone war, konnten Sie Operationen im Clone durchführen und erwarten, diese Änderungen auch im Formular selber zu sehen; Sie konnten sogar mit Hilfe des Clones navigieren (z.B. mit einem FindFirst-Aufruf). Wenn der Bookmark des Formulares mit dem des RecordsetClones synchronisiert wurde, konnten Sie im Formular einen Datensatzwechsel auslösen.

In Access 2.0, 95 und 97 stand jedoch das eigentliche Recordset des Formulares nicht für solche Zwecke zur Verfügung.

Nun zu Access 2000. Hier haben Formulare tatsächlich eine Recordset-Eigenschaft, die sowohl ein DAO- als auch ein ADO-Recordset akzeptiert. Anders als ein Clone ist dieses Recordset ein echter Zeiger auf das exakt gleiche Recordset, das vom Formular selber verwendet wird (deshalb braucht man keine Synchronisation von Bookmarks wie manchmal bei RecordsetClones). Es gibt einige wichtige Regeln zu beachten über die Interaktion dieser beiden Eigenschaften, den Dateityp, und andere Fragen, die ich versuchen werde, hier aufzulisten:

  • Wenn Sie die Recordset-Eigenschaft des Formulares nicht setzen und das Formular ist in einer .MDB-Datei, dann werden die Recordset- und die RecordsetClone-Eigenschaft ein DAO 3.6 Recordset zurückgeben.
  • Wenn Sie die Recordset-Eigenschaft des Formulares nicht setzen und das Formular ist in einer .ADP-Datei, dann werden die Recordset- und die RecordsetClone-Eigenschaft ein ADO 2.1 Recordset auf Basis des Jet 4.0 OLE DB Providers zurückgeben.
  • Wenn Sie die Recordset-Eigenschaft des Formulares setzen, dann werden nachfolgende Aufrufe sowohl der Recordset- als auch der RecordsetClone-Eigenschaft genau den selben Recordsettyp zurückliefern, auf den Sie die Eigenschaft ursprünglich gesetzt haben.
  • Die Recordset-Eigenschaft kann auf ein DAO 3.6 Recordset oder ein ADO 2.1 Recordset gesetzt werden, dass entweder auf dem Jet 3.5x OLE DB Provider basiert oder auf dem Jet 4.0 OLE DB Provider. Das trifft zu - unabhängig vom Projekt-Typ.
  • Derzeit werden die o.a. ADO-Recordsets das Formular auf nur-lesbar setzen.
  • In einer ADP-Datei werden Sie jedesmal, wenn Sie den RecordSetClone eines Formulares aufrufen, eine neue Instanz eines geklonten Recordsets erhalten. Anders in einer .MDB-Datei, wo Sie wie bisher auch weiterhin das gleiche Recordset und den gleichen Cursor verwenden müssen. Warum das eine Rolle spielt? Nun, nehmen wir mal Code wie den folgenden, den der Listen-/Kombinationsfeld-Assistent von Access 95/97 für ein Steuerelement anbieten würde, dass zum Navigieren zu neuen Recordsets in einem Formular dienen soll:
    Me.RecordSetClone.Find "[id] = " & Me.YourComboBox.Value
    Me.Bookmark = Me.RecordsetClone.Bookmark
    

    Diese Art von Code (evtl. mit Differenzen in der Syntax, weil die DAO-Methode normalerweise FindFirst sein würde) funktionierte gut in allen bisherigen Versionen von Access und funktioniert weiterhin in .MDBs von Access 2000. In ADPs jedoch wird dieser Code nicht richtig arbeiten, weil jeder Aufruf der RecordsetClone-Eigenschaft einen neuen Cursor zurückgibt und deshalb wird die erste "Find"-Operation nichts mit dem Recordsetclone zu tun haben, der vom Aufruf in der zweiten Zeile zurückgeliefert wird. Für Access 2000 wurde dieser Code wie folgt geändert, um diesen Unterschieden Rechnung zu tragen:

    Dim rs As ADODB.Recordset
    Set rs = Me.RecordSetClone
    rs.Find "[id] = " & Me.YourComboBox.Value
    Me.Bookmark = rs.Bookmark
    

Ich hoffe, diese Information ist nützlich für den einen oder anderen!

Back to Usenet Musings


Probleme mit dieser Seite? Bitte kontaktieren Sie den webmaster@trigeminal.com
mit Ihren Kommentaren, Fragen oder Vorschlägen.