Beste mensen,
ik wil graag een veld checken om te voorkomen dat het dubbel bestaat.
Bestaande situatie :
In projecten heb ik het veld :
- No.
- Sortnr
- Jaar
- Sortjaar
Via object & prospects wordt er een project aangemaakt. Bv OBD06-1000
Dan krijgt No. in projecten als waarde bv PRJ06-0001
PRJ06-0001 verander ik in 2.001.06 . Als ik dit wijzig dan wordt de inhoud van de volgende velden:
Sortnr = 001 (voor volgnr) dit doet ik door copystr !
Jaar = 06
Sortjaar = 00106 (volgnr+jaar)
Stel dat ik een nieuwe project aanmaak en het zelfde toepas dan mag Sortjaar niet hetzelfde zijn.
We hadden nu 2.001.06 met Sortjaar 00106
Stel ik maak een nieuwe project aan = 5.001.06 , dan zou ik ook als Sortjaar 00106 krijgen. maar dit bestaat al bij een andere project.
Namelijk 2.001.06 <---> 5.001.06
Dus *.001.06 gedeelte mag niet zelfde zijn, anders is het dubbel.
Ik heb het zo opgelost dat ik dat gedeelte in 1 veld zet. Namelijk
Sortjaar. Maar het moet bij het aanmaken ook wel controleren op andere record of die gelijk is aan die records.
Kan iemand mij hierbij helpen ?
Akin
Comments
Voorbeeld:
CheckValues
Succes, en doe de groeten aan Arjan als die weer bij jullie komt.
IF "No." <> xRec."No." THEN BEGIN
JobSetup.GET;
NoSeriesMgt.TestManual(JobSetup."Job Nos.");
"No. Series" := '';
END;
//dit stukje onder is van mij !
Sortnr := COPYSTR("No.",3,3);
Jaartal := COPYSTR("No.",7,2);
Produkt := COPYSTR("No.",1,1);
Sortjaar := Sortnr + Jaartal
//Akin sorteren !
Elke keer word de inhoud van Sortjaar ingevuld. Maar die mag dus niet dubbel voorkomen.
Hoe moet ik dat laten checken dan ?? Het is geen primary key. IS een losse veld (code) dat bestaat uit de inhoud van andere 2 velden.
Rara hoe kan dit opgelost worden ? Het moet natuurlijk zo nadat er gewijzigd wordt dat het direct aangeeft dat het al bestaat, netals bij een primary key. als die dubbel is dan geeft het direct aan !
Akin
wat moet voor Value staan ??
je hebt mijn code gezien onder OnValidate...
daar zie je dat ik 3 velden splits.
Volgnr + sortnr mogen niet zelfde worden.
Netals bij Access NO duplicates ! dat zou wel sneller en makkelijker zijn.
De enige manier om te controleren of een waarde al bestaat in een veldcombinatie die niet in de primaire sleutel zit, is om een filter te zetten op die waarde en te kijken of je records kan vinden. Als je goed naar Mark's voorbeeld kijkt, zul je zien dat dit precies is wat hij voorstelt.
RIS Plus, LLC
IF "No." <> xRec."No." THEN BEGIN
JobSetup.GET;
NoSeriesMgt.TestManual(JobSetup."Job Nos.");
"No. Series" := '';
END;
Sortnr := COPYSTR("No.",3,3);
Jaartal := COPYSTR("No.",7,2);
Produkt := COPYSTR("No.",1,1);
Sortjaar := Sortnr + Jaartal ;
//Akin sorteren !
Job.SETRANGE(Sortjaar);
Job.SETFILTER(Sortjaar, '<>%1', Sortjaar);
IF NOT Job.ISEMPTY THEN
ERROR('Volgnr + Jaartal bestaat reeds !');
Ik krijg altijd de melding te zien. Ik snap niet hoe ik het aan moet passen.
Kan het wel eigenlijk op een veld gefilterd worden die pas wordt ingevuld ? Want ik wil dat Sortjaar gechecked wordt, terwijl dit ook bij het aanpassen ingevuld wordt. namelijk door sortnr + jaartal.
Hoe verder ??
Wat je nog moet toevoegen is een filter ongelijk aan dit record.
Dit is wat ik gebruikt heb en het werkt :
Dit geld alleen voor Delta Nederland, daarom dat er Companyname is gebruikt.
IF COMPANYNAME = 'Delta Nederland' THEN
Job.SETFILTER("No.", '<>%1', "No.");
Job.SETRANGE(Sortjaar,Sortjaar);
IF COMPANYNAME = 'Delta Nederland' THEN
IF NOT Job.ISEMPTY THEN
ERROR('Volgnr + Jaartal bestaat reeds !');
Thanks ! =D>