Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: derilzemer am Juli 11, 2017, 21:32:18

Titel: Pflichtfeld und Messagebox über Ereignis before Update
Beitrag von: derilzemer am Juli 11, 2017, 21:32:18
Hallo,
ich habe aktuell 10 Pflichtfelder. Die gehen fast alle was die Pflicht angeht :). Befüllt wird tblSpiele. Da habe ich dann bei den entsprechenden Feldern Eingabe erforderlich auf Ja umgestellt. Lediglich das Feld Kartenzahl funktioniert nicht. 8 der Felder sind Feldtyp Zahl, 2 Felder Feldtyp kurzer Text. Das Feld was nicht funktioniert ist ein Zahl Feldtyp. Die Einstellungen sind unter Allgemein identisch zu den anderen, wenn ich sie vergleiche. Kann mir jemand sagen oder einen Tipp geben, warum da keine Aufforderung zum befüllen des Feldes Kommt?
Weiterhin habe ich hier im Forum nachgelesen, wie man das Thema Messagebox mit dem Ereignis before Update regelt.
If IsNull(Me.cboIDVerlag) Or IsNull(Me.cboKartenFormat) Or IsNull(Me.cboKategorie) Or IsNull(Me.SpTitel) Or IsNull(Me.Kartenzahl) Or IsNull(Me.SpielNr) Then
        MsgBox "Pflichtfelder befüllen", vbCritical + vbOKOnly, "Nicht alle Pflichtfelder sind befüllt!"
            Me.cboIDVerlag.SetFocus
            Cancel = True
        End If

Da ich 10 Pflichtfelder habe ich das für alle in einer Routine abfangen wollen. Das geht auch, jedoch sieht das "schrecklich" aus wenn ich mir den VBA Teil anschaue. Dazu Frage 1, wie gestaltet man so etwas kürzer statt der 9 OR und wie mache ich einen Zeilenumbruch im Editor? Ich dachte der geht mit & _, aber falsch gedacht. Auch hierzu wäre ein tipp super.

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Me!LetzteAenderung = Date
       If IsNull(Me.cboIDVerlag) Or IsNull(Me.cboKartenFormat) Or IsNull(Me.cboKategorie) Or IsNull(Me.SpTitel) Or IsNull(Me.Kartenzahl) Or IsNull(Me.SpielNr) Or IsNull(Me.cboSprache) Or IsNull(Me.cboDrucktechnik) Or IsNull(Me.cboSchachtel) Or IsNull(Me.cboRSMotive) Then
         MsgBox "Es sind nicht alle Pflichtfelder befüllt!", vbCritical + vbOKOnly, "Pflichtfelder befüllen!"
            'Me.cboIDVerlag.SetFocus
            Cancel = True
        End If
End Sub


Gruß Andreas
Titel: Re: Pflichtfeld und Messagebox üver Ereignis before Update
Beitrag von: DF6GL am Juli 11, 2017, 22:12:44
Hallo,

ist es sicher, dass "Kartenzahl" der Name des Tabellelfeldes und der Name des daran gebundenen Form-Textfeldes ist?


Viel kürzer wird es nicht gehen, wenngleich es auch andere (Programmier-)Möglichkeiten gäbe.
Und nimm "!" statt "."

z. B.:

If IsNull(Me!cboIDVerlag) - IsNull(Me!cboKartenFormat) - IsNull(Me!cboKategorie) - IsNull(Me!SpTitel) - IsNull(Me!Kartenzahl) - IsNull(Me!SpielNr) < 0 Then

mit VBA-Editor-Zeilenumbruch:
If IsNull(Me!cboIDVerlag) _
- IsNull(Me!cboKartenFormat) _
- IsNull(Me!cboKategorie) _
- IsNull(Me!SpTitel) _
- IsNull(Me!Kartenzahl) _
- IsNull(Me!SpielNr) < 0 Then

Titel: Re: Pflichtfeld und Messagebox üver Ereignis before Update
Beitrag von: derilzemer am Juli 11, 2017, 22:47:56
Hi Franz,
Zitatist es sicher, dass "Kartenzahl" der Name des Tabellelfeldes und der Name des daran gebundenen Form-Textfeldes ist?
Ich habe das jetzt noch mal geprüft. In der Tat, in der Tabelle heißt es Kartenzahl Feldtyp Zahl und in der Form ist es txtKartenzahl. Nach der Änderung dieses Fehlers, meckert er trotzdem nicht, dass es ein Pflichtfeld ist :(. Wie kann ich das noch debuggen?
Private Sub Form_BeforeUpdate(Cancel As Integer)
    If IsNull(Me!cboIDVerlag) - IsNull(Me!cboKartenFormat) - IsNull(Me!cboKategorie) - IsNull(Me!txtSpTitel) - IsNull(Me!txtKartenzahl) _
    - IsNull(Me!txtSpielNr) - IsNull(Me!cboSprache) - IsNull(Me!cboDrucktechnik) - IsNull(Me!cboSchachtel) - IsNull(Me!cboRSMotive) < 0 Then
         MsgBox "Es sind nicht alle Pflichtfelder befüllt!", vbCritical + vbOKOnly, "Pflichtfelder befüllen!"
        'Me!cboIDVerlag.SetFocus
           Cancel = True
    End If
End Sub

Warum ist "!" eigentlich besser als "."?
Gruß Andreas
Titel: Re: Pflichtfeld und Messagebox üver Ereignis before Update
Beitrag von: Beaker s.a. am Juli 11, 2017, 23:35:16
Hallo Andreas,
Bist denn sicher, dass die "leeren" Felder auch NULL sind und nicht mit
einem Leerstring ("") gefüllt sind?

ZitatWarum ist "!" eigentlich besser als "."?
Das wird in allen einschlägigen Foren immer wieder äusserst kontrovers
diskutiert.
Ich umgehe das inzwischen indem ich alle Objekte per Index anspreche.
Das ist zwar eine Menge zusätzl. Schreibarbeit, und hat auch so seine
Nachteile (Kompiler meckert keine Schreibfehler an), aber für mich ist
mein Code dann leichter lesbar.

Forms("FormName")
Me.Controls("FeldName")
rs.Fields("FeldName")

gruss ekkehard
Titel: Re: Pflichtfeld und Messagebox üver Ereignis before Update
Beitrag von: DF6GL am Juli 12, 2017, 09:42:54
Hallo,

"!" vs ".":


Bei "." bezieht man sich auf die Eigenschaft des Forms , die aus dem Datenherkunfts-Feld generiert wurde.

Bei "!"  nimmt man die Abkürzung der oo-Schreibweise für ein Form-Steuerelement in Anspruch...


Wegen der Vermutung der unterschiedlichen Benennung des Textfeldes gegenüber des Tabellenfeldes hatte ich dies vorgeschlagen. (Sollte dann eine Fehlermeldung erscheinen).

Wenn es trotzdem nicht geht,  könnte in der Tabelle für dieses Feld  NULL nicht zugelassen sein oder im Textfeld steht von vornherein 0  drin.

Zudem würde ich das Form-Textfeld an den Namen des Tabellenfeldes anpassen. (Auch das ist unterschiedlich diskutiert, ich habe aber eher mehr Probleme erhalten, wenn unterschiedliche Benennung verwendet wird als wenn beide Felder gleich benannt werden.)
Titel: Re: Pflichtfeld und Messagebox üver Ereignis before Update
Beitrag von: derilzemer am Juli 12, 2017, 17:09:32
Hallo Franz,
danke für die Erklärung zwecks "!" vs "."
ZitatWenn es trotzdem nicht geht,  könnte in der Tabelle für dieses Feld  NULL nicht zugelassen sein oder im Textfeld steht von vornherein 0  drin.
:-[, da ist es doch schon mein Problem. Da steht eine 0 drin, ergo isses auch nicht leer, ich Dussel. Kaum macht man es dann richtig und schon geht es :(.
Gruß Andreas
Titel: Re: Pflichtfeld und Messagebox üver Ereignis before Update
Beitrag von: derilzemer am Juli 12, 2017, 17:11:34
Hi Ekkehard,
Zitat von: Beaker s.a. am Juli 11, 2017, 23:35:16
Bist denn sicher, dass die "leeren" Felder auch NULL sind und nicht mit
einem Leerstring ("") gefüllt sind?
Hast ja gesehen, was mein Problem war, mal wieder Layer 8, also mein eigenes Human Interface :(.
Danke aber fürs mitdenken.
Gruß Andreas