Mai 17, 2021, 14:50:35

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Dcount auf Formularebene // Leere Felder

Begonnen von Fredi009sg, März 02, 2021, 11:46:36

⏪ vorheriges - nächstes ⏩

Fredi009sg

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 ?

Beaker s.a.

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.
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard

Fredi009sg

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.

Fredi009sg

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