Hallo Forum,
das Thema im Betreff ist sicher schon tausendmal diskutiert worden, aber in meiner Datenbank will es nicht funktionieren. Ich habe ein Formular mit einem Konbifeld, welches die Daten für mein Unterformular liefert.
Das Unterformular stellt Lagerplätze dar und besitzt neben dem ID Feld noch drei weitere Felder, welche über die Auswahl im Kombifeld beschrieben werden. Hierzu starte ich eine Schleife, welche diese Felder nach Leerfeldern durchsucht. Wenn gefunden, wird der Datensatz automatisch in das erste leere Feld eingefügt. Alles gut soweit. Allerdings wollte ich gern den Fokus auf den eingefügten Datensatz nach requery lassen , was aber irgendwie nicht funktioniert. Mein Code, welcher in einer anderen Datenbank super läuft (hier angepasst):
lng = Me![Warenhaus_Unterform_frm].Form!ID
Me.Painting = False
Me.Warenhaus_Unterform_frm.Requery
Me![Warenhaus_Unterform_frm].Form.Recordset.FindFirst "ID=" & lng
Me.Painting = True
Warenhaus_Unterform_frm ist das Unterformular, welches die Daten aufnimmt. Ich bekomme den Fokus einfach nicht auf den letzten eingefügten Datensatz. Hat jemand eine Idee für mich?
Grüsse Rene
Hallo,
dies
ZitatIch habe ein Formular mit einem Konbifeld, welches die Daten für mein Unterformular liefert.
welche über die Auswahl im Kombifeld beschrieben werden. Hierzu starte ich eine Schleife, welche diese Felder nach Leerfeldern durchsucht. Wenn gefunden, wird der Datensatz automatisch in das erste leere Feld eingefügt.
musst Du noch näher erklären, was Du hier eigentlich machst, bzw. machen willst.
Zudem zeige die
gesamte Ereignis(?)-Prozedur und auch die "Schleifen" -Prozedur.
ZitatMe.Warenhaus_Unterform_frm.Form.Requery
Hallo,
ok hier die Schleife, für die Daten. Alles funktioniert soweit, außer das ich es nicht schaffe den Fokus nach dem requery auf dem eingefügten Datensatz zu setzen. Das wäre aber wichtig.
Private Sub Materialliste_txt_AfterUpdate()
If Me.Einlagern_btn = True Then
Dim lng As Long
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = CurrentDb
lng = Me![Warenhaus_Unterform_frm].Form!ID
Set rst = db.OpenRecordset("select * from Warenhaus_tbl", dbOpenDynaset)
If Not rst.EOF Then rst.MoveFirst
Do While Not rst.EOF
'Do Until rst.EOF
If IsNull(rst!Etage_1) Then
rst.Edit
rst!Etage_1 = Me.BatchNr_txt
rst.Update
Exit Do
End If
rst.MoveNext
Loop
Me.Painting = False
Me.Warenhaus_Unterform_frm.Requery
Me![Warenhaus_Unterform_frm].Form.Recordset.FindFirst "ID=" & lng
Me.Painting = True
rst.Close
Set rst = Nothing
Set db = Nothing
End If
End Sub
Danke für Euro Hilfe.
Hallo,
was willst Du dauernd mit "eingefügten Datensatz" ??
Die befüllst (editierst) ein Recordset-Feld und aktualisierst damit einen bestimmten DS. Wenn Du dann auf diesen bestimmten DS positionieren willst, dann muss Du die ID dieses DS heranziehen, nicht die ID vom im UFO angezeigten (markierten) DS.
Zitat.
.
.
If IsNull(rst!Etage_1) Then
rst.Edit
rst!Etage_1 = Me.BatchNr_txt
lng = rs!ID
rst.Update
.
.
.
Hallo,
Du sprichst hier von "eingefügtem Datensatz", da wird aber keiner eingefügt, da werden bestehende Datensätze geändert. Was viel einfacher mit einer Aktualisierungsabfrage (ohne Schleife) funktioniert.
Private Sub Materialliste_txt_AfterUpdate()
Dim lng As Long
If Me.Einlagern_btn = True Then
lng = Me![Warenhaus_Unterform_frm].Form!ID
CurrentDb.Execute "UPDATE Warenhaus_tbl SET Etage_1 = '" & Me.BatchNr_txt & "' WHERE Etage_1 Is Null", dbFailOnError
Me.Warenhaus_Unterform_frm.Requery
Me![Warenhaus_Unterform_frm].Form.Recordset.FindFirst "ID=" & lng
End If
End Sub
Hallo,
habe den Code entsprechend Tip von Access-Guru geändert und funktioniert. Super Danke dafür. Natürlich habt Ihr Recht, hier wird nichts eingefügt sonder geändert. Sorry mein Fehler.
Ich habe die Schleife gewählt, da hier mehrere Datenfelder geprüft werde sollen. Der hier dargestellte Code beinhaltet nur Etage_1 als Datenfeld, damit es nicht zu lang wird. Bei meiner Datenbank werden aber wie gesagt mehrere Felder geprüft und ich dachte eine Schleife passt da gut.
Schön das es Euch gibt.
Grüss Rene
Hallo,
ZitatIch habe die Schleife gewählt, da hier mehrere Datenfelder geprüft werde sollen.
Auch dann geht die Aktualisierungsabfrage und ist der Schleife vorzuziehen. Die Where Klausel muss nur entsprechend erweitert werden.
Hallo,
Ok ich denke darüber nach. Danke vorab.
Sag mal ich finde den Danke sagen Button bzw. den Thema gelöst Button nicht. Wo muss ich da suchen?
Grüsse
Rene