November 29, 2020, 00:15:01

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


gleicher Datensatz nach Requery

Begonnen von ReneB, September 07, 2020, 12:58:21

⏪ vorheriges - nächstes ⏩

ReneB

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

DF6GL

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.


Beaker s.a.

ZitatMe.Warenhaus_Unterform_frm.Form.Requery
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

ReneB

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.

DF6GL

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
.
.
.

MzKlMu

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
Gruß
Klaus

ReneB

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

MzKlMu

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.
Gruß
Klaus

ReneB

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