Combobox Form - Prefix autonumber

Status
Niet open voor verdere reacties.

MatthiasPBelmans

Gebruiker
Lid geworden
13 aug 2020
Berichten
50
Hoi

Ik ben een database aan het ontwikkelen die wij intern in ons bedrijf kunnen gebruiken.
Deze database is eigenlijk een soort logboek van transportaanvragen.

Elk dossier heeft zijn eigen nummer, nu zou dat bv: E/000001 moeten zijn.
Dit lukt mij om zo in te stellen als autonummer en prefix

Echter als ik in mijn formulier een ComboBox maak zodat die het juiste record gaat zoeken krijg ik de volgende foutmelding
"the value you entered isn't valid for this field"

Kan dit opgelost worden?

Tx Matthias
 
Dag Matthias,

eerst en vooral zou ik geen autonumber gebruiken om je dossiernummer op te bouwen. Een autonumber is zeer geschikt als PK, maar deze wordt alleen door de computer gebruikt om bv. one to many relaties mee op te bouwen. Als je ooit per ongeluk een fout record aanmaakt, dit verwijdert en opnieuw ingeeft is het autonummer gebruikt en komt nooit meer terug. Maw je hebt een gat in je nummering, en dat wil je meestal niet.
Meestal gebruik ik hiervoor een aparte nummeringstabel (voordeel: je kan indien nodig gemakkellijk handmatig de nummering herzetten). Ik sla daar het laatst gebruikte nummer voor die prefix op, voor een nieuw nummer verhoog ik dat met één, sla deze aanpassing op in de tabel en gebruik dit om het dossiernummer op te bouwen.
Of je kan het dossiernummer ook opbouwen door het max. nummerdeel voor die prefix op te halen en er 1 bij te tellen. In elk geval is het dossiernummer een combinatie van tekst en nummers dus een tekstveld.
 
Laatst bewerkt:
Hoi

Wij gaan met meerdere in de zelfde database werken. Dus de nummering zou wel automatisch moeten gegenereerd worden van zodra iemand een nieuw dossier opent.
Of lukt dat ook met een aparte nummeringstabel?

Met zo'n aparte nummeringstabel heb ik wel niet zo veel ervaring :)
 
Dat lukt met beide methodes: er is alleen het gevaar dat 2 personen op hetzelfde tijdstip, hetzelfde nummer nemen. Maar dat kan je ondervangen door een unieke index op het dossiernummer te leggen, dan zal één van de twee de melding krijgen dat dubbels niet aanvaard worden. Dat gevaar is afhankelijk van hoeveel personen gelijktijdig met het programma werken. Maar aangezien jullie acces als database hebben gekozen zullen dat er waarschijnlijk niet veel zijn. Hoogstens 3 à 5. Anders kan je beter access alleen als frontend gebruiken en als backend een echte database nemen.
 
Backend ook access, of een andere database?
 
Eenvoudig voorbeeld met een heel klein beetje VBA:
 

Bijlagen

  • OpbouwDocNr.zip
    53,8 KB · Weergaven: 14
Hey NoellaG
Tx voor het voorbeeld, eventjes nog eens bekeken.

We zouden toch liever voor een Autonummering gaan, het is niet de bedoeling dat er in ons bedrijf een record verwijderd mag worden (Farmaceutisch bedrijf)
Alles moet bij ons traceerbaar zijn en origineel.
In mijn database is er ook een veld voor opmerkingen als een dossiernummer toch onbruikbaar is

Dus is het mogelijk om het te doen met een Autonummering en een prefix, en dat als zoekrecord in een combobox?
 
Dus is het mogelijk om het te doen met een Autonummering en een prefix, en dat als zoekrecord in een combobox?
Groot gelijk dat je geen aparte tabel hebt voor je nummeringen; zelfs als ik met handmatige nummeringen werk heb ik nooit een aparte tabel nodig. Ik lees gewoon altijd het laatste nummer uit de tabel, en verhoog dat met één. Dat werkt altijd goed, zeker als je een nieuw record gelijk laat opslaan in de database. Ik zou dus nooit een aparte tabel voorstellen (in een Access database). Sterker nog: die keren dat ik er zélf mee te maken krijg, heb ik er alleen maar last van. Simpel voorbeeldje: ons marktsysteem maakt gebruik van een nummertabel voor de volgende nummers, zoals noella voorstelt. Dat werkt prima bij reguliere toevoegingen. Maar zodra ik een importscript gebruik om een batch in te lezen, moet ik die nummers zelf genereren in mijn importbestand, en moet ik vervolgens ook nog eens handmatig die nummertabel aanpassen. Doe ik dat niet, dan crasht het systeem. Lekker geregeld, denk ik dan :).

Je kunt, om te voorkomen dat meerdere mensen hetzelfde nummer genereren (gebeurt alleen als die personen tegelijkertijd een record aanmaken), in de database een Variabele opnemen voor de nummers die je dan verhoogd en opvraagt bij elk nieuw record. Op die manier voorkom je dubbele nummers. Autonummers combineren met een letterteken combinatie is niet mogelijk. Dus ófwel autonummers gebruiken, ofwel een eigen nummersysteem. Wat dan weer voordelen heeft. Voor dossiernummers lijkt het mij niet zo'n probleem als er gaten in de nummering zitten. Zolang de dossiers maar op de juiste manier zijn op te vragen en terug te vinden, is dat geen probleem lijkt mij.

Het enige dat je kan doen, is met Opmaak de extra prefix te tonen. Maar die geldt dan voor alle dossiers, dus of je daar veel mee op schiet...
 
Hoi,

voor een farmaceutisch bedrijf (dus professioneel) waar alles traceerbaar en origineel moet blijven, een paar tips:
- voeg aan elke tabel de velden: createdBy, CreatedOn, LastUpdatedBy en LastUpdatedOn toe
- als jullie een jaarlijkse audit mochten hebben: gebruik een database als back-end, access geeft altijd moeilijkheden met de audit mensen; iemand met kwade bedoelingen kan immers te gemakkellijk sjoemelen (als die personen niet bestaan in jullie firma: aan de audit uitleggen, niet aan ons :p) en de beveiliging is zwaar onvoldoende.
- Access valt gewoon niet te beveiligen, wat sommigen ook beweren.
- access corumpeert gemakkellijk. Een database doet bij uitvallen van de stroom een rollback tot het laatste correcte punt, Access is dan dikwijls corrupt
- Neem een database back-end waar je met transacties kan werken, sequences kan aanmaken mocht je toch nummers nodig hebben die elkaar opvolgen en deftige back-ups kan maken zodat je in het ergste geval slechts enkele minuten/uren (naar eigen keuze) werk verliest.

Voor gratis database software: SQL server express - MySQL, MariaDB: deze zijn allemeel gratis en perfect te combineren met access front end.
 
Hey NoellaG,
Hoe kan ik dan de velden CreatedBy, CreatedOn, LastUpdatedBy en LastUpdatedOn laten werken?
Want dat snap ik niet zo goed
 
Noella probeert je (zoals wel vaker) in een Access forum je over te laten stappen op een andere database. Ik zou dat voor het moment gewoon even negeren, tenzij het vanuit bedrijfsoogpunt nodig is. En die velden in elke tabel zetten? Ook daarvoor geldt: alleen als je het voor het bedrijf nodig hebt. En dat is lang niet altijd het geval. Kunnen wij echt niet voor jou beoordelen.

Datumvelden kun je automatisch laten vullen met de eigenschap Standaardwaarde. Voor datums gebruik je dan de formule =Date(), voor tijden =Now(). Je kunt met één datum/tijd veld volstaan voor de aanmaak, die wordt dan automatisch gevuld met datum + tijd.
Bij mutaties vul je de datumvelden bij het opslaan.

Overigens gebruik ik maar één tabel voor de historie met de mutaties, waaronder de tabel met de mutaties, de datum + tijd van de mutatie, de persoon die de mutatie uitvoert, het veld dat is gemuteerd en de oude waarde. Op die manier kun je écht zien wat er in de loop van de tijd door wie is gedaan in de database. Alleen de door Noella aangegeven velden vullen schiet namelijk niet zoveel op.
 
Een andere database ga ik hier niet doorkrijgen, het zijn ook maar 4-5 medewerkers die gelijktijdig in de database zouden werken.

Het zou inderdaad wel handig zijn om zo een AuditTrail te hebben voor de records van mijn maintabel.
Ik krijg dit echter niet goed voor mekaar, maar hier start ik best een nieuw topic voor op zeker ?

het is voor mij een hele tijd geleden dat ik nog intens met access heb gewerkt (vooral het bouwen dan), dus ik heb nog een aantal zaken waar ik tegen aan bots
 
Wat betreft de audit velden: zie voorbeeld2
 

Bijlagen

  • OpbouwDocNr2.zip
    54,7 KB · Weergaven: 15
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan