PDA

Vollständige Version anzeigen : Laufzeitfehler 3021


Blade01
01.10.2009, 14:21
Hallo zusammen,

ich habe ein Problem und hoffe, dass ihr mir Dabei helfen könnt.

Wenn ich in meinem Formular in der Listbox einen Datensatz anklicke.

Kommt folgender Fehler "Laufzeitfehler 3021" kein Aktueller datensatz.

Wie kann das sein?

Hier ist der VBA Code dazu.

Private Sub terminliste_AfterUpdate()
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "training_id = " & CStr(Me!terminliste)
Me.Bookmark = rs.Bookmark
End Sub

Ich muss dazu sagen, ich habe per SQl die Datensätze die in der Listbox angezeigt werden sollen vorgeflitern mit dem Kriterium Datensatz_erl = 0

Wenn ich den Filter aus nehme geht es aber der Filter muss schon sein.

Könnt ihr mir helfen?

Atrus2711
01.10.2009, 14:27
H,
vmerutlich findet der FindFirst keine Treffer. Das ist ja denkbar.

Try:

Private Sub terminliste_AfterUpdate()
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Dim rs As Dao.Recordset

Set rs = Me.Recordset.Clone
rs.FindFirst "training_id = " & CStr(Me!terminliste)
If rs.NoMatch Then
MsgBox "Nicht gefunden"
Else
Me.Bookmark = rs.Bookmark
End If
End Sub

Blade01
01.10.2009, 14:40
Hey super....also das bringt mich schonmal einen Schritt weiter.

Musst noch dazu die "Microsoft DAO 3.5 Object Library" aktivieren.

Jetzt zeigt er mir jedes mal an das er keine Datensätze finden kann.

Aber warum? Ich hab will doch nur die Treffer in der Listbox filtern.

Morli
01.10.2009, 14:51
Ist denn dein TrainingID Typ Text oder Zahl? Da du mit CStr(Me!terminliste) arbeitest, vermute ich mal du hast Typ Text.

Dann sollte die entsprechende Codezeile so aussehen
rs.FindFirst "training_id = '" & CStr(Me!terminliste) & "'"

Morli

Blade01
01.10.2009, 15:03
Ne ne,

ich hab in meiner Verzweiflung einfach mal ein bisschen rum probiert.

Also training_id ist schon eine Zahl so wie es sich für eine ID gehört ;-)

Was nu?

maikek
01.10.2009, 15:24
ist denn das gebundene Feld in Terminliste auch eine Zahl?
Dann eben ohne die Umwandlung durch CStr(). Oder, wenn es eine Zahl, aber trotzdem vom Datentyp Text ist, dann umwandeln mit CLng().
maike

Blade01
01.10.2009, 15:44
Moment also wenn ich Dich da richtig verstehe, dann ist das Listenfeld ungebunden.

Ich habe das jetzt trotzdem mal ausprobiert aber es funktioniert auch nicht.

Komisch wenn ich aus der Abfrage (Datensatzherkunft) das Kriterium training_abgeschl = 0 raus nehme, dann geht es ja.

Ich verstehe das nicht

hier ist die SQl Abfrage:

SELECT tbl_training.training_id, tbl_modul.modul_name AS Modul, tbl_training.training_datum AS Datum, tbl_training.training_uhrzeit_von AS von, tbl_training.training_uhrzeit_bis AS bis, tbl_training.training_abgeschl
FROM tbl_modul INNER JOIN tbl_training ON tbl_modul.modul_id = tbl_training.modul_id_f
WHERE (((tbl_training.training_abgeschl)=0))
ORDER BY tbl_training.training_datum;

maikek
01.10.2009, 16:34
Lad das Ganze mal hoch, abgespeckt, Access komprimiert und gezippt im 2000er Format.
maike

Blade01
01.10.2009, 16:46
Da ist sie:-)

maikek
01.10.2009, 16:53
Dann nimm mal in der Datenherkunft des Formulars das Kriterium "Ist Null" beim Feld training_abgeschl weg. Das Recordset des Formulars hat sonst keine Datensätze - es ist leer.
maike

Blade01
01.10.2009, 17:10
Vielen lieben Dank!!!

Ich kämpfe da schon fast zwei Tage mit....:mad:

Hast mit echt den Tag gerettet.