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 ?
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.
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.
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.
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