Access validatie tabeleigenschappen Gedoe met OR en/of XOR

Status
Niet open voor verdere reacties.

arnoderuig

Gebruiker
Lid geworden
8 sep 2000
Berichten
577
Ik wil ter beveiliging van in te voeren gegevens een tabeleigenschap valideren. Ik ben nu al enkele dagen aan het zoeken naar de juiste validatieregel. Ten einde raad de vraag maar hier gesteld.

In mijn database komen bij klantgegevens de volgende velden voor:
[KlantEmail] = normaal mailadres
[KlantOrderPerEmail] = ja/nee of orderbevestiging per mail mag worden gestuurd
[KlantOrderEmailAdresAfw] eventueel afwijkend mailadres voor een orderbevestiging
[KlantFactuurPerEmail] = ja/nee of factuur per mail mag worden gestuurd
[KlantFactuurEmailAdresAfw] eventueel afwijkend mailadres voor een factuur

De controle die moet plaatsvinden is dat minimaal:
a. indien een orderbevestiging per mail mag worden gestuurd moet KlantEmail of KlantOrderEmailAfw zijn gevuld met gegevens
b. indien een factuur per mail mag worden gestuurd moet minimaal KlantEmail of KlantOrderEmailAfw of KlantFactuurEmailAdresAfw zijn gevuld.
c. uitreraard mogen de velden [KlantOrderPerEmail] en [KlantfactuurPerEmail] leeg zijn

Ik heb nu de volgende validatieregel opgesteld die het bijna lijkt te doen:

([KlantOrderPerEmail] = false and [KlantfactuurPerEmail] = false)
OR
([KlantOrderPerEmail] = true and ([KlantEmail] <> null xor [KlantOrderEmailAdresAfw] <> null))
OR
([KlantfactuurPerEmail] = true and ([KlantEmail] <> null xor [KlantOrderEmailAdresAfw] <> null xor [KlantFactuurEmailAdresAfw] <> null))

Deze blijkt net niet helemaal goed te werken. De validatie blijkt bijvoorbeeld toe te staan dat een order per mail mag worden gestuurd doch dat geen normaal mailadres of orderemailadres bekend is. Dat is niet de bedoeling.

Kan iemand mij de weg wijzen?

Groet,
Arno.
 
Volgens mij ben je er met deze simpele check:

WHERE (([KlantOrderPerEmail]+[KlantfactuurPerEmail])<0 AND (Nz(Len([KlantEmail]),0) + Nz(Len([KlantOrderEmailAdresAfw]),0) + Nz(Len([KlantFactuurEmailAdresAfw]),0)))
 
Tenzij ik je voorbeeld foutief interpreteer begrijp ik hieruit dat er een check wordt gedaan dat alle velden dan zijn ingevuld. En dat is niet helemaal wat ik vroeg.
 
Ongeveer.... Maar wel degelijk een (soort van) oplossing voor wat je vroeg.

De controle die moet plaatsvinden is dat minimaal:
a. indien een orderbevestiging per mail mag worden gestuurd moet KlantEmail of KlantOrderEmailAfw zijn gevuld met gegevens
b. indien een factuur per mail mag worden gestuurd moet minimaal KlantEmail of KlantOrderEmailAfw of KlantFactuurEmailAdresAfw zijn gevuld.
c. uiteraard mogen de velden [KlantOrderPerEmail] en [KlantfactuurPerEmail] leeg zijn

Voorwaarde c snap ik overigens niet: als die twee leeg zijn, zou ik zeggen: niet mailen...

Wat ik dus zou doen, is inderdaad controleren of er op de juiste plaatsen iets is ingevuld. Zonder emailadres valt er niks te mailen, dus als de som > 0 dan heb je minstens één veld met een emailadres. Zelf zou ik nog een check doen op het @-teken, zodat je nog enige zekerheid hebt van een geldig email adres, maar dat is een andere vraag.
Om te controleren of er gemaild mag worden, tel je de waarden van de checkboxen bij elkaar op. Ja=-1 en Nee=0, dus elk getal <0 betekent dat je mag mailen.
De combinatie die je maakt kun je uiteraard nog groeperen, en met OR apart afchecken. Dat laat ik aan jou over...
 
Het punt is dat van veel wisselende situaties sprake is. Dat heeft de maken met de soort klanten die soms wel en soms niet namens andere partijen opdrachten verstrekt waarvan de factuur dan weer naar andere partijen moet. Het zal regelmatig voorkomen dat orders en facturen soms wel en soms niet per mail mogen worden verstuurd. Vandaar dat mijn opzet is geworden de e-mailadressen vast te leggen (en vast te houden) en met een vinkje aan te geven of al of niet per mail mag worden verzonden.

Met betrekking tot c:

In mijn opzet wil ik controleren dat bij verzending van een orderbevestiging per mail ook daadwerkelijk een e-mailadres voor handen is. Dat geldt ook voor de situatie bij het verzenden van een factuur. In beide gevallen moet ik dus testen dat EN de toestemming tot verzenden EN een e-mailadres voorhanden is. Zou ik mijn test daarbij laten dan loopt het volgens mij stuk op de situaties waarin geen verzending per mail zal plaatsvinden.

Ik hoop dat er toch nog een werkende oplossing zal komen. Ik blijf ook zelf nog wel even proberen. Lukt het me dan koppel ik dat uiteraard terug.
 
Dan nog klopt je redenering niet voor regel c: een Ja/Nee veld heeft de waarden 0 of -1, nooit Null. Tenzij je een Outer Join gebruikt in je facturenquery, dan kan Null wel voorkomen. Een Ja/Nee veld check je dus op Waar/Onwaar, Ja/Nee, 0 of -1. Leeg betekent in jouw geval dus wat?
 
Octafish,

Kijk, dat is nu meteen een hoop duidelijkheid. Misschien is dat dus wel de reden dat mijn opzet niet helemaal werkte. Ik ga dat natuurlijk uittesten.

Bedankt voor je reactie.

Groet,
Arno.
 
Dan nog klopt je redenering niet voor regel c: een Ja/Nee veld heeft de waarden 0 of -1, nooit Null. Tenzij je een Outer Join gebruikt in je facturenquery, dan kan Null wel voorkomen. Een Ja/Nee veld check je dus op Waar/Onwaar, Ja/Nee, 0 of -1. Leeg betekent in jouw geval dus wat?

Even ter aanvulling. In mijn vraagstelling onder c. had ik inderdaad gemeld dat ik testte op 'leeg'. In mijn uitwerking - zoals die daaronder staat - ben ik er echter wel op de juiste wijze mee omgegaan. In de testregel staat immers wel degelijk 'false'.
 
Heb ook niet gezegd dat je dat deed ;) Ik constateerde slechts dat de derde voorwaarde zoals je hem omschreef niet deugde. En je gaf in je vraag al aan dat je niet het gewenste resultaat had met je filtering. Wil hij al een beetje lukken?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan