Hallo Leute, habe ein kleines aber nerviges Problem.
Ich möchte durch eine Sub in einem allgemeinem Modul zu einen bestimmten DS in einem geteilten Formular springen, irgendwie klappt das aber nicht so ganz.
Public Sub SpringeZuBestimmtenDatensatz(SpringeZuDS as variant)
if isNull(SpringeZuDS) then
Form_frmFahrzeugBuchungen.Recordset.MoveFirst
else
Form_frmFahrzeugBuchungen.Recordset.FindFirst = "FahrzeugID = " & SpringeZuID 'FahrzeugID ist ein Autowert
end if
Leider kommt ein Fehler sobald "SpringeZuDS" nicht null ist.
3251 Operation wird für diesen Objekttyp nicht unterstützt.
Hab mir gedacht das es wohl am Form.Recordset liegt,
habs also mit einem deklarierten Recordset versucht.
Dim rst as DAO.Recordset
set rst = Form_frmFahrzeugBuchungen.Recordset
rst.FindFirst "FahrzeugID = " & SpringeZuID
Form_frmFahrzeugBuchungen.Recordset.bookmark = rst.bookmark
rst.close
dann zeigt er mir aber immer nur noch einen DS in der Liste an, wo überall #Name drin steht.
Grüße
Code der nur in einem Formular genutzt werden kann, sollte auch dort verweilen. Die implizite Verwendung von Formularinstanzen über Form_XYZ ist IMHO auch kein guter Stil. So, genug gemeckert. :)
Welcher Datentyp wird denn von besagtem Feld verwendet?
Hallo,
Versuche es mit mit einem RecordsetClone.
set rst = Form_frmFahrzeugBuchungen.RecordsetClone
Andere Frage, warum verwendest du eine Prozedur in einem allgemeinen
Modul, wenn du da nicht auch das Form parametrisierst?
Ich verwende dieses
Public Sub Bookmarken( _
ByVal frm As Form, _
ByVal varID As Variant, _
ByVal edFeld As String)
'---------------------------------------------------------------------------------------
' Parameter : frm = aufrufendes Formular
' : varID = DatensatzID bzw. Suchbegriff (muss nicht unbedingt PK sein, deshalb Variant)
' : edFeld = Feld in dem die ID (bzw. der Suchbegriff) steht
' : damit ist man auch unabhängig vom PK bzw. vom Datentyp des durchsuchten Feldes,
' : da man in jedem Feld suchen/finden kann
Dim strKrit As String
Dim rst As DAO.Recordset
Set rst = frm.RecordsetClone
strKrit = BuildCriteria(edFeld, rst.Fields(edFeld).Type, "=" & varID)
rst.FindFirst strKrit
frm.Bookmark = rst.Bookmark
Ende_CleanUp:
On Error Resume Next
rst.Close
Set rst = Nothing
Exit Sub
End Sub
gruss ekkehard
Hallo,
im ersten Code ist das "="-Zeichen bei Findfirst zuviel.
Beim 2. Code sollte sich Bookmark auf das Form beziehen.
Zudem würde ich nicht die Form-Klassen-Referenz benutzen, eher die Forms-Auflistung.
Forms!frmFahrzeugBuchungen.Recordset.FindFirst "FahrzeugID = " & nz(SpringeZuID,0)
oder, sofern sich der Code im selben Formular befindet:
Me.Recordset.FindFirst "FahrzeugID = " & nz(SpringeZuID,0)
@ekkehard
klappt wunderbar ;)
@Franz
klappt auch super und Aufgrund der Codekürze favorisiert ;)
Danke euch allen