Autonummering overbrengen

Status
Niet open voor verdere reacties.

h.drenth

Gebruiker
Lid geworden
10 mei 2004
Berichten
22
Beste forumleden,
Ik heb een tabel voor een ledenbestand gemaakt.
Het veld [lidnr] heeft een teksteigenschap en werkt goed.
Nu wil ik de lidnummers vanaf 1001 laten lopen.
Ik heb een extra veld aangemaakt [lidID] aangemaakt met de eigenschap Autonummering.

Mijn vraag is; hoe kan ik het lidnummer uit het veld [lidID] overbrengen naar het tekstveld [Lidnr]?
groet,
Henk
 
Het antwoord is, hoewel je dat niet leuk zult vinden, dat kan gewoon niet.
Autonumber velden worden door access van een betekenisloos nummer voorzien, dat niet te beinvloeden is (anders zou het een betekenis kunnen krijgen). Als je dus een autonummer veld gebruikt mag het voor jou niet van belang zijn welk nummer daarin komt te staan, zolang het maar uniek is. In een volgende versie van Access worden deze velden waarschijnlijk vervangen door een GUI, een Globaly Unique ID. Die zitten nu bijvoorbeeld al in SQL Server. GUI velden zijn velden met een inhoud waar je echt geen brood van kunt bakken, maar dat is niet erg, je gebruikt ze alleen als sleutelvelden, net als autonummer velden, en daarvoor voldoen ze prima.

Als je nummering wilt beinvloeden zul je dat zelf moeten regelen, lekker programmeren dus.
 
Bartuls zei:
Het antwoord is, hoewel je dat niet leuk zult vinden, dat kan gewoon niet.
Autonumber velden worden door access van een betekenisloos nummer voorzien, dat niet te beinvloeden is (anders zou het een betekenis kunnen krijgen). Als je dus een autonummer veld gebruikt mag het voor jou niet van belang zijn welk nummer daarin komt te staan, zolang het maar uniek is. In een volgende versie van Access worden deze velden waarschijnlijk vervangen door een GUI, een Globaly Unique ID. Die zitten nu bijvoorbeeld al in SQL Server. GUI velden zijn velden met een inhoud waar je echt geen brood van kunt bakken, maar dat is niet erg, je gebruikt ze alleen als sleutelvelden, net als autonummer velden, en daarvoor voldoen ze prima.

Als je nummering wilt beinvloeden zul je dat zelf moeten regelen, lekker programmeren dus.

Beste Bartuls,

Ik wil de nummering van autonummering in het veld [LidID] niet beïnvloeden, maar ik wil dat zelfde nummer overbrengen naar een ander veld {Lidnr] waar ik verder mee in het bestand werk. Dus even simpel gezegd een verwijzing naar het veld lidID.
Heb je enig idee?
Groet,
Henk
 
Dat kan op zeer veel manieren bijvoorbeeld via een updatequery of meteen na opslaan van een record. Welke manier je moet gebruiken is afhankelijk van wanneer je het nodig hebt.
Je zult dus wat meer informatie moeten geven wanneer je dat wilt doen en hoe je je gegevens samenstelt.
 
Bartuls zei:
Dat kan op zeer veel manieren bijvoorbeeld via een updatequery of meteen na opslaan van een record. Welke manier je moet gebruiken is afhankelijk van wanneer je het nodig hebt.
Je zult dus wat meer informatie moeten geven wanneer je dat wilt doen en hoe je je gegevens samenstelt.

Beste Bartuls,
Ik geef de voorkeur aan het direct overnemen van het lidID na het invoeren van alle gegevens van een nieuw lid. Zodra ik het lid toevoeg, krijgt deze immers een autonummer.
Dus metaan na opslaan is prima. In het invoerformulier maak ik het veld lidnr niet zichtbaar.
Wat denk je, is dat de beste manier?
Groet,
Henk
 
Dat moet je dan regelen op de AfterUpdate event (Na Bijwerken gebeurtenis) van je formulier. Dat event gaat af nadat de gegevens in de tabellen bijgewerkt zijn.
Daar moet je dan het toegekende ID ophalen (kan met de dfirst() functie) en deze plaatsen in het veld waar je die wilt hebben (kan met een update query).
 
Bartuls zei:
Dat moet je dan regelen op de AfterUpdate event (Na Bijwerken gebeurtenis) van je formulier. Dat event gaat af nadat de gegevens in de tabellen bijgewerkt zijn.
Daar moet je dan het toegekende ID ophalen (kan met de dfirst() functie) en deze plaatsen in het veld waar je die wilt hebben (kan met een update query).

Bartuls,
Dank voor je vorral snelle reactie. Ik ga er mee aan de slag.
Groet,
Henk
 
Bartuls zei:
Dat moet je dan regelen op de AfterUpdate event (Na Bijwerken gebeurtenis) van je formulier. Dat event gaat af nadat de gegevens in de tabellen bijgewerkt zijn.
Daar moet je dan het toegekende ID ophalen (kan met de dfirst() functie) en deze plaatsen in het veld waar je die wilt hebben (kan met een update query).

Bartuls,
Ik heb veel geprobeerd, maar kom er niet uit.
Kun je me meer info geven over de dfirst() functie?
Groet,
Henk
 
Je moet het veld zelf gaan vullen.
Dat kun je bijvoorbeeld met de volgende code doen.

Dim strSQL as string

strSQL = "UPDATE tblJouwDoelTabel (jouwDoelVeld) VALUES("
strSQL = strSQL & cstr(dMax("LidID", "JouwBronTabel")) & ");"

doCmd.RunSQL strSQL
 
Bartuls zei:
Je moet het veld zelf gaan vullen.
Dat kun je bijvoorbeeld met de volgende code doen.

Dim strSQL as string

strSQL = "UPDATE tblJouwDoelTabel (jouwDoelVeld) VALUES("
strSQL = strSQL & cstr(dMax("LidID", "JouwBronTabel")) & ");"

doCmd.RunSQL strSQL

Bartuls,
Ik heb in het formulier (die gekoppeld is aan de tabel STAMGEGEVENS in de regel Na bijwerken je code ingetypt. In het formulier is het lidnr echter niet gewijzigd.

Maar ik weet bijna niets van SQL.
Als ik de code lees dan moeten er twee tabellen zijn (brontabel en doeltabel).
Ik heb slechts een tabel.
Misschien ben ik ook niet duidelijk genoeg geweest in m'n vorige informatie.
De belangrijkste tabel is de tabel STAMGEGEVENS
In deze tabel heb ik een veld LIDID (autonummering) en een veld Lidnr (tekstveld)
Het veld LIDID wil ik laten beginnen met 1001.
Het veld Lidnr wil ik gelijk laten lopen met het veld LIDID.
Ik heb het veld Lidnr geindexeerd en koppel dat aan andere tabellen, bijvoorbeeld de contributie.
Ik hoop dat je me verder kunt helpen.
Met vriendelijjke groet,
Henk
 
Kun je je mdb even zippen en posten? Dat maakt het een stuk eenvoudiger om te kijken wat er aan de hand is.
 
Bartuls zei:
Kun je je mdb even zippen en posten? Dat maakt het een stuk eenvoudiger om te kijken wat er aan de hand is.

Bartuls,
Ik heb het bestand gesplitst in een backend en frontend.
Waar zal ik de bestanden naar toe sturen?
het zal je opvallen dat ik er een hele lange tijd aan heb gewerkt.
Veel code's kreeg ik van andere mensen.
Groet,
Henk
 
Dat opslitsen is een standaard techniek die ik ook toepas.
Beide mdb's even comprimeren, in een zipbestandje stoppen en posten hier op het forum.
Posten op het forum doe je onder het venster waarin je een reactie kan typen (knopje beheer bijlagen).
In principe is het voldoende als je het deel dat het probleem bevat te posten.
 
Bartuls zei:
Dat opslitsen is een standaard techniek die ik ook toepas.
Beide mdb's even comprimeren, in een zipbestandje stoppen en posten hier op het forum.
Posten op het forum doe je onder het venster waarin je een reactie kan typen (knopje beheer bijlagen).
In principe is het voldoende als je het deel dat het probleem bevat te posten.

Bartuls,
Heel fijn dat je me verder wilt helpen!
Als het goed is gegaan, heb ik de backend en frontend bijgevoegd.
Groet,
Henk
 

Bijlagen

h.drenth zei:
Bartuls,
Heel fijn dat je me verder wilt helpen!
Als het goed is gegaan, heb ik de backend en frontend bijgevoegd.
Groet,
Henk

Bartuls,
Helaas kan ik het gedeelte van de backend niet oversturen. Het bestandje is toch nog 345 kB en 100 is de limiet.
Wat nu?
Henk
 
Maak een nieuwe mdb, kopieer (importeer) de componenten waar het om gaat in de nieuwe mdb en post die. Dan heb je waarschijnlijk niet zo'n groot bestand.
 
Bartuls zei:
Maak een nieuwe mdb, kopieer (importeer) de componenten waar het om gaat in de nieuwe mdb en post die. Dan heb je waarschijnlijk niet zo'n groot bestand.

Bartuls,
Klopt wat je zegt.
Bijgaand het gedeelte van de backend.
Groet,
Henk
 

Bijlagen

Als ik je vraag nog een keer lees:

De belangrijkste tabel is de tabel STAMGEGEVENS
In deze tabel heb ik een veld LIDID (autonummering) en een veld Lidnr (tekstveld)
Het veld LIDID wil ik laten beginnen met 1001.
Het veld Lidnr wil ik gelijk laten lopen met het veld LIDID.
Ik heb het veld Lidnr geindexeerd en koppel dat aan andere tabellen, bijvoorbeeld de contributie.

Het veld LIDID is door access al automatisch geindexeerd (een plezierige eigenschap van autonummer velden).
Als je wilt verwijzen naar records uit je tabel STAMGEGEVENS dan moet je dat ALTIJD doen middels een verwijzing naar het veld LIDID.
In de tabel waar je de verwijzing wilt opnemen neem je dan een veld LIDID (numeriek, lange integer) op en daar stop je dan het LIDID in.
Dit is de enige juiste manier om in access een correcte referentiele integriteit op te nemen.

Als je nog een apart veld Lidnr wilt opnemen, dan is dat prima. Dat zul je dan zelf middels code moeten gaan vullen. Dat is niet zo moeilijk, dat kun je handmatig laten invullen of middels een stukje code automatisch laten vullen. Maar dat veld moet je NOOIT gebruiken om naar te verwijzen in andere tabellen. Die verwijzing loopt altijd via LIDID.
 
Bartuls zei:
Wat een mooie lege mdb heb je gepost. Staat niets in.

Bartuls,
Sorry, daar wordt het voor jou ook niet gemakkelijker op.
Maar om privacy redenen heb ik de leden uit de tabel gehaald.
Ik vroeg je daarom eerder naar een mailadres.
Dan kan ik beide bestanden in z'n geheel naar je mailen.
Groet,
Henk
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan