Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Prüfung "Vor Aktualisierung"

Begonnen von dobby110, August 09, 2022, 12:10:02

⏪ vorheriges - nächstes ⏩

dobby110

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.

Beaker s.a.

Hast du den Wert von "chk" an der entscheidenden Stelle überprüft?
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

dobby110

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.


PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Beaker s.a.

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?
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

dobby110

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?