dubbele waarden voorkomen over verschillende velden

  • Onderwerp starter Onderwerp starter musti
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

musti

Gebruiker
Lid geworden
26 feb 2006
Berichten
143
Ik wil graag dubbele waarden voorkomen over verschillende velden.
Bijv. als voornaam,achternaam en geboortedatum hetzelfde is moet er melding komen en mag het niet worden ingevoerd.
 
Als je van die combinatie van velden een sleutelveld maakt, zit je goed. Je krijgt dan bij dubbel invoeren een (weliswaar standaard Access) melding dat je verkeerde data invoert. Die melding kun je dan wel weer vervangen op een formulier door een eigen melding.
 
Als je van die combinatie van velden een sleutelveld maakt, zit je goed. Je krijgt dan bij dubbel invoeren een (weliswaar standaard Access) melding dat je verkeerde data invoert. Die melding kun je dan wel weer vervangen op een formulier door een eigen melding.
Ik wil het dus op een andere manier .is dat dan niet mogelijk
 
Het is wel mogelijk, maar de vraag is of je dat op tabelniveau wilt regelen, of op formulierniveau.
 
Het is wel mogelijk, maar de vraag is of je dat op tabelniveau wilt regelen, of op formulierniveau.
Waarom ik het anders wil is omdat de relaties al zijn gemaakt met andere tabellen. Graag wil ik het op tabelniveau als het niet kan dan maar op formulierniveau.
 
Ik heb er niet zo heel veel ervaring mee, maar dit heb ik uit de Help gehaald; misschien is het bruikbaar?

In het volgende voorbeeld wordt met de functie SetTableValidation validatie op recordniveau ingesteld om ervoor te zorgen dat de waarde in het veld EndDate een latere datum is dan de waarde in het veld StartDate.

Dim strTblName As String, strValidRule As String
Dim strValidText As String
Dim intX As Integer

strTblName = "Employees"
strValidRule = "EndDate > StartDate"
strValidText = "Enter an EndDate that is later than the StartDate."
intX = SetTableValidation(strTblName, strValidRule, strValidText)

Code:
Function SetTableValidation(strTblName As String, strValidRule As String, strValidText As String) As Integer
Dim dbs As Database, tdf As TableDef

    Set dbs = CurrentDb
    Set tdf = dbs.TableDefs(strTblName)
    tdf.ValidationRule = strValidRule
    tdf.ValidationText = strValidText

End Function
 
Ik heb er niet zo heel veel ervaring mee, maar dit heb ik uit de Help gehaald; misschien is het bruikbaar?

In het volgende voorbeeld wordt met de functie SetTableValidation validatie op recordniveau ingesteld om ervoor te zorgen dat de waarde in het veld EndDate een latere datum is dan de waarde in het veld StartDate.

Dim strTblName As String, strValidRule As String
Dim strValidText As String
Dim intX As Integer

strTblName = "Employees"
strValidRule = "EndDate > StartDate"
strValidText = "Enter an EndDate that is later than the StartDate."
intX = SetTableValidation(strTblName, strValidRule, strValidText)

Code:
Function SetTableValidation(strTblName As String, strValidRule As String, strValidText As String) As Integer
Dim dbs As Database, tdf As TableDef

    Set dbs = CurrentDb
    Set tdf = dbs.TableDefs(strTblName)
    tdf.ValidationRule = strValidRule
    tdf.ValidationText = strValidText

End Function

Waar precies moet ik het code plaatsen in visual basic
 
De functie kun je in elke module zetten, als je hem variabel wilt kunnen gebruiken. Om hem uit te testen kun je hem ook op een formulier gebruiken.
Het aangehaalde voorbeeld zou bijvoorbeeld bij de gebeurtenis <Bij laden> van een formulier kunnen worden aangeroepen; voordat een record wordt opgehaald, wordt dan eerst op de tabel het validatiecriterium ingesteld.
 
De functie kun je in elke module zetten, als je hem variabel wilt kunnen gebruiken. Om hem uit te testen kun je hem ook op een formulier gebruiken.
Het aangehaalde voorbeeld zou bijvoorbeeld bij de gebeurtenis <Bij laden> van een formulier kunnen worden aangeroepen; voordat een record wordt opgehaald, wordt dan eerst op de tabel het validatiecriterium ingesteld.

Wat moet ik bij "strValidRule" schrijven, zodat de velden voornaam,achternaam, geboortedatum niet 2 keer mag voorkomen.
 
De functie kun je in elke module zetten, als je hem variabel wilt kunnen gebruiken. Om hem uit te testen kun je hem ook op een formulier gebruiken.
Het aangehaalde voorbeeld zou bijvoorbeeld bij de gebeurtenis <Bij laden> van een formulier kunnen worden aangeroepen; voordat een record wordt opgehaald, wordt dan eerst op de tabel het validatiecriterium ingesteld.

Wat moet ik bij "strValidRule" schrijven, zodat de velden voornaam,achternaam, geboortedatum niet 2 keer mag voorkomen.

Bij voorbaat bedankt.
 
Tis een beetje stil rond dit antwoord.... Blijkbaar weet men het niet!
Ik zou de oplossing op het formulier inbouwen, en niet op tabel validatie doen.
Je kunt dan bijvoorbeel alle velden laten invullen, en vervolgens via VBA een SQL string laten maken die uit de betreffende tabel de gegevens (probeert) op te halen.
Dus zoiets:

Code:
strSQL="SELECT Voornaam,Achternaam, Geboortedatum FROM Tabel " 
strSQL=strSQL & "WHERE Voornaam = '" & Me.txtVoornaam & "' "
strSQL=strSQL & "AND Achternaam = '" & Me.txtAchternaam & "' "
strSQL=strSQL & "AND Geboortedatum = #" & cDate(Me.txtGeboortedatum) & "# "

With CurrentDB.OpenRecordset(strSQL)
     If .RecordCount >0 Then 
          MsgBox "Dit record bestaat al"
     Else
          'Hier het commando waarmee je het record opslaat
     End If
End With

Dit is een vrij grof voorbeeld, maar in grote lijnen zou dit moeten werken.
 
Tis een beetje stil rond dit antwoord.... Blijkbaar weet men het niet!
Ik zou de oplossing op het formulier inbouwen, en niet op tabel validatie doen.
Je kunt dan bijvoorbeel alle velden laten invullen, en vervolgens via VBA een SQL string laten maken die uit de betreffende tabel de gegevens (probeert) op te halen.
Dus zoiets:

Code:
strSQL="SELECT Voornaam,Achternaam, Geboortedatum FROM Tabel " 
strSQL=strSQL & "WHERE Voornaam = '" & Me.txtVoornaam & "' "
strSQL=strSQL & "AND Achternaam = '" & Me.txtAchternaam & "' "
strSQL=strSQL & "AND Geboortedatum = #" & cDate(Me.txtGeboortedatum) & "# "

With CurrentDB.OpenRecordset(strSQL)
     If .RecordCount >0 Then 
          MsgBox "Dit record bestaat al"
     Else
          'Hier het commando waarmee je het record opslaat
     End If
End With

Dit is een vrij grof voorbeeld, maar in grote lijnen zou dit moeten werken.

Hartstikke bedankt, het werkt!!
Echt dank voor alle hulp
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan