Autonummering

Status
Niet open voor verdere reacties.

Strikske

Gebruiker
Lid geworden
5 mei 2008
Berichten
39
Beste mensen,

Ik heb vraag over Acces 2000

Ik wil een autonummering maken met
1-A
1-B
2-A
2-B
3-A
3-B

Ik heb al vanalles geprobeert in een Query maar ik kom er niet uit.

Heeft iemand van jullie een oplossing? Misschien met behulp van VBE maar hier ben ik nog niet zo goed in.

Alvast bedankt.

Groeten
 
Autonummering is, de naam zegt het al, een Nummer dat automatisch ophoogt. Veel meer kun je daar helaas niet van maken. Hooguit kun je een begingetal instellen, maar dan heb je het wel gehad.
De nummerstijl die jij wilt, is derhalve voor Access geen autonummering, en is als zodanig dus ook niet in te stellen.
Wel kun je een handmatige nummering maken die bijvoorbeeld via VBA of op een formulier (ook met VBA) wordt ingesteld. Het voordeel van een handmatige nummering is ook, dat je niet zo snel gaten zult krijgen in de reeks, wat bij Autonummering nog wel eens wilt voorkomen.
 
Waarom niet als volgt?

1 A B
2 A B
3 A B

Of eventueel 2 tabellen:
1 A
2 A
3 A

1 B
2 B
3 B
 
@depep:
Blijft het probleem houden dat je geen consistente reeks kunt garanderen...
 
Bij de eerste optie is dat sowieso geen probleem. Bij de tweede is het een probleem als je A en B niet in dezelfde volgorde naar de 2 tabellen schrijft.
 
Laatst bewerkt:
Kan de vraagsteller nog wat aanvullende info geven over wat hij wil? Voordat de discussie oeverloos wegdrijft met zinloze antwoorden?
 
wat ik probeer te maken is het volgende 1 tabel met de nummering
7001-A
7001-B
7002-A
7002-B
7003-A
7003-B

Wanneer dit niet mogelijk is het niet erg maar ik zou het wel mooi vinden want het scheelt met name mij tijd maar anders ga ik opzoek naar een andere oplossing.

In ieder geval vast bedankt voor het meedenken
 
Zoals je waarschijnlijk al hebt begrepen, is deze nummeringstijl niet op tabelniveau in te stellen, althans niet met Autonummering. Om te beginnen moet het veldtype van de nummering lay-out gebaseerd zijn op een tekstveld, want anders kun je geen cijfer met een letter combineren. De enige manier dus om dit te realiseren is met een handmatige codering.
De vraag is nu dus: hoe ga je de records toevoegen? Wil je de gegevens rechtstreeks in een tabel intypen, gebruik je een formulier voor het invoeren, of gaat e.e.a. via een Importprocedure?
 
Een belangrijkere vraag is nog waaróm je de indeling zo graag zo wilt. Je krijgt namelijk een hopeloos onhandige tabel. Stel dat je de A waarde voor 7001 wilt hebben kan je die onmogelijk met een simpele selectie terughalen, terwijl dit in mijn beide voorbeelden wel kan. Een primary key, waar autonummering meestal voor gebruikt wordt, is bij jouw voorbeeld compleet afwezig.

Ik zou je ontwerp nog eens goed overdenken en kijken of er geen betere manier is. Wij willen je daar best bij helpen, maar dan hebben we wel meer informatie nodig over je toepassing. Op het moment is de indeling van optie 1 die ik je gaf nog steeds het handigst, is er een reden waarom je die niet wilt/kunt gebruiken?
 
@Depep:
Om te beginnen snap ik jouw eerste voorbeeld eerlijk gezegd zelf niet, dus ik denk de vraagsteller ook niet... Ten tweede is de sleutel zoals Strikske die wil wel degelijk als Primaire sleutel te gebruiken; waarom niet? Zelf geef ik altijd de voorkeur aan zelf-ingestelde primaire sleutels, omdat ik dan controle heb over de nummerstijl, en voor mij herkenbare en significante gegevens in die sleutel op sla.
Een autonummering is op zich wel een handige manier van een sleutel maken als je echt niks kunt verzinnen om je records te identificeren, maar mag wat mij betreft nooit het uitgangspunt zijn. En een extra tabel maken alleen maar om een sleutel op te slaan is natuurlijk helemaal uit den boze...
Verder hangt het er maar net vanaf hoe de sleutel van Strikske zich moet kunnen ontwikkelen, maar ik zie geen enkel probleem om selecties te maken met de gewenste opmaak. Dus: i.p.v. te proberen om de vraagsteller een andere kant op te sturen, kun je je energie beter steken in het vinden van een bruikbare oplossing...
 
Een sleutel mag alleen unieke waardes bevatten. De dubbele telling die Strikske wil gebruiken kan dus per definitie niet als primaire sleutel dienen. Verder is mijn eerste voorbeeld vrij eenvoudig. Als je beide waarden toch dezelfde index wilt meegeven, waarom dan niet in dezelfde rij opslaan? Een extra kolom erbij en klaar ben je.

De tabelindeling zoals die in de eerste post staat gaat tegen alle database indelingsregels in die ik ken, vandaar dat ik de poster probeer een andere richting op de sturen. Natuurlijk kan je een eigen index meegeven, maar dat is meer een workaround dan het aanpakken van de aard van het probleem, namelijk de foutieve indeling.
 
@Depep:
Een sleutel mag inderdaad alleen unieke waarden bevatten, maar 7000-1A en 7000-1B zijn voor zover mijn kennis van het alfabet gaat toch in combinatie volledig uniek, dus ik snap niet waar je over praat. Ook een tekstveld mag als sleutel gebruikt worden, en hoeft absoluut geen getal te bevatten.... Misschien moet je iets meer inlezen over indexen?

@ Strikske:
Weet je al hoe je de gegevens gaat invoeren?
 
Geloof me, ik hoef me echt niet meer in te lezen in dit onderwerp. Ik ging er echter vanuit dat de '-' tekens als kolom scheiding bedoeld waren. Nu ik het teruglees kan ik me daarin vergist hebben. Dan is mijn eerste voorbeeld natuurlijk nog steeds mogelijk, maar komt het er zo uit te zien:

[table="width: 500, class: dotted"][tr][td]index[/td][td]A[/td][td]B[/td][/tr]
[tr][td]7001[/td][td]<waarde>[/td][td]<waarde>[/td][/tr][/table]

Mocht dit niet voor je werken, kan je de volgende query gebruiken om de maximum index voor -A waardes te vinden. Die kan je dan gewoon met 1 ophogen en als nieuwe index gebruiken.

[SQL]
SELECT MAX(mid(index,1,instr(index,'-')-1))
FROM TABLE_NAME
HAVING index LIKE '*A'
[/SQL]
 
Laatst bewerkt:
Daarmee los je nog steeds het probleem niet op van het meer dan één keer voorkomen van waarden zoals 7001. Ik zie het probleem niet om de volledige sleutel in één veld te zetten, en als sleutelveld in te stellen. Hoe meer sleutelvelden je moet definieren, hoe lastiger de tabel wordt.
En de sleutel wil Strikske graag in het formaat 7001-A, 7001-B. Ik ga er overigens van uit, dat hier wel twee records mee worden bedoeld, anders ben ik ook weg...
 
Ik heb maar even een voorbeeldje gemaakt, want daaarmee kunnen we de discussie in één keer sluiten, hoop ik...
In de db moet je het formulier frmCursisten openen; met de knop Nieuw kun je een nieuwe naam toevoegen, waarbij de sleutel wordt opgebouwd uit de hoogste sleutel uit de tabel, en wordt het hoogste nummer met 1 verhoogd als de letter B is.
 

Bijlagen

Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan