Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Fredi009sg am März 02, 2021, 11:46:36

Titel: Dcount auf Formularebene // Leere Felder
Beitrag von: Fredi009sg am März 02, 2021, 11:46:36
Hallo zusammen,

vielleicht kann mir einer kurz helfen. Ich habe mit Dcount eine VBA erstellt, die vor Speichern eines neuen Datensatzes prüft, ob die Kombination bereits in der Datenbank vorhanden ist.

If DCount("*", "Tabelle", _
              "[A]='" & Me!Kombinationsfeld798 & "'" & _
              "AND [B]='" & Me!Kombinationsfeld768 & "'" & _
              "AND [C]='" & Me!Kombinationsfeld1267 & "'" & _
              "AND [D]='" & Me!Kombinationsfeld1565 & "'" & _
              "AND [E]='" & Me!Kombinationsfeld1281 & "'" & _
              "AND [F]='" & Me!Kombinationsfeld1328 & "'") > 0 Then
        MsgBox "Der Datensatz für die Kombination:" & vbCrLf & vbCrLf & Me!Kombinationsfeld798 & " - " & Me!Kombinationsfeld768 & " - " & Me!Kombinationsfeld1267 & " - " & Me!Kombinationsfeld1565 & " - " & Me!Kombinationsfeld1281 & " - " & Me!Kombinationsfeld1328 & vbCrLf & vbCrLf & "ist bereits in der Datenbank vorhanden." & vbCrLf & vbCrLf & "Die Datensatz ID lautet: " & Ergebniswert, vbExclamation, "Datensatz bereits vorhanden !!!"
      Cancel = acDataErrContinue
      Me.Undo
    End If

Jetzt habe ich aber auch die Möglichkeit das eines der Felder leer bleiben kann. Das wird allerdings vom Code nicht erkannt. Was kann ich tun ?
Titel: Re: Dcount auf Formularebene // Leere Felder
Beitrag von: Beaker s.a. am März 02, 2021, 12:44:42
Hallo Fred,
Sehr suspekt  ;)
Als Erstes fällt auf, dass die gebundenen Spalten der Kombis vom
Typ "String" sind; - eher ungewöhnlich. "Gewöhnlich" sind dies
Zahlen (meist LongInteger) die einen Fremdschlüssel repräsentieren.

Zeige uns doch bitte ein Bild deines Datenmodells (Beziehungsfenster,
alle Felder sichtbar).

gruss ekkehard


P.S.: gewöhne dir an deine Steuerelemente mit sprechenden Namen zu
versehen. Das hilft nicht nur dir sondern auch bereitwilligen Helfern
das Problem leichter zu verstehen.
Titel: Re: Dcount auf Formularebene // Leere Felder
Beitrag von: ebs17 am März 02, 2021, 13:03:17
Leer heißt meist NULL. Ein Vergleich mit NULL wie auch immer kann nie True ergeben.

Was kann man tun? Jeweils den Zustand auf NULL extra prüfen.
Titel: Re: Dcount auf Formularebene // Leere Felder
Beitrag von: Fredi009sg am März 02, 2021, 14:30:09
Bilduploads sind leider im Firmennetz nicht gestattet.

Die Beziehungen haben meiner Meinung auch nichts mit der Frage zutun.  ::)

Die Tabelle wird über ein Formular mit Daten gefüllt. Bei der Eingabe kann es vorkommen das entsprechend Felder frei bleiben. Ich möchte nun bei einer erneuten Eingabe verhindern, dass der Datensatz doppelt generiert wird.

So wie ich es bis jetzt gelöst habe funktionert es, wenn alle Felder gefüllt sind. Die Kontrolle auf Duplikate funktionert aber leider nicht wenn z.B. aus 5 Feldern eines leer bleibt.
Titel: Re: Dcount auf Formularebene // Leere Felder
Beitrag von: Fredi009sg am März 02, 2021, 15:09:19
Vielleicht vom Ansatz her so ??
If DCount("*", "Tabelle", _
              "[A]='" & Me!Kombinationsfeld798 & "'" & _
              "OR [A]=Is Null" & Me!Kombinationsfeld798 & "Is Null" & _
              "AND [B]='" & Me!Kombinationsfeld768 & "'" & _
              "OR [B]=Is Null" & Me!Kombinationsfeld768 & "Is Null" & _
              "AND [C]='" & Me!Kombinationsfeld1267 & "'" & _
              "OR [C]=Is Null" & Me!Kombinationsfeld1267 & "Is Null" & _
              "AND [D]='" & Me!Kombinationsfeld1565 & "'" & _
              "OR [D]=Is Null" & Me!Kombinationsfeld1565 & "Is Null" & _
              "AND [E]='" & Me!Kombinationsfeld1281 & "'" & _
              "OR [E]=Is Null" & Me!Kombinationsfeld1281 & "Is Null" & _
              "AND [F]='" & Me!Kombinationsfeld1328 & "'" & _
              "OR [F]=Is Null" & Me!Kombinationsfeld1328 & "Is Null") > 0 Then
        MsgBox "Der Datensatz für die Kombination:" & vbCrLf & vbCrLf & Me!Kombinationsfeld798 & " - " & Me!Kombinationsfeld768 & " - " & Me!Kombinationsfeld1267 & " - " & Me!Kombinationsfeld1565 & " - " & Me!Kombinationsfeld1281 & " - " & Me!Kombinationsfeld1328 & vbCrLf & vbCrLf & "ist bereits in der Datenbank vorhanden." & vbCrLf & vbCrLf & "Die Datensatz ID lautet: " & Ergebniswert, vbExclamation, "Datensatz bereits vorhanden !!!"
      Cancel = acDataErrContinue
      Me.Undo