Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

zu bestimmten DS im geteilten Formular springen

Begonnen von Xoar, Dezember 14, 2017, 11:01:00

⏪ vorheriges - nächstes ⏩

Xoar

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

Lachtaube

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?
Grüße von der (⌒▽⌒)

Beaker s.a.

#2
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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

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)



Xoar

@ekkehard
klappt wunderbar ;)

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

Danke euch allen