collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 71
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 1

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13947
  • stats Beiträge insgesamt: 66280
  • stats Themen insgesamt: 8934
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Formular im Hintergrund wird bei Forms(...).Requery nicht aktualisiert  (Gelesen 159 mal)

Offline trebuh

  • Access-Profi
  • **
  • Beiträge: 175
Hallo,

Frage zu folgendem Fall.

Ich habe ein Endlosformular mit Kunden (Kundenübersichtsformular)
Öffne ich jetzt das Kundenformular und nehme Änderungen vor, habe ich im Schließen-Button (cmd_schliessen) ein Me.Requery und ein Forms("frmKundenuebersicht").Requery.

Jedoch wird mir das Kundenübersichtsformular nicht aktualisiert.

Hier mal der ganze Code:
Private Sub cmdschliessen_Click()

10       On Error GoTo cmdschliessen_Click_Error

        Dim lng_ID As Long
        Dim frm As Form
        Dim rec As Recordset

20        If Me.Dirty = True Then Me.Requery
       
30    If Not IsNull(Me!Adress_id) Then

40        If IsNull(Me!txtAdress_Nachname) Then
50            Call MsgBox("Geben Sie einen Nachnamen ein!", vbInformation, "Hinweis!")
60            Me!txtAdress_Nachname.SetFocus
70        Else
80            DoCmd.RunCommand acCmdSaveRecord

90            Me.cmdKunde_loeschen.Enabled = True
100         lng_ID = Me.Adress_id
110        DoCmd.Close acForm, "frmKundenerfassung"
120         Forms("frmKundenuebersicht").Requery

130     Set frm = Forms("frmKundenuebersicht")
140     Set rec = frm.RecordsetClone
         
150     With rec
160         .FindFirst "Adress_id=" & lng_ID
170         If Not .NoMatch Then
180             frm.Bookmark = rec.Bookmark
190     End If
200       End With
         
210       Set rec = Nothing
220       Set frm = Nothing

230       End If
240   End If
           


250      On Error GoTo 0
260      Exit Sub

cmdschliessen_Click_Error:

270       MsgBox "Error " & Err.Number & " in Zeile " & Erl & " (" & Err.Description & ") in procedure cmdschliessen_Click of VBA Dokument Form_frmKundenerfassung"
End Sub


In einem anderen Formular hatte ich das gleiche Problem.
Dabei fiel mir auf, das wenn ich das Me.Requery und das Forms(...).Requery in einem Private Sub habe, das Forms(...).Requery scheinbar nicht funktioniert.

Führe ich beispielsweise das Me.Requery vor dem Klick auf den Schließen-Button aus, dann funktioniert es
mit dem Forms (...).Requery.

Wie geht man in so einem Fall am besten vor?
Habe auch schon probiert, das Forms(...).Requery bei Private Sub Form_Close()einzubauen.
Das bringt aber leider auch nichts.

Gruß
Hubert



 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23305
Hallo,

setz mal das Docmd.Close ...

an Zeile 225

Offline trebuh

  • Access-Profi
  • **
  • Beiträge: 175
Hallo Franz,

danke für den Tipp.
Das war die Lösung. :)

Da muss man auch erst drauf kommen. :D

Ist es von daher ratsam, den Befehl für das Formular schließen (bei größerem Code) grundsätzlich ans Ende zu stellen?

Gruß
Hubert
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23305
Hallo,

naja, offensichtlich ...  ;)

Wenn Du den Wasserhahn  (Formular) zudrehst , dann läuft  auch kein Wasser (Code)  mehr . 8)

Offline trebuh

  • Access-Profi
  • **
  • Beiträge: 175
Hallo Franz,

Zitat
Wenn Du den Wasserhahn  (Formular) zudrehst , dann läuft  auch kein Wasser (Code)  mehr .

 :D Ja, so gesehen logisch.

Ich bin davon ausgegangen, das der aufgerufene Code komplett abgearbeitet wird.
Man lernt ja bekannlich nie aus.  ;)
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1223
Ich finde, dass die Zeilennummern die Übersicht des Codes vollkommen zu nichte machen. Als Endanwender würde mich auch eine MsgBox nach dem Schema der MZ-Tools eher irritieren als informieren. Wenn Du entsprechende Formularereignisse nutzt, kann der Code IMHO besser gegliedert werden, und die Programmierlogik fällt einfacher aus.Private Sub cmdSchliessen_Click()

10       On Error GoTo cmdschliessen_Click_Error

20       If Me.Dirty Then Me.Dirty = False  'Hierbei kann Fehler#: 2501 auftreten

30       DoCmd.Close acForm, Me.Name, acSaveNo
40       Exit Sub

cmdschliessen_Click_Error:
50       Select Case Err.Number
         Case 2501: 'entsprechende Meldung ist schon erfolgt
60       Case Else: MsgBox "Error " & Err.Number & " in Zeile " & Erl & _
                           " (" & Err.Description & ") in Sub cmdSchliessen_Click " & _
                           "im VBA Dokument Form_frmKundenerfassung"
70       End Select
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
   If IsNull(Me.txtAdress_Nachname) Then
      MsgBox "Geben Sie einen Nachnamen ein!", vbInformation, "Hinweis!"
      Me.txtAdress_Nachname.SetFocus
      Cancel = True 'löst Fehler#: 2501 in der aufrufenden Methode aus
   End If
End Sub

Private Sub Form_Unload(Cancel As Integer)

   Const FORM_KUNDENUEBERSICHT As String = "frmKundenuebersicht"

   Dim frm As Access.Form
   Dim rec As DAO.Recordset

   If CurrentProject.AllForms(FORM_KUNDENUEBERSICHT).IsLoaded Then
      If Not IsNull(Me.Adress_id) Then
         Set frm = Forms(FORM_KUNDENUEBERSICHT)
         Set rec = frm.RecordsetClone
         rec.FindFirst BuildCriteria("Adress_id", dbLong, Me.Adress_id)
         If Not rec.NoMatch Then frm.Bookmark = rec.Bookmark
      End If
   End If
End Sub
Grüße von der (⌒▽⌒)
 

Offline trebuh

  • Access-Profi
  • **
  • Beiträge: 175
Hallo Lachtaube,

da hast Du recht. :D
Da sieht man den Unterschied vom Laien zum Profi  ;).

Es gibt sicherlich sogar unter den Profis unterschiede in der Programmiertechnik.
(Sozusagen die persönliche Handschrift des Programmierers).

Grüßle
Hubert