OpenRecordset - wie Parameterübergabe?

Hallo,

ich rufe per VBA folgenden Befehl auf um meine gefilterten Datensätze zu durchlaufen:

Set rs = db.OpenRecordset(„Abfrage_gefiltert“)

In meiner Abfrage „Abfrage_gefiltert“ gibt es aber zwei Parameter die wie folgt lauten:
TVerteildatum hat das Kriterium: [Formulare]![Startseite]![Verteildatum]
TPId hat das Kriterium: [Formulare]![Startseite]![Tempfeld]

Wie kann ich diese beiden Parameter an mein OpenRecordset übergeben???

Danke im Voraus
Thomas

Hallo,

am einfachsten in dem du die Paramter in der Abfrage rauswirfst und dein Openrecordset mitttels „Select * from Abfrage_gefiltert WHERE FeldX = '“ & [Formulare]![Startseite]![Tempfeld] & „’ AND …“ versorgst.

Wobei du bei Datumsparameter darauf achten mussst das du sie mittels Format(Datumsfeld,„mm-dd-yyy“) in das englische Format konvertierst.

Tschau
Peter

Hallo Peter,

danke für deine Antwort, ich habe jetzt nach deinem Muster folgendes getestet:

Set rs = db.OpenRecordset(„SELECT * FROM Abfrage_gefiltert WHERE TVerteildatum =’“ & [Formulare]![Startseite]![Verteildatum] & „’ AND TPId = '“ & [Formulare]![Startseite]![Tempfeld] & „’“)

Leider bekomme ich die Fehlermeldung, das das im Ausdruck angesprochene Feld nicht gefunden wird???
Sowohl „TPId“ als auch „TVerteildatum“ sind vorhanden, die Datumsformatierung habe ich mal reingenommen und mal weggelassen, auch ohne Erfolg.

Hallo,

danke für deine Antwort, ich habe jetzt nach deinem Muster
folgendes getestet:

schreib mal besser so:

Set rs = db.OpenRecordset(„SELECT * FROM Abfrage_gefiltert
WHERE TVerteildatum = " & Format(Me![Verteildatum],“#yyyy-mm-dd#") & " AND TPId = " & Me![Tempfeld],dbopenSnapshot)

wobei „TVerteildatum“ den Datentyp Datum/Uhrzeit und „TPId“ den Datentyp „Long Integer“ haben müssen.

Weiterhin ist darauf zu achten, dass die Form-Textfelder einen Inhalt haben und nicht leer sind.
Wenn so, zusätzlich mit der nz()-Funktion „stabilisieren“.

Wenn der Recordset änderbar sein soll, dann auch:

Set rs = db.OpenRecordset(„SELECT * FROM Abfrage_gefiltert
WHERE TVerteildatum = " & Format(nz(Me![Verteildatum],Date),“#yyyy-mm-dd#") & " AND TPId = " & nz(Me![Tempfeld],0) ,dbopenDynaset)

Viele Grüße vom Bodensee
Franz, DF6GL

Super das hat geklappt, da die Variablen in einem anderen Formular stehen habe ich es wie folgt ergänzt:

Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Abfrage_gefiltert WHERE TVerteildatum = " & Format(Forms![Startseite]![Verteildatum], „#yyyy-mm-dd#“) & " AND TPId = " & Forms![Startseite]![Tempfeld], dbOpenSnapshot)

While Not rs.EOF
Me!TGesamtpreis = 100 'in jedem Datensatz ändern (Beispiel)


rs.MoveNext
Wend
rs.Close
Set rs = Nothing
Set db = Nothing

jetzt durchläuft er alle gefilterten Datensätze :smile:
Habe noch eine Frage, wenn ich jetzt in jedem Datensatz einen Wert oder mehrere ändern will die er dann auch gleich dort eintragen soll muss ich da was beachten, im Moment macht er die Änderung nur im 1.DS?!

Hallo,

Super das hat geklappt, da die Variablen in einem anderen
Formular stehen habe ich es wie folgt ergänzt:

Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Abfrage_gefiltert
WHERE TVerteildatum = " &
Format(Forms![Startseite]![Verteildatum], „#yyyy-mm-dd#“) &
" AND TPId = " & Forms![Startseite]![Tempfeld],
dbOpenSnapshot)

While Not rs.EOF
Me!TGesamtpreis = 100 'in jedem Datensatz ändern (Beispiel)


rs.MoveNext
Wend
rs.Close
Set rs = Nothing
Set db = Nothing

jetzt durchläuft er alle gefilterten Datensätze :smile:
Habe noch eine Frage, wenn ich jetzt in jedem Datensatz einen
Wert oder mehrere ändern will die er dann auch gleich dort
eintragen soll

Wenn Feldinhalte im Recordset geändert und abgespeichert werden sollen, ist

rs.Edit
>
>
>
rs.Update

nötig.

Viele Grüße vom Bodensee
Franz, DF6GL

Hallo Franz,

hab das jetzt mal so gemacht, bekomme aber eine Fehlermeldung:
„Operation wird für diesen Objekttyp nicht unterstützt“

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Abfrage_gefiltert WHERE TVerteildatum = " & Format(Forms![Startseite]![Verteildatum], „#yyyy-mm-dd#“) & " AND TPId = " & Forms![Startseite]![Tempfeld], dbOpenSnapshot)
While Not rs.EOF
rs.Edit
rs!TGesamtpreis = 100 '(Beispiel)
rs.Update
rs.MoveNext

Vllt. hast du noch eine Idee?!
Danke, Thomas

Hallo,

Schau mal den Post von Franz weiter oben…

wenn du einen Recordset bearbeiten willst musst du mit
Open(…,dbopenDynaset) oeffnen nicht mit

dbOpenSnapshot)

Tschau
Peter

Hallo Franz, hallo Peter!

habe jetzt die Korrektur vorgenommen und bekomme den Fehler das das Aktualisieren nicht möglich ist, da die DB schreibgeschützt ist?!
In meiner Schleife will ich in allen DS das Feld „TGesamtpreis“ auf 100 setzen (Beispiel), habe zwei Varianten probiert und beide funktionieren nicht :frowning:

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Tourenabfrage gefiltert WHERE TVerteildatum = " & Format(Nz(Forms![Startseite]![Verteildatum], Date), „#yyyy-mm-dd#“) & " AND TPId = " & Nz(Forms![Startseite]![Tempfeld], 0), dbOpenDynaset)
While Not rs.EOF
rs.Edit
rs.Fields(„TGesamtpreis“).Value = 100
'rs!TGesamtpreis = 100
rs.Update
rs.MoveNext
Wend
rs.Close

Hallo,

den Fehler das das Aktualisieren nicht möglich ist, da die DB schreibgeschützt ist

dann musst Du halt die Db im freigegebenen (nicht im exklusiven) Zustand öffnen… falls das zutrifft.

Andere Ursachenmöglichkeiten (im Fall > A2007) können an den fehlerhaften/fehlenden Einstellungen für vertrauenswürdige Speicherorte, Makroaktivierung und Vertrauen in VBA-Programmierung liegen.

Gruß
Franz,DF6GL