Office: (Office 2010) disconnected Recordset

Helfe beim Thema disconnected Recordset in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo @ll, habe einem Formular einen Disconected Recordset zugewiesen. Der Recordset wird nach dem zuweisen komplett geschlossen. Auch die Connection.... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von trekking1, 5. Juni 2011.

  1. disconnected Recordset


    Hallo @ll,

    habe einem Formular einen Disconected Recordset zugewiesen. Der Recordset wird nach dem zuweisen komplett geschlossen. Auch die Connection. Das funktionert alles ohne Probleme.
    Jetzt will ich allerdings über recordsetClone.absolutePosition die Position des Datensatzzeigers ermitteln. Dies funktioniert leider nicht.Egal wo der Datensatzzeiger steht AbsolutePosition ist immer 1. Gibt es eine Möglichkeit herauszufinden, an welcher Stelle der Datensatzzeiger steht.

    Vielen Dank und viele Grüße

    trekking

    :)
     
    trekking1, 5. Juni 2011
    #1
  2. Hallo
    Wilkommen im Forum *hands
    Frage;
    das nach dem Disconected ?
    zeige doch einmal wo und wie Du den Disconected machst.
     
    Lanz Rudolf, 6. Juni 2011
    #2
  3. Hallo @ll

    wenn ich die Microsoft Doku zu ADO lese:
    http://msdn.microsoft.com/en-us/libr...=VS.85%29.aspx

    "In order to set the AbsolutePosition property, ADO requires that the OLE DB provider you are using implement the IRowsetLocate : IRowset interface.

    Accessing the AbsolutePosition property of a Recordset that was opened with either a forward-only or dynamic cursor raises the error adErrFeatureNotAvailable. With other cursor types, the correct position will be returned as long as the OLE DB provider supports the IRowsetScroll:IRowsetLocate interface. If the provider does not support the IRowsetScroll interface, the property is set to adPosUnknown. See the documentation for your provider to determine whether it supports IRowsetScroll."

    dann hängt es vom Provider ab, ob AbsolutePosition unterstützt wird.

    Zu Deutsch: Es kann funktionieren, muß aber nicht *wink.gif*

    Viele Grüße

    Klaus
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    KGunder, 6. Juni 2011
    #3
  4. disconnected Recordset

    Hallo Rudolf, Hallo Klaus,

    danke schon mal für die Antworten.

    @Klaus
    Da ich noch am Entwickeln bin habe ich noch ein Access 2010 BE. Später soll es dann MySQL werden. Bei MySQL meine ich mich zu erinnern, dass es geht. A2010 sollte auf alle Fälle gehen.

    @Rudolf

    Der Code lautet


    rsADO.Open MSQL, cnx.thisCN(MyBackend), adOpenKeyset, adLockBatchOptimistic

    Set rsADO.ActiveConnection = Nothing
    'Dem Formulaf das disconnected recordset zuweisen
    Set form_frmTest.Recordset = rsADO

    rsADO.Close: Set rsADO = Nothing

    cnx.thisCN(MyBackend).close

    cnx... ist eine Klasse in der die Connection steckt (Ist zu lang um es zu posten)


    Vielleicht gibt es aber auch eine andere Möglichkeit herauszufinden wo der Datensatzzeiger steht.

    Vielen Dank und viele Grüße

    trekking
     
    trekking1, 7. Juni 2011
    #4
  5. Code:
    In meiner Vorstellung ist ein geschlossenes Recordset ein geschlossenes Recordset, nicht ein "verbindungsloses".

    Mit Recordsetclone wird ein neues Recordsetobjekt erzeugt. Bei einem neuen Recordset steht der Datensatzzeiger üblicherweise auf dem ersten Datensatz.

    A la FAQ4.5: Wenn Deine Datensätze auch eine ID haben, könntest Du damit auch die Position ermitteln. Die ID müsstest Du Dir aber vor der Erzeugung des Clones "merken".
     
    ebs17, 7. Juni 2011
    #5
  6. Hallo!
    Ändert sich etwas, wenn Du in Deinem Code explizit die CursorLocation für das Recordset auf adUserClient setzt?

    CU
     
    Thomas Möller, 7. Juni 2011
    #6
  7. Hallo!
    Ich habe noch ein wenig geforscht. Wenn Du die Variable für das Recordset auf der Ebene des Formularmoduls deklarierst, kannst Du an anderer Stelle die gewünschte Information einfach abfragen:
    Code:
    HTH
     
    Thomas Möller, 7. Juni 2011
    #7
  8. disconnected Recordset

    Hallo Ebs17, Hallo Thomas,

    vielen Dank für die Anregungen.

    Hätte wohl noch folgendes dazuschreiben müssen für das bessere Verständniss. Verzeihung dafür, dachte es geht auch einfacher. *schäm* In dem Formular mit dem Disconnected Recordset wird mit einem zweiten Formular gesucht (vereinfachter Nachbau der str + F Funktion). Die AbsolutPosition benötige ich zum herausfinden, ob ich mich immer noch im gleichen Datensatz und an der selben Stelle befinde. Dann habe ich nämlich das Datenblatt komplett durchlaufen. Das funktioniert auch ohne Probleme sofern ich ein gebundenes Datenblatt habe. (Ursprung eine Lokale nicht verknüpfte Tabelle) Sobald ich aber die disconnected Version benutze ist absolut Position immer auf 1. Egal wo der Cursor tatsächlich steht.

    @Ebs17
    Das mit der ID habe ich mir auch schon überlegt. Allerdings habe ich hier das Problem, dass das "Suchen" Formular universell eingesetzt wird und ich die ID in der Klasse clsSuchen Individuell für jedes Form hinterlegen müsste. (ISt aber die alternative wenn es nicht mit absolutePosition klappt.

    @Thomas
    Für deine Mühe besten dank. Das auf der Modulebene geht nicht, da ich es ja in einem anderen Formular benutze. Sorry nochmal dafür, dass ich das nicht gleich so deutlich geschrieben habe. *schäm*
    Allerdings war mir nicht bewusst, dass es diese Möglichkeit in der Form auch gibt und das kannich an einer anderen Stelle sehr gut verwenden. Danke dafür.
    PS: CursorLocation ist explizit adUseClient
    @all
    Falls jemand aufgrund der jetzt ausführlicheren Beschreibung eine Idee hat Danke schon mal dafür.

    Viele Grüße trekking
     
    trekking1, 7. Juni 2011
    #8
  9. Das befremdet mich noch ein wenig mehr. Die AbsolutPosition benötigt man für eine Navigationsanzeige (Datensatz 7 von 15). Für sonstiges ist mir keine wichtige Verwendung bekannt.

    Ich würde aber auch nicht ein Formular (Datenblatt) Datensatz für Datensatz durchlaufen, sondern die Datenherkunft an sich, sprich das Recordset.
    Noch optimaler wäre der Einsatz von SQL zum Suchen statt VBA-Schleifen.
     
    ebs17, 7. Juni 2011
    #9
  10. Hallo!

    Nur zur Sicherheit noch einmal wiederholt: rs.close ist kein disconnected Recordset sondern ein geschlossenes Recordset. Da gibt es keine AbsolutePosition mehr. ;-)

    Auf die Deklaration einer Recordsetvariable im Modulebereich des Formular sollte eigentlich verzichtet werden können, wenn das Recordset dem Formular zugeweisen wird, da dann über Me.Recordset auf die Recordsetinstanz zugegriffen werden kann.
    Es würde mich wundern, wenn (bei korrektem Code) Me.Recordset.AbsolutPostion nicht funktioniert.

    mfg
    Josef
     
    Josef P., 7. Juni 2011
    #10
  11. Öhem ... was wird geschlossen? Etwa das disconnected Recordset?

    Und wofür braucht ein Disconnected Recordset überhaupt eine Connection? Das Ding heisst ja disconnected Recordset weil es eben keine Connection braucht.

    Oder habe ich Deine Ausführungen nur falsch verstanden?

    Vielleicht wäre es geschickt wenn Du den Code in dem Du das disconnected Recordset einrichtest und befüllst hier mal zeigst ... vllt liegt ja da der Fehler?

    EDIT:

    Verdammt ... habe den Code doch glatt übersehen. ^^

    Code:
    Das kann meiner Erfahrung nach nicht gut gehen, allerdings auf Acc2007 bezogen. ^^

    In dem Augenblick wo Du der Eigenschaft Connection des Recordsets Nothing zuweisst ist ein ADO-Recordset "gestört".

    Selbst wenn Du erst den Clone zuweisst und danach das Recordset schliesst und auf Nothing setzt, braucht der RecordsetClone noch nach wie vor die gleiche aktive Verbindung wie das Original-Recordset. Zumindest ist es so in Access 2007, ka ob man das mit Acc2010 geändert habe ... aber halte ich für unwahrscheinlich, denn wie willst Du den schreibenden Zugriff des Recordsets auf die Datenbank umsetzen wenn die Connection auf der es aufbaut gekappt ist?

    Gruß

    Rainer
     
    raist10, 7. Juni 2011
    #11
  12. Danke für weitere Antworten.

    @Ebs17
    Du gehst von etwas vollkommen anderem aus wie das was ich mache. Stell dir ein Datenblatt vor und die Windows Funktion str + f (Suchen) Das habe ich nachgebaut und durchsuche damit das Datenblatt. (Ja, es gibt andere Methoden, die mag ich aber am liebsten, jeder hat da so seinen Stil eben und da möchte ich auch keine Grundsatzdiskussion vom Zaun brechen)
    Über das Suchformular finde ich die absolutePosition heraus um eben festzustellen wo ich gerade stehe. Leider ist eben beim Disconnected Recordset diese immer 1 egal an welcher Stelle ich im Datenblatt bin. Wenn ich es gebunden mache dann funktioniert es ohne Probleme.

    @josef
    Es handelt sich definitiv um einen disconnected Recordset, da ich rsADO.Close erst nach dem zuweisen des Recordset auslöse und zwar um die Prozedur ordentlich und ohne offenen Recordsets abzuschliesen. (Es gibt ja immer mal wieder die Diskusion ob das denn wirklich nötig ist, aber dazu will ich jetzt keine neue Diskussion vom Zaun brechen)
    Ablauf also:
    Öffnen des Formulars (mit doCmd)
    rsADdisconnected Recordset o_Open
    Set rsADO.ActiveConnection = Nothing
    Set form_frmTest.recordset=rsADO
    Erst jetzt das rsADO.close
    dann die connection schließen

    Der Zugriff auf das Formular Recordset erfolgt nicht über das Formular selbst sondern über ein Suchformular und eine Klasse. AbsolutPosition ist dann immer 1 egal wo der Datensatzeiger im Datenblatt steht.

    Im übrigen ergibt form_frmTest.recordset.absolutposition eine Fehlermeldung. Es geht nur mit form_frmTest.recordsetclone.absolutposition.

    Ist das ganze gebunden, dann funktioniert es einwandfrei. Sowohl mit recordset wie auch mit recordsetclone

    @raist
    Der code ist weiter oben gepostet. Ich schließe die Connection, mit der ich das Disconnected Recordste erzeugt hatte. Allerdings wie du weiter oben siehtst nach dem zuweisen. Habe auch schon verschiedene Optionen(CursorType verändert etc) probiert.
    Auch Edit da du ja den Code schon gefunden hast *wink.gif*
    Wenn ich die Active Connection nicht auf nothing sezte, dann habe ich doch kein disconnected Recordset. Es ist ja Sinn und zweck das Recordset von der Datenquelle zu trennen. Wenn das nicht so wäre, dann hätte ich die artikel in Access im Unternehmen dazu vollkommen falsch verstanden. Ich will ja gerade keine Verbindung mehr zu der Datenquelle.




    Viele Grüße

    trekking
     
    trekking1, 7. Juni 2011
    #12
  13. disconnected Recordset

    Verdammt ... ich bin heute zu langsam. ^^

    Siehe in meinem letzten Post mein Edit ... das kann eigentlich nicht richtig funzen das das ADO-Recordset mit hoher Wahrscheinlichkeit gestört ist wenn Du ihm die Verbindung weg nimmst.

    Probiere es einfach mal ohne die Verbindung zu kappen und die Verbindung solange offen zu halten wie Du mit dem Clone des Recordset arbeitest. Dann könnte es funktionieren.

    EDIT:

    Okay ... ich bin viiiiel zu langsam. ^^

    Du solltest die Connection NICHT schliessen, selbst nach Erzeugung des Clones nicht. Du kannst die erst schliessen wenn Du die Form entlädst, denn der Clone basiert auf der gleichen Verbindung wie das Original-Recordset.

    Und ein ADO-Recordset ohne aktive Verbindung zur Datenbank ist "gestört" um es gelinde zu formulieren.

    Zumindest ist es so in Access 2007.

    Gruß

    Rainer
     
    raist10, 7. Juni 2011
    #13
  14. Hallo!

    Damit schließt du aber das Recordset!

    Code:
    Anderes Beispiel:
    Code:
    => auch rs1 ist geschlossen - es ist nämlich das gleiche Recordset.

    mfg
    Josef
     
    Josef P., 7. Juni 2011
    #14
  15. \@ Josef (übrigens ... Hi nach so langer Zeit *wink.gif*)

    Das schliessen des Recordsets sollte eigentlich kein Problem sein, wenn das Recordset als Clone zugewiesen wurde. Ein Clone braucht doch meines Wissens nach nicht das Original-Recordset um zu existieren. Aber korrigiere mich bitte wenn ich hier falsch liege.

    Ich bin der Meinung das das Schliessen der Connection das Übel ist. Wie soll ein ADO-Recordset ohne aktive Verbindung exsitieren? Das klappt nur bei disconnected Recordsets die werden aber auch von Haus auf ohne Verbindung erstellt.

    EDIT: Vergiss es ... er legt ja gar keinen Clone an. Du hast Recht. *wink.gif*

    Gruß

    Rainer
     
    raist10, 7. Juni 2011
    #15
Thema:

disconnected Recordset

Die Seite wird geladen...
  1. disconnected Recordset - Similar Threads - disconnected Recordset

  2. Apostroph in sql Recordset

    in Microsoft Access Hilfe
    Apostroph in sql Recordset: Hallo Gemeinde, einen hätte ich noch: sqlTitel = "SELECT * FROM tbl_Files_Edited WHERE Titel='" & strTitel & "'" Set rs1 = db.OpenRecordset(sqlTitel) Enthält strTitel einen...
  3. Recordset auf einmal nicht mehr aktualisierbar

    in Microsoft Access Hilfe
    Recordset auf einmal nicht mehr aktualisierbar: Hallo, ich bin bei der Weiterentwicklung einer seit Jahren funktionierenden Prozedur, bei der u.a. per SQL Datensätze nach einem bestimmten Feld sortiert aus einer Tabelle in ein Recordset...
  4. Recordset

    in Microsoft Excel Hilfe
    Recordset: Hallo Zusammen, ich möchte gern aus einer Excel-Tabelle Werte über ein Recordset in eine Access Tabelle einlesen. In der Anlage die vereinfachte Struktur der Daten. Im Bsp 1 werden die Daten...
  5. Recordset wird nicht erfasst

    in Microsoft Access Hilfe
    Recordset wird nicht erfasst: Liebe Access-Profis, wieder bin ich am Ende der Weisheit; dieses Mal geht es um einen VBA-Code, der einen Recordset nicht identifiziert. Das Vorhaben: Im Formular 'Aktuelles Schuljahr' steht in...
  6. Recordset-Feldname mit Variable verbinden

    in Microsoft Access Hilfe
    Recordset-Feldname mit Variable verbinden: Hallo, hat jemand einen Tipp für mich, wie ich einen Recordset-Feldnamen mit einer Variablen kombinieren kann. Ein Pivot-Recordset stellt mir Feldnamen zur Verfügung, die etwa so aussehen:...
  7. Recordset Listenfeld füllen

    in Microsoft Access Hilfe
    Recordset Listenfeld füllen: Hallo *Smilie Ich möchte gern mein Listenfeld füllen.. ______________ 1) Bei dieser Methode kommt es (willkürlich) zu einem Absturz: Set Forms("Freigabetool").Controls(liste0).Recordset = rs...
  8. ID aus SQL Recordset ermitteln - Geänderter Treiber?

    in Microsoft Access Hilfe
    ID aus SQL Recordset ermitteln - Geänderter Treiber?: ch habe ein akutes Problem beim Zugriff auf den SQL Server. Seit vielen Jahren nutze ich folgendes Prinzip. Im VBA lege ich einen neuen Datensatz in einem Recordset an. Da der SQL Server die...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden