Checken of invoer al bekend is

Status
Niet open voor verdere reacties.

galletje

Gebruiker
Lid geworden
8 jun 2010
Berichten
70
beste Forum gebruikers,

Na het afzoeken van het forum ben ik het nog niet tegengekomen vandaar mijn vraag. Waarschijnlijk is het erg simpel maar ik kom er als newbie niet uit.

Ben bezig om een Database te maken waarin we medewerkers invoeren. Graag zouden we we controleren bij het invoeren of de voornaam en achternaam in combinatie al bekend is in de tabel. Als het niet bekend is dan gevraagd word om het toe te voegen via een formulier wat we gebruiken om medewerkers toe te voegen.

Is dit mogelijk in Access?

Bijlage de database voorbeeld.

Thanks JohnBekijk bijlage Test versie.rar
 
Controle op bestaande personen is, zeker in een grote tabel, een belangrijke zaak en tamelijk lastig. Je bent namelijk behoorlijk afhankelijk van de 'zuiverheid' van werken van de gebruikers. Zelf heb ik het nog niet meegemaakt dat het proces foutloos loopt. Een van de redenen is dat de check überhaupt niet wordt uitgevoerd, en de persoon dus gelijk dubbel wordt aangemaakt. Een tweede is dat de check wordt gedaan op een naam die anders is gespeld. En dan gaat het meestal ook fout. Derde valkuil is dat de naam al bestaat, maar dat het wel degelijk een andere persoon is. Berucht voorbeeld: studenten die zich tegelijkertijd op dezelfde universiteit inschrijven en waarbij de naam dubbel is, de voorletters dubbel zijn, de geboortedatum hetzelfde is en het adres ook. Blijkt het in dit geval om een tweeling te gaan waarbij de ouders qua naam niet helemaal lang genoeg hebben nagedacht...

Maar goed, het uitvoeren van een controle is dus een goede zaak om te doen. De makkelijkste manier vind ik om een formulier te maken waarin je eerst de naam opzoekt m.b.v. een keuzelijst, waarin je zoveel mogelijk referentiegegevens laat zien, zoals Naam, Voorletters, Voornamen, Geboortedaum, Adres en Woonplaats. Zo'n keuzelijst maak je dan doorzoekbaar op naam. En wil je meer zoekingangen, dan kopieer je de keuzelijst en zet je andere velden vooraan. Hoe dan ook: met zo'n keuzelijst zie je snel genoeg of de persoon bestaat of niet. En dan komt het leuke: als de persoon bestaat kun je het Meewerkers formulier openen met de gekozen medewerker, en als de persoon die je intypt niet gevonden wordt (en dus niet bestaat) dan maak je een kprocedrue op de gebeurtenis <Bij niet in lijst> die het formulier opent in Toevoegmodus, waarbij je de getypte naam gelijk in het naamvak laat zetten (want dat is immers ingetypt en niet gevonden).

Wil je toch met een tekstvak werken, dan wordt het een stuk lastiger, omdat je dan 'fuzzy' moet gaan zoeken. Je moet dan namelijk bepalen hoe groot de waarschijnlijkheid is dat de ingetypte naam niet bestaat. Is 'John VanderAerden' dezelfde persoon als 'John Vander Aerden'? Da's op voorhand niet te zeggen. Zeker is wel dat als je één van de twee teksten ingeeft als zoekstring, je geen record terugkrijgt, en dus geneigd zou zijn om te denken dat het om een nieuwe naam gaat. Met een fuzzy zoekactie vind je de twee namen wél als mogelijk identiek. Zo'n fuzzy zoeklogic is lastig te programmeren, maar dat hoef je gelukkig niet zelf te doen; een voorbeeldje staat hier.
Overigens raad ik je aan om zo snel mogelijk met macro's te stoppen, en met dezelfde snelheid in VBA te gaan programmeren. Want de echt leuke dingen kan je toch niet in een macro, dus alle leertijd die je in macro's steekt is wat mij betreft redelijk verloren tijd, en kun je beter steken in het leren van VBA.
 
Re invoer controle

Beste octaFish

Thanks voor je uitleg, ben ermee bezig gegaan en heb de formulier en de selectielijsten gemaakt en verschillende opties hierin gemaakt. Zodat men kan selecteren op meerdere gelijkenissen.
Heb ook de functie (not in list) in een eerder bericht van jou hierop de forum gevonden en deze toegepast hierop. Echter werkt deze op 1 of ander manier niet.

Als de de ingevoerde data niet bekend is dan gaat hij gewoon verder bij naar de tweede invoer vak, ipv de vraag te stellen wil je hem toevoegen en het formulier te openen en de niet de bekende data toe te voegen.

Zie mij bijlage, waar gaat het fout?

Thanks john
 

Bijlagen

  • Test versie v2.rar
    60,1 KB · Weergaven: 13
Eerst even wat algemene tips, zodat je wat slimmer verder kunt bouwen. De manier waarop je formulieren sluit is niet echt handig. Je kunt, i.p.v. de echte naam, beter de object naam gebruiken. Dus i.p.v. DoCmd.Close acForm, "frm_medewerkersmenu" gebruik je: DoCmd.Close acForm, Me.Form.Name
En opties als acSaveNo en acSaveYes zijn nutteloos, want die gebruik je alleen als je een formulier met VBA aanpast. En die aanpassingen dan al dan niet wilt bewaren. Jij denkt waarschijnlijk dat je de gegevens bewaart. Maar daarmee ben je bij het sluiten van het formulier al te laat; een formulier werkt op een tabel, en zodra je doorbladert of het formulier sluit, wordt het record gelijk bewaard. De opties hebben dus geen enkele invloed. Laat ze dus weg.
 
En hier de oplossing voor je NotInList vraag. In essentie zaten er een paar grote en een paar kleine fouten in. Grootste fout: je roept het verkeerde formulier aan. Dat gaat natuurlijk niet lukken dan. Tweede, die wel veel kleiner is maar hetzelfde effect heeft: je hebt de keuzelijst hernoemd nadat je de code had toegevoegd. Resultaat: de code blijft gewoon staan, maar verwijst nu naar een niet-bestaand object. En de 'nieuwe' keuzelijst bestaat, maar heeft geen code. Dus het verplaatsen van de code lost dat probleem op.
Verder is de check die je doet op het resultaat niet goed, en je neemt de ingevulde waarde niet over op het tweede formulier. Je neemt hem wel mee met de OpenArgs variabele, maar je doet er verder niks mee. Op het formulier <frm_Medewerkers> moet je de OpenArgs wel weer uitlezen. In de bijlage een werkende versie.
 

Bijlagen

  • Test versie v3.rar
    47,2 KB · Weergaven: 52
OctaFish,

Thanks ik ga eens kijken naar de aanpassingen en daar van leren waar ik de fouten heb gemaakt.

Greetings

John
 
OctaFish,

Nog 2 vragen, stel dat de naam wel bekend is en ik die selecteer in de keuze menu, welke gebeurtenis laat ik dan draaien om het formulier te openen van deze medewerker. En als de achternaam wel bekend is maar de voornaam anders is dan voeg hij hem niet meer toe, ik neem aan dat ik dan een scheidingsteken moet toevoegen in de selectiebox, zodat achternaam en voornam gescheiden worden.

Thanks
 
Laatst bewerkt:
Je keuzelijst laat nu alleen de achternaam zien, en op basis daarvan wordt de NotInList afgevuurd. Je loopt dus tegen het probleem aan dat een bestaande achternaam niet meer triggert. Je zou dat kunnen oplossen door een samengesteld veld te maken waarop je selecteert. Dus een veld met de formule Naam: [Achternaam] & ", " & [Voornaam]. Deze kijkt dan of de complete naam in het format bestaat of niet. En daar kom je dan gauw genoeg achter want dat triggert het formulier. Enige aanpassing die je dan nog moet doen is het scheiden van de twee namen zodat ze correct in Achternaam en Voornaam worden ingevuld. Want je levert nu ook meer informatie mee met het formulier. Dat kan met een SPLIT opdracht.
De eerste vraag is simpel: maak een extra knop die het formulier opent met de waarde uit de keuzelijst als filter. Kun je met de wizard doen.
 
Beste Octafish,

Bedankt voor je reactie. Ik heb een aantal pogingen geprobeerd om het Simpele filter in de wizard te maken maar wat ik ook probeer, ik blijf altijd de eerste invoer krijgen ipv de geselecteerde.
Samengesteld veld maken daar kom ik helemaal niet uit als Newbie. Kan jij mijn in de richting wijzen waar ik informatie kan vinden over deze onderwerpen.

Wil niet telkens tot overlast zijn met voor jou simpele vragen.

Thanks

John
 
Hoe heb je de knop gemaakt dan? Als ik de wizard start, en kies voor Formulier openen, dan krijg ik de vraag of ik alle records wil zien of een specifiek record. Je kiest dan voor de eerste optie, en gebruikt dan de keuzelijst <Naam> als filter. Die koppel je aan het veld ID van je formulier, want dat is het koppelveld. En dan opent het formulier keurig met de gekozen persoon. Simpel genoeg :).
De tweede optie zal ik morgen uitwerken en posten. Kan mij voorstellen dat je daar zelf niet uitkomt.
 
Re invoer bekend

Beste OctaFish

Thanks daar zat inderdaad de fout, ik koppelde hem niet aan het ID maar Naam --> Achternaam. Vandaar dat hij het niet deed dus.

Eerste probleem nu opgelost en weer stap verder, ook maar even wat cursussen van je gedownload, daaruit haal ik nog veel meer informatie. Toppie

Ik zie graag de oplossing van het andere probleem tegemoet, kan ik daar eens van leren weer.

John
 
Laatst bewerkt:
Re invoer check

Beste Octafish,

Ik heb jou uitleg gebruikt in de bijgevoegde database. Alles werkt alleen moet ik nog de aanpassing verwerken waar jij nog wat aan zou sleutelen.

In de bijgevoegde database kan ik Medewerkers invoeren, bedrijven enz. Echter kan 1 medewerker maar 1 keer voorkomen in de tbl medewerkers(BSN Nummer), maar deze medewerker kan wel op verschillende projecten werkzaam zijn.
Als ik nu de werknemer aanpas verdwijnt hij bij het eerste project en komt hij bij het tweede project.(tbl projecten).

Hoe kan ik dit het beste aanpakken, dat de medewerkers altijd zichtbaar zijn bij de projecten die zij ooit hebben bezocht.

Ik heb het geprobeerd met relatie's, net zoals ik dat met de andere tabellen heb gedaan.

greetings vanuit Rdam

John
 

Bijlagen

  • MBS Database V1.1.part01.rar
    99 KB · Weergaven: 13
  • MBS Database V1.1.part02.rar
    99 KB · Weergaven: 11
  • MBS Database V1.1.part03.rar
    18,5 KB · Weergaven: 13
Beste octaFish,

Is het nog gelukt met het uitwerken van de eerder genoemde script.

Thanks

John
 
't is allemaal vrijwilligerswerk hè. Soms wil je ook quality time in jezelf steken :D
 
Re

Yep dat ken ik ook. Was er mooi weer voor tot zondag quality time me tuin gedaan.
Ik hoor het wel wanneer je er tijd voor hebt gehad.

John
 
Laatst bewerkt:
Echter kan 1 medewerker maar 1 keer voorkomen in de tbl medewerkers(BSN Nummer), maar deze medewerker kan wel op verschillende projecten werkzaam zijn.
Als ik nu de werknemer aanpas verdwijnt hij bij het eerste project en komt hij bij het tweede project.(tbl projecten).
Je geeft aan dat een werknemer op verschillende projecten tegelijk (?) werkzaam kan zijn. De inrichting in je db is daar niet op gebouwd, want je hebt in de tabel [Werknemers] een veld [Project Naam] opgenomen dat is gekoppeld aan de tabel [Projecten] (inderdaad, op het veld [Projectnaam] wat een ongelukkige keuze is). Hiermee leg je vast dat één werknemer maar op één project kan werken.

Maar dat wil je dus duidelijk niet, want je wilt sowieso dat een medewerker op verschillende projecten kan worden ingezet. Lijkt me ook logisch, want je blijft anders mensen wegsturen :).
De oplossing ligt eigenlijk in de juiste beschrijving van het probleem: meerdere werknemers moeten op meerdere projecten worden ingezet. En niet: een medewerker mag maar op één project worden ingezet, zoals het nu is ingericht. Het helpt altijd bij het ontwerpen van een database om eerst een functioneel ontwerp te maken, waarin je de gewenste functionaliteit van een database goed beschrijft. Dan had je namelijk kunnen afleiden hoe je het moet inrichten :).

Je hebt dus een extra tabel nodig ([Medewerker_Projecten]) waarin je in ieder geval een MedewerkerID vastlegt (gebruik bij voorkeur beschrijvende namen; een veld ID als naam is erg onhandig, zeker als je die in meerdere tabellen gebruikt) en een ProjectID (Ja, ID en niet projectnaam). Daarnaast zou je ook een begin- en einddatum van het project kunnen opnemen en nog zo wat van velden die project gerelateerd zijn voor een medewerker. Wellicht een uurtarief, als dat per project en medewerker kan verschillen.

De tabel [Medewerker] koppel je dan aan [Medewerker_Projecten] op basis van MedewerkerID, en de tabel [Projecten] koppel je aan [Medewerker_Projecten] op basis van ProjectID. En op die manier heb je de veel-veel relatie gelegd tussen Medewerkers en Projecten. Is ook een mooi moment dus om het sleutelveld in [Projecten] aan te passen :)
 
Re invoer check

Beste Octafish

Bedankt voor je duidelijke uitleg. Als eerst misschien handig dat ik uitleg wat ik probeer te bereiken.


Verschillende klanten kunnen medewerkers aanmelden voor projecten.(dit door middel van het invullen van een formulier[Tbl_medewerkers] Via de sendobject word deze als rapport verstuurd naar mij)
De verschillende projecten worden aangemaakt door mij[tbl_projecten] net als de overige opties zoals ID Type, Beroepen enz. Het gehele systeem gaat draaien op een sharepointserver(reeds getest) zodat verschillende bedrijven tegelijk kunnen benaderen.(back-end en Front-end principe) Na het invoeren van de medewerkers moeten ze gekoppeld worden aan de juiste projecten waar ze kunnen worden ingezet. Ergens moet er dus worden aangegeven waar ze gaan worden ingezet.



Het toevoegen van een extra Tabel had ik inderdaad al eens eerder geprobeerd maar liep ik op vast. Ik heb nu jou gegeven advies uitgevoerd en de relaties en ID's aangepast.(zie printscreen) De relaties worden nu ook in de verschillende tabellen weergegeven. Ik zie in [tbl_projecten] nu de plusteken verschijnen met daaronder de velden van het nieuw toegevoegde tabel[medewerker_projecten] en hetzelfde zie ik in het tabel[tbl_medewerkers] Zover gaat het goed!!!

Waar ik nu mee zit is, Er komt geen data in mijn nieuwe toegevoegde [tbl_medewerker_projecten] Deze zal ik waarschijnlijk handmatig moeten toevoegen in een formulier. Moet ik al deze velden dan doormiddel van een keuzelijsten met invoervak opzoeken en dan laten wegschrijven in het juiste veld in [tbl_medewerkersprojecten] Dit zou inhouden dat ik dan eigenlijk alle informatie van de medewerkers voor een tweede keer zou moeten invoeren/selecteren en dan staat deze data dan dubbel in de database.(Namelijk in tbl_medewerkers en in tbl_medewerkers_projecten)

Kopie van database in rar formaat bijgevoegd.

Ik heb even ter verduidelijking printscreens van de tabel bijgevoegd.


Grt John
 

Bijlagen

  • printscreen.jpg
    printscreen.jpg
    86,3 KB · Weergaven: 48
  • Nieuwe tabel.jpg
    Nieuwe tabel.jpg
    60,5 KB · Weergaven: 35
  • tabel medewerkers.jpg
    tabel medewerkers.jpg
    77,3 KB · Weergaven: 50
  • tabel projecten.jpg
    tabel projecten.jpg
    82 KB · Weergaven: 42
  • Test versie v3.part01.rar
    100 KB · Weergaven: 25
  • Test versie v3.part02.rar
    100 KB · Weergaven: 16
  • Test versie v3.part03.rar
    30,6 KB · Weergaven: 14
Laatst bewerkt:
Je tabel [Medewerker_Projecten] is prima; zo had ik 'm zelf ook gemaakt vanmiddag. De koppelingen werken ook prima, had je al geconstateerd. De koppeling tussen [Medewerkers] en [Bedrijven]/[Uitvoerders] zou je ook middels het ID veld moeten doen, en niet via de naamvelden. In die twee tabellen gebruik je dus de verkeerde sleutels, en daarmee automatisch ook de verkeerde koppelvelden in [Medewerkers]; dat moeten dus numerieke velden zijn. Zou ik zeker nog aanpassen.

De tabel [Medewerkers_Projecten] moet uiteraard gevuld worden meer eerder ingevoerde medewerkers en projecten maar dat is een normale gang van zaken. Je voert ook helemaal geen dubbele gegevens in, want elke medewerker staat met al zijn data maar één keer in Medewerkers, en hetzelfde geldt voor de projecten. Je werkt zo te zien in de tabellen zelf, en dat moet je zeker niet doen. Maak als alle tabellen (heel belangrijk, want anders blijf je dubbel werk doen) gemaakt zijn en werken dus formulieren voor zowel Projecten als Medewerkers, en zet daar de tabel [Medewerkers_Projecten] op. Access maakt automatisch een koppeling, en op Medewerkers maak je dan van ProjectID een keuzelijst (gekoppeld aan Projecten) en op Projecten maak je voor MedewerkerID een keuzelijst (uiteraard gekoppeld aan Medewerkers). Nu kun je op het formulier Medewerkers snel zien wie op welk project zit, en je kunt makkelijk nieuwe projecten toevoegen. En omgekeerd geldt hetzelfde voor Projecten: daar kun je nu heel makkelijk medewerkers aan hangen.
Uiteraard maak je voor Medewerkers/Projecten ook een mooi formulier, met 2 keuzelijsten voor ProjectID en MedewerkID. Kun je alle kanten op :).
 
Michel,,

Thanks heb het eerste gedeelte uitgevoerd en werkt. Heb wel formulieren voor alle tabellen maar had ik vanwege de ruimte niet mee gestuurd.
Echter het tweede gedeelte ook uitgevoerd, en nu werkt het geheel niet meer. Kan je misschien een opzet maken wat je bedoeld met onderstaande gedeelte.

Formulieren voor zowel Projecten als Medewerkers, en zet daar de tabel [Medewerkers_Projecten] op. Access maakt automatisch een koppeling, en op Medewerkers maak je dan van ProjectID een keuzelijst (gekoppeld aan Projecten) en op Projecten maak je voor MedewerkerID een keuzelijst (uiteraard gekoppeld aan Medewerkers). Nu kun je op het formulier Medewerkers snel zien wie op welk project zit, en je kunt makkelijk nieuwe projecten toevoegen. En omgekeerd geldt hetzelfde voor Projecten: daar kun je nu heel makkelijk medewerkers aan hangen.
Uiteraard maak je voor Medewerkers/Projecten ook een mooi formulier, met 2 keuzelijsten voor ProjectID en MedewerkID. Kun je alle kanten op

Alvast bedankt

John
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan