PDA

Vollständige Version anzeigen : Recordset im Recordset aufmachen


galaxy
20.04.2011, 12:37
Hallo,

Kann man in Access einen Recordset in einem Recordset aufmachen?

Also sowas in der Art:

Set db = CurrentDb

Set rs_ip = db.OpenRecordset("SELECT ID, Field_Name from Tab1")
Set rs_pf = db.OpenRecordset("SELECT ID, Field_Name from Tab2”)

Do While Not rs_ip.EOF

' hier kommen ein paar anweisungen

Do While Not rs_pf.EOF
' hier kommen ein paar andere Anweisungen

rs_pf.MoveNext
Loop
rs_pf.Close

rs_ip.MoveNext
Loop
rs_ip.Close



Also ich moechte in meinem Code gerne Alle records der Tab1 Tabelle durchlaufen (recordset rs_ip) und in dieser Schleife dann noch alle Tab1 record alle records der Tab2 Tabelle (recordset rs_pf). Aber bei allem was ich bisher so versuche bekomme ich immer die Fehlermeldung „Object variable or with variable not set“ an der Stelle „Do While Not rs_pf.EOF“


Danke fuer jegliche Tipps im Voraus!

Atrus2711
20.04.2011, 12:54
Hi,

das ist eher eine Verschachtelung zweier Schleifen, die jeweils einen Recordset durchlaufen. Das geht schon, vorausgesetzt die Schleifen sind sauber geschachtelt.

Hast du in den weggelassenen Codeteilen irgendwo Recordsets auf Nothing gesetzt? Dann sind die ab da natürlich nicht mehr brauchbar.

Und: rück das doch mal gescheit ein, das hilft beim Denken. :)

Maxel
20.04.2011, 13:00
rs_pf.MoveFirst
Do While Not rs_pf.EOF
sorgt dafür, dass nicht ab er zweiten rs_ip-Schleife das Recordset am Ende ist. ;)

galaxy
20.04.2011, 13:08
Danke fuer den Tipp mit "rs_pf.MoveFirst".

Also ich habe nirgens das mit set nothing bisher verwendet. Merkwuerdig ist auch wenn ich die auessere schleife (also die hier "Do While Not rs_ip.EOF") auskommentiere, dann laeuft die innere ohne Probleme. Mache ich die kommentarzeichen wieder weg habe ich wieder genau die Fehlermeldung wie unten beschrieben.

Zum Thema einruecken: Gibts da eine Art Hilfe fuer? Also ein Tool was das macht? Weil micht stoert das selber bei meinem Code, aber irgendwie kann ich nicht gescheit einruecken, sieht leider immer so aus

ebs17
20.04.2011, 13:09
Recordset im Recordset aufmachen
Du verwendest hier eher getrennte Recordsets und stellst mit denen etwas an. Das geht auch mit noch mehr Recordsets.

Die genannte Fehlermeldung an der genannten Stelle kann ich nicht nachvollziehen. Ich würde aber generell empfehlen, einen Abgleich von zwei Tabellen per Abfrage vorzunehmen statt per Recordsetschleifen und der damit verbundenen Fehlermöglichkeiten.
Eine Abfrage ist schneller, einfacher und sicherer.

Atrus2711
20.04.2011, 13:11
Hi,

die Meldung war ja nicht, dass der RS am EOF sei, sondern dass das Objekt nicht existiert. Das ist mit MoveFirst nicht zu heilen.

Irgendwo wird das Objekt zerstört. Entweder durch Set ... = Nothing, rst.close oder durch einen nicht abgefangenen Fehler.

Da hilft nur: auf die Knie (=den Code im F8-Einzelschrittmodus abrutschen), und alle Objektvariablen sowie Err.Number per Überwachungsfenster im Auge behalten. Irgendwo wird eines entleibt. Und da hakts.

Atrus2711
20.04.2011, 13:11
Hi
w/ Einrücken: such mal nach SmartIndenter.

Maxel
20.04.2011, 13:13
rs_pf.Close
schließt an dieser Stelle das innere Recordset. Das kann nun nicht mehr durchlaufen werden.

Dieser Befehl gehört ans Ende.

galaxy
20.04.2011, 13:24
@Maxel und alle anderen

DANKE!!! Manchmal sieht man den Wald vor lauter Baeumen nicht. Das mit dem rs_pf.Close verschieben hat es geloest. Total logisch, ist mir nur nicht aufgefallen :-)