so schlimm es klingt… Ich habe ein Formular in A2k an eine Tabelle gebunden, die Felder entsprechend auch. Soweit ganz einfach.
Jetzt lese ich in der Form_Load-Methode die Me.OpenArgs-Eigenschaft aus und den erhalte so eine Zahl (LongInt).
Nun… Wie setze ich den aktuellen Datensatz auf genau den, mit der Index-Nr. von meinem Me.OpenArgs-Wert?
Ich habe es mit folgendem Code probiert:
…
Me.RecordSetClone.FindFirst „LandID=“ & lngLandID
If Me.RecordSetClone.NoMatch Then
Msgbox „Nix da…“
Else
Me.Bookmark = Me.RecordSetClone.Bookmark
End If
…
Leider funzt das nicht. Was mach ich falsch, was muß ich richtig machen?
Mein Formular ist an tblLänder gebunden
Texteingabebox ‚txtLand‘ and tblLänder.Name gebunden
Problem… ich habe keine Navigationsschaltflächen auf dem Formular und möchte mittels VBA einen beliebigen Datensatz beim öffnen des Formulars anzeigen lassen. Welcher Datensatz das sein soll, wird dem Formular beim öffnen per Me.OpenArgs übergeben.
Hm, ob’s Dir weiter hilft? Ich hab’ ein paar Feldnamen verwendet, die Du natürlich entspr. ändern mußt.
Die Bookmark-Geschichte hat mir bei Deinem Code nicht gefallen, denn die sucht keinen Datensatz, sondern setzt nur den sehr internen Satzzeiger. Besser auch, die FORM_OPEN Eigenschaft anzusprechen.
Gruß
Stephan
Schaltfläche im aufrufenden Formular:
Private Sub Befehl2_Click()
Dim argument As long
argument = Me!LandID.Value
DoCmd.OpenForm („Einwohner“), , , , , , argument
End Sub
„Beim Öffnen“-Eigenschaft des zu öffnenden Formulars:
Private Sub Form_Open(Cancel As Integer)
Dim argumente As Long
Dim rs As Recordset
argumente = Me.OpenArgs
'Debug.Print argumente
Set rs = CurrentDb.OpenRecordset(„Einwohner“)
'lblTest.Caption = Str(argumente)
'Test, ob Argument ankommt
rs.Index = „Nummer“
rs.Seek „=“, argumente
'Debug.Print rs.Fields(„Einwohner“)
'kriegt er auch richtig hin, Satz ist aber noch
'nicht der gewünschte, deshalb:
DoCmd.GoToControl („Nummer“)
DoCmd.FindRecord argumente
End Sub
Eine Bibliotheksfunktion übernimmt die Navigation (als Parameter bekommt sie das Formular und die Bedingung):
Sub GoToRecord(myForm As Form, Criteria$)
'Aufruf im Click-Event der Combobox:
’ GoToRecord Me, „DSID=“ & ComboBox
Dim RS As Recordset
On Error GoTo SelectRecordsetError
DoEvents
myForm.Requery
DoEvents
Set RS = myForm.RecordsetClone
RS.FindFirst Criteria
If Not RS.NoMatch Then myForm.Bookmark = RS.Bookmark
GoTo SelectRecordsetOK
SelectRecordsetError:
MsgBox "Fehler beim Anzeigen der Daten: " & Chr$(13) & Error, vbCritical, „Library-Funktion GoToRecord“
Resume SelectRecordsetOK
SelectRecordsetOK:
On Error Resume Next
Set RS = Nothing
End Sub
Jetzt kann an irgendeiner Stelle des Formulares (Beim Öffnen, bei Druck auf einen Button, beim Clicken einer Combobox usw.) fogende Zeile aufgerufen werden:
GoToRecord Me, OpenArgs
(wenn OpenArgs eine gültige Bedingung in der Art „Land=‚D‘“ enthält)