Access-o-Mania

Access-Forum => Formular => Thema gestartet von: Xoar am Dezember 14, 2017, 11:01:00

Titel: zu bestimmten DS im geteilten Formular springen
Beitrag von: Xoar am Dezember 14, 2017, 11:01:00
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
Titel: Re: zu bestimmten DS im geteilten Formular springen
Beitrag von: Lachtaube am Dezember 14, 2017, 11:49:37
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?
Titel: Re: zu bestimmten DS im geteilten Formular springen
Beitrag von: Beaker s.a. am Dezember 14, 2017, 11:50:38
Hallo,
Versuche es mit mit einem RecordsetClone.
set rst = Form_frmFahrzeugBuchungen.RecordsetCloneAndere 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
Titel: Re: zu bestimmten DS im geteilten Formular springen
Beitrag von: DF6GL am Dezember 14, 2017, 11:51:38
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)


Titel: Re: zu bestimmten DS im geteilten Formular springen
Beitrag von: Xoar am Dezember 14, 2017, 12:21:35
@ekkehard
klappt wunderbar ;)

@Franz
klappt auch super und Aufgrund der Codekürze favorisiert ;)

Danke euch allen