Office: (Office 2010) disconnected Recordset

Helfe beim Thema disconnected Recordset in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo Rainer! Die Verbindung kannst du bei einem ADODB-Rs ohne Probleme kappen. Damit wird es zu einem disconnected Recordset. Ein diconnected Rs muss... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von trekking1, 5. Juni 2011.

  1. disconnected Recordset


    Hallo Rainer!

    Die Verbindung kannst du bei einem ADODB-Rs ohne Probleme kappen. Damit wird es zu einem disconnected Recordset. Ein diconnected Rs muss nicht nur ein Recordset sein, dessen Datensätze und Felder "manuell" per Schleife erzeugt werden.
    Anm.: es muss allerdings zuerst die Verbindung gekappt werden, bevor die Connection geschlossen wird.

    Mit dem Clone hast du natürlich Recht - ich sehe aber nirgends in diesem Thread eine Zuweisung eines Clones. *wink.gif*

    mfg
    Josef
     
    Josef P., 7. Juni 2011
    #16
  2. Mann, ihr seid ja schneller als ich Tippe *ggg*

    @josef
    Es ändert sich nichts, wenn ich auf rsADO.close verzichte. Das Ergebnis ist das gleiche. M.W nach wird das recordsetset doch sowieso mit dem Ende der Prozedur geschlossen und auf nothing gesetzt. Deklariere ja das recordset in der Prozedur in der ich auch die Zuweisung des disconnected Recordset mache.

    Im übrigen hat das schließen keinerlei Auswirkungen auf die Anzeige im Formular. Kann auf alle Werte ohne Probleme zugreifen.

    Eine Möglichkeit wäre das ich das disconnected Recordset in eine Klasse schreibe. Allerdings sind Formulare ja auch Klassen und mein Datenblatt "beherbergt" ja schließlich dann das disconnected Recordset. MAcht wohl auch keinen Sinn.

    Sowie es aussieht, geht es einfach nicht wie wenn ich gebunden arbeite und ich muss wohl doch den Weg über die eindeutigen ID's der Tabelle gehen.

    Viele Grüße

    trekking
     
    trekking1, 7. Juni 2011
    #17
  3. Ist mir im Nachgang auch aufgefallen, daher der Edit. *grins

    Gruß

    Rainer
     
    raist10, 7. Juni 2011
    #18
  4. disconnected Recordset

    Weil vermutlich innerhalb des Formulars ein Clone o. ä. genutzt wird. Die Eigenschaft "Recordset" zeigt aber weiterhin auf das zugeordnete Recordset, das du geschlossen hast.
    Du musst beachten, dass Set form_frmTest.Recordset = rsADO nur eine Referenzübergabe ist und keine Kopie des Objekts übergeben wird.

    Zum Schließen:
    Eine COM-Objekt-Instanz wird dann zerstört, wenn nirgends mehr eine Referenz darauf gehalten wird. Durch die Zuweisung zu form_frmTest.Recordset ist aber auch nach Verlassen der Prozedur eine Referenz vorhanden.

    /edit:
    Vermutlich wäre es am einfachsten, wenn du eine kleine Beispiel-Anwendung erstellst. Du könntest als Ausgangsbasis den Code von Thomas verwenden. Deine Klasse für die Connection sollte nicht unbedingt erforderlich sein, da das Problem beim Recordset liegt. (Ich gehe derzeit davon aus, dass es nicht am Provider liegt, da du erwähntest, dass du noch ein Access-BE einsetzt.)

    mfg
    Josef
     
    Josef P., 7. Juni 2011
    #19
  5. \@ Josef

    Gut, dann wurde das mit Acc2010 geändert. Bei mir in Acc2007 gibt es richtig Ärger wenn ich versuche die ActiveConnection eines geöffneten ADO-Recordset zu "kappen". Keine Chance.

    @ trekking1

    Probiere dochmal das Recordset als Clone zu zu weisen.

    Also so:

    set form.Recordset = rst.Clone

    Dann kannst Du danach das Origin-Recordset killen und der Clone bleibt erhalten.

    Gruß

    Rainer
     
    raist10, 7. Juni 2011
    #20
  6. Ach ja ... noch was:

    Es wird NICHT geschlossen!

    Das ist ein riesen Problem da MS-Access Recordsets die nicht explizit geschlossen wurden im Code, selbst nach Zerstörung im Speicher als aktives Objekt vorhält.

    Passiert das zu häufig kommt es zu der allseits beliebten Meldung das die maximale Anzahl an gleichzeitig verwalteten Objekten erreicht ist und es geht nix mehr.

    Daher IMMER ein Recordset (und auch eine Referenz auf DAO.Database) explizit schliessen wenn nicht mehr gebraucht wird.

    Ausser man hat das mit Access 2010 geändert, aber in Access 2007 ist es auf jeden Fall noch so. ^^

    Gruß

    Rainer
     
    raist10, 7. Juni 2011
    #21
  7. Hallo @ll,

    habe jetze mal folgendes versucht mit einem Überraschenden ergebnis.

    In das HF habe ich einen Button implementiert, der mir die AbsolutePosition und die Anzahl der Datensätze angibt.

    Wenn ich nun mir die AbsolutPosition ausgeben lassen, dann ist diese immer (wie schon gehabt) 1 egal wo der Cursor steht.
    Die Anzahl der Datensätze stimmt aber. Access erkennt also dass da etwas da ist. Nur nicht wo der Datensatzzeiger steht.

    @raist10
    War mir so nicht bewusst, da ich es immer zu mache. Hatte da aber was anderes im Hinterkopf.
    Das mit dem Clone ist ja nicht das was ich will. Eben einen Disconnected Recordset benutzen.

    So wie es nach dem letzten Test aussieht, geht das einfach nciht mit absolutePosition. Werde wohl auf die Datensatz ID zugreifen müssen. Es geht mir ja nicht genau darum an welcher stelle er steht, sondern nur darum um zu erkennen ob ich schon am Ende der Suche angekommen bin.

    WErde berichten, ob es so ging. Ist allerdings viel ubauarbeit meiner Suchen Klasse. *grummel*

    Falls jemand noch ne Idee hat. Jederzeit gerne.

    Viele Grüße

    trekking1
     
    trekking1, 7. Juni 2011
    #22
  8. disconnected Recordset

    Das funktionierte schon immer. Was bedeutet "richtig Ärger"? Fall es zu einer Fehlermeldung kommt, hast du vielleicht keinen clientseitigen Cursor eingestellt.

    Bitte nicht mit Auf-Gut-Glück-Programmieren beginnen. *wink.gif* Statt dem Clone zuweisen könnte man das Rs auch offen lassen - hat die gleiche Wirkung.
    Der Code von Thomas funktioniert auch ohne Modulvariable. Wenn es bei trekking ein Problem mit einer Jet- bzw. ACE-DB gibt, dann ist mit sehr hoher Wahrscheinlichkeit am Code etwas faul. Das gezeigte Prinzip funktioniert nämlich ganz sicher, solange es der Provider erlaubt.


    Bei meinem Test funktionierte es.

    Mein Vorschlag wäre eine Beispiel-DB in der das Problem nachgestellt werden kann.


    Was hast du eigentlich vor? Bedeutet der obige Satz, dass du zwar mit AbsolutPostion unterschiedliche Werte erhältst, du damit aber nichts anfangen kannst, weil du eigentlich nur an Recordset.EOF interessiert bist?

    mfg
    Josef
     
    Josef P., 7. Juni 2011
    #23
  9. Ich bin nur zu einfachem Denken fähig. Daher die Frage: Warum benutzt man ein Recordset (falls es denn funktioniert), um über den Datensatzzeiger jedesmalig zu ermitteln, ob man beim Blättern im Formular am Ende angekommen ist. Ein Do While Not rs.EOF ist wohl zu simpel: "jeder hat da so seinen Stil eben"

    Ich sag mal (hoffentlich übertreibend): Mancher baut einen Flipper, wo ein Knopf genügt.
     
    ebs17, 7. Juni 2011
    #24
  10. \@Josef
    Habe doch weiter oben eindeutig geschrieben, was ich mache und schon zig mal, dass absolutePosition immer 1 ist egal wo der Datensatzzeiger auch steht.

    Ich habe mir die Windows Funktion str+F (suchen) nachgebaut. Die größte Schwierigkeit dabei ist herauszufinden ob du schon alle Datensätze durchsuchst hast und am Ende der Datensätze stehst und dem Anwender dann die Meldung ausgibst dass er alle DS durchsucht hat. (Nein, nur EOF reicht nicht aus, da es mehrere Zwischenstationen gibt) Dazu verwende ich bei gebundenen Formularen absolutePosition und noch andere Kriterien. Das funktioniert auch wirklich sehr gut. Nur jetzt brauche ich das ganze mit einem Formular, das von der Datenquelle getrennt ist. Mit einer lokalen Zwischentabelle könnte ich auch arbeiten, da ich aber keine Verknüpften Tabellen haben will und ich noch keine Möglichkeit gefunden habe eine Lokale Tabelle mit Werten aus dem Backend zu füllen über ein SQL STatement und Execute (recordsetgedaddel geht zwar, ist aber total unperformant mit der Datenmenge) will ich es eben über ein disconnected recordset machen. Da ist die Performance erstaunlich gut. Allerdings eben geht AbsolutePosition nicht. Also nehme ich einen anderen eindeutigen Wert. Eben meinen PrimaryKey. Dazu muss ich leider alles umproggen was ich mir gerne erspart hätte.

    Was mich jetzt noch interessiert, wie sieht dein Code aus, bei dem es funktioniert? Vielleicht erkenne ich dann, was falsch läuft, denn bei meinem Code ist im Moment kein Fehler zu finden und der Disconnected Recordset wird angezeigt ich kann auf alle WErte außer AbsolutePosition zugreifen.

    @Ebs
    Hoffe die Erklärung oben genügt dir. Das ganze ist etwas komplizeriter als nur einmal zu ermitteln ob ich am Ende des recordsets stehe.

    Im übrigen machen Flipper mehr Spaß als nur ein Knopf *wink.gif*

    Viele Grüße

    trekking1
     
    trekking1, 7. Juni 2011
    #25
  11. \@ Josef

    Verdammt ... das war es wirklich. ^^

    Das war kein Gut-Glück, hätte aber wohl nicht "Probiere es mal ... " schreiben sollen. *wink.gif*

    Auch richtig, bloss mit Clone brauchst Du keinen Reference-Holder für das Originale Recordset und den hat trekking ja offensichtlich nicht.

    Den code von Thomas habe ich mir allerdings nicht angesehen. ^^

    Gruß

    Rainer
     
    raist10, 7. Juni 2011
    #26
  12. Ich erkenne aus deinen Beschreibungen leider nicht, was du genau machst, daher kam mein Vorschlag, das in einer Beispiel-Db zu zeigen.
    Manchmal sind es einfache Fehler, die man im eigenen Code übersieht. Vielleicht ändert sich der Datensatzzeiger von dem einen Recordset gar nicht und AbsolutePosition = 1 stimmt.

    Hier ist noch ein Code-Schnipsel:
    Code:
    Ich blätterte zum Testen im Formular per Navigationsleiste und prüfte per Button-Click die AbsolutePosition. Es wurde immer korrekt angezeigt.

    @Rainer:
    Du musst ja auch den Clone am Leben halten. Ob ich nun das Recordset oder einen Clone vom Rs an Me.Recordset zuweise ist ziemlich egal, wenn das Recordset später nicht mehr an anderer Stelle (als im Formular) genutzt wird.

    mfg
    Josef
     
    Josef P., 7. Juni 2011
    #27
  13. disconnected Recordset

    Aus Lokale Tabelle füllen mit ADO:
    An einen SQL Server kann man gezielte Suchanfragen schicken, auch über eine Tabelle hinaus. Und das soll hochperformant sein.
    Im folgenden aber will ich Dir Deinen Spaß nicht weiter nehmen. Nur zu.
     
    ebs17, 7. Juni 2011
    #28
  14. \@ Josef

    Der Clone wird ja durch die Form an sich am Leben erhalten, zumindest solange die nicht geschlossen wird.

    In dem Sinne ist es nicht egal, wenn Du der Form einen Clone des Recordsets übergibst kannst Du dann das Original-Recordset vernichten der Clone bleibt weiter am Leben.

    Und daher eben mein "Vorschlag" es mit einem Clone zu probieren. Denn wenn es mit einem Clone klappen sollte dann hast Du - wie so oft - Recht gehabt das das Problem die Vernichtung des Original-Recordsets ist. *wink.gif*

    Gruß

    Rainer
     
    raist10, 7. Juni 2011
    #29
  15. \@Rainer:
    Damit wir vom gleichen schreiben:
    Code:
    vs.

    Code:
    Beide Varianten würden funktionieren, da in beiden Fällen das Recordset für das Formular nicht geschlossen wurde. Den Sinn des Clones verstehe ich in diesem Fall nur nicht. ;-)


    Was meinst du mit "vernichten"? Auf Nothing setzen ist schnuppe, solange noch von anderer Stelle (z. B. von Me.Recordset) eine Referenz gespeichert ist. Das Problem ist Recordset.Close - was allerdings zu einem Fehler führen sollte und nicht immer den Wert 1 beim Abfragen von AbsolutePosition liefern dürfte.

    mfg
    Josef
     
    Josef P., 7. Juni 2011
    #30
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