Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: dobby110 am August 09, 2022, 12:10:02

Titel: Prüfung "Vor Aktualisierung"
Beitrag von: dobby110 am August 09, 2022, 12:10:02
Hallo zusammen,

ich habe in einem Formular eine kleine Kontrolle "vor Aktualisierung" eingebaut.
D.h. wenn der Wert in dem Feld auf Aktiv gestellt wird, läuft eine Prüfroutine ab, ob bestimmte Felder befüllt wurden.

Soweit funktioniert das auch wie gewünscht.
Der Wert bleibt in dem Feld aber trotzdem auf Aktiv stehen.
Das ist ja eigentlich nicht Sinn und Zweck der Sache, wenn ich eine Prüfroutine "vor Aktualisierung" durchführe.

Anbei ein Teil des Codes. Was ist daran falsch?

Private Sub txt_Kombi_Status_BeforeUpdate(Cancel As Integer)
  Dim chk As Boolean
  chk = False
 
  msg_text = "Folgende Felder müssen noch befüllt werden, um den Vorgang abzuschließen: "
 
  If txt_Kombi_Status = "1. Aktiv" Then
     
      SQL = "select a.txt_in_Diamos_gebucht_als, a.txt_Stückelieferung_über_CBL from tbl_Investments a " & _
      "inner join tbl_Kombi_Inv_in_Fonds b on a.txt_ISIN_Investment = b.txt_ISIN_Investment " & _
      "where b.ID_Kombi_ID = " & Forms!fml_Investments_Dokumente_VEP.Form.ID_Kombi_ID

      If IsNull(CurrentDb.OpenRecordset(SQL)(0)) = True Then
      msg_text = msg_text & vbCr & vbCr & "- " & "'in Diamos gebucht als' in Checkliste Stammdaten"
      chk = True
      End If

      If chk = True Then
      MsgBox msg_text, vbInformation, "Es wurden noch nicht alle Felder befüllt"
      Cancel = True
      End If
  End If
End Sub


Bisher bin ich davon ausgegangen, dass mit dem Befehl

  Cancel = True

der Vorgang abgebrochen wird? Tut es aber nicht.
Titel: Re: Prüfung "Vor Aktualisierung"
Beitrag von: Beaker s.a. am August 09, 2022, 12:41:19
Hast du den Wert von "chk" an der entscheidenden Stelle überprüft?
Titel: Re: Prüfung "Vor Aktualisierung"
Beitrag von: dobby110 am August 09, 2022, 12:49:56
ja, die MessageBox poppt an der Stelle wie gewünscht auf.

      If chk = True Then
      MsgBox msg_text, vbInformation, "Es wurden noch nicht alle Felder befüllt"
      Cancel = True
      End If

Das Feld mit dem Status kann ich anschließend aber nur über die ESC-Taste verlassen. Sonst poppt der Fehler ununterbrochen auf.

Titel: Re: Prüfung "Vor Aktualisierung"
Beitrag von: PhilS am August 09, 2022, 13:02:32
Zitat von: dobby110 am August 09, 2022, 12:10:02Der Wert bleibt in dem Feld aber trotzdem auf Aktiv stehen.
Das ist ja eigentlich nicht Sinn und Zweck der Sache, wenn ich eine Prüfroutine "vor Aktualisierung" durchführe.

Anbei ein Teil des Codes. Was ist daran falsch?
Soweit ich sehe nichts. Ich denke, du hast da eine falsche Erwartung.

Wenn in BeforeUpdate Cancel=True gesetzt wird, wird das Feld nicht aktualisiert und behält weiterhin den Fokus. Sonst passiert nichts. Was soll auch sonst automatisch passieren? Das musst du schon explizit festlegen.
Titel: Re: Prüfung "Vor Aktualisierung"
Beitrag von: Beaker s.a. am August 09, 2022, 13:14:45
ZitatDas musst du schon explizit festlegen.
Jau, das war der entscheidende Hinweis
If chk = True Then
      MsgBox msg_text, vbInformation, "Es wurden noch nicht alle Felder befüllt"
      Cancel = True
      Me.txt_Kombi_Status.Undo
      End If

B.t.w., warum hat der Status keine ID?
Titel: Re: Prüfung "Vor Aktualisierung"
Beitrag von: dobby110 am August 09, 2022, 14:58:28
Super ! Vielen Dank ! Genau das war die Lösung.

Da war meine Erwartungshaltung tatsächlich eine andere. ;-)

Der Status hat keine ID. Hierfür habe ich "nur" ein Nachschlagefeld eingefügt.
Es soll lediglich eine Unterscheidung zwischen "in Prüfung", "Aktiv" und "Inaktiv" geben.
Das erfüllt die Anforderungen.

Welchen Mehrwert hätte eine ID?