La verifica fatta con il VALIDATION RULE funziona correttamente.
Ti mostro l'esempio, ho fatto una Tabella chiamata T1 con 3 campi tutti Indicizzatri e Duplicati NON ammessi:
[ID] Numerico Indicizzato Duplicati Non ammessi
[Targa] Testo Indicizzato Duplicati Non ammessi
[Nome] Testo Indicizzato Duplicati Non ammessi
Nei 3 Controlli di maschera ho inserito:
ID(Valido se):DCount("*";"T1";"ID=" & [ID])<1
Targa(Valido Se):DCount("*";"T1";"Targa='" & [Targa] & "'")<1
Nome(Valido Se):DCount("*";"T1";"Nome='" & [Nome] & "'")<1
Gestendo Form ERROR, io ho questo codice che riciclo, viene generato errore 2107, nel mio caso ERR_DATAVALIDATION1:
Option Compare Database
Option Explicit
Private Const ERR_ONETOMANYCONFLICT = 3101
Private Const ERR_RELATEDRECORDS1 = 3200
Private Const ERR_RELATEDRECORDS2 = 3201
Private Const ERR_REQUIREDDATA = 3314
Private Const ERR_DUPLICATEKEY = 3022
Private Const ERR_NOCURRRECFOUND = 3021
Private Const ERR_DATATYPE = 2113
Private Const ERR_INPUTMASK = 2279
Private Const ERR_NULLKEY = 3058
Private Const ERR_NULLVALUE = 3162
Private Const ERR_ZEROLENGTHSTRING = 3315
Private Const ERR_DATAVALIDATION1 = 2107
Private Const ERR_DATAVALIDATION2 = 3317
Private Const ERR_ITEMNOTINLIST1 = 2237
Private Const ERR_ITEMNOTINLIST2 = 2473
Private Sub Form_Error(DataErr As Integer, Response As Integer)
Const NEXT_MSG = "See next message for details."
Select Case DataErr
Case Is = ERR_ITEMNOTINLIST1, ERR_ITEMNOTINLIST2
Response = acDataErrContinue
MsgBox "Seleziona solo valori nella lista."
ActiveControl.Undo
Case ERR_REQUIREDDATA
MsgBox "Required value missing!" & vbCr & _
NEXT_MSG, vbInformation, "WARNING"
Response = acDataErrDisplay
Case ERR_RELATEDRECORDS1, ERR_RELATEDRECORDS2
MsgBox "Relation conflict!" & vbCr & _
NEXT_MSG, vbInformation, "WARNING"
Response = acDataErrDisplay
Case ERR_NULLKEY, ERR_NULLVALUE, ERR_ZEROLENGTHSTRING
MsgBox "Field can not be empty.", vbInformation, "WARNING"
Response = acDataErrContinue
Case ERR_DUPLICATEKEY
MsgBox "The value is already in use to " & _
"create an unique record. Change the value.", vbInformation, "WARNING"
Response = acDataErrContinue
Case ERR_DATATYPE, ERR_INPUTMASK
MsgBox "The value has an incorrect data type" & vbCr & _
"(f.i. text value in a numeric field).", _
vbInformation, "WARNING"
Response = acDataErrContinue
ActiveControl.Undo
Case ERR_DATAVALIDATION1, ERR_DATAVALIDATION2
'Custom validation rules: show corresponding error message
MsgBox "Controllo DUPLICATO: " & Screen.ActiveControl.Name, vbInformation, "WARNING"
Response = acDataErrContinue
Case Else
'Display the default error message
Response = acDataErrDisplay
End Select
End Sub
Non mi pare una bruttissima soluzione...