[ACCESS] Dubbele autonummering in tabel

Pagina: 1
Acties:
  • 129 views sinds 30-01-2008
  • Reageer

  • Dielie
  • Registratie: Februari 2001
  • Laatst online: 22-08 20:35
In MS Access 2000 bouw ik een database met order info. Die orderinfo bestaat logischerwijs uit een tweetal tabellen: eentje met de globale info van de individuele orders, en een tweede met de orderregels. De sleutel van de ordertabel is het orderID. De sleutel van de tweede is de orderregelID. Standaard zijn beide sleutels natuurlijk uniek en geindexeerd.

Ik wil de orderregels ook nog laten nummeren PER order (altijd te beginnen bij 1). Omdat de autonummering reeds wordt gebruikt voor de sleutel, kan ik die niet nogmaals in dezelfde tabel toepassen.

Voorbeeld:

Order 1 (OrderID=1) heeft twaalf orderregels (OrderregelID 1 tm 12, OrderregelNr 1 tm 12)
Order 2 (OrderID=2) heeft drie orderregels (OrderregelID 13 tm 15, OrderregelNr 1 tm 3)
Order 3 (OrderID=3) heeft vijf orderregels (OrderregelID 16 tm 20, OrderregelNr 1 tm 5)

Het gaat dus om het automatisch aanmaken van het OrderregelNr. Kan dit in het ontwerp van de tabel? Of via het formulier? Hoe dan?

Verwijderd

Als ik het ff snel bekijk kun je gewoon in de tabel orderregel het veld orderregelid gebruiken. Dit veld op autonummering zetten en een foreign key orderid (type number) aanmaken in orderregel tabel. In tabel order heb je dan al orderid op autonummering.

[edit] Snurk.... maandagmorgen dipje.... Ik lees nu wat je vraag is. Denk er ff over na.

Als je nu eens bij het toevoegen van een orderregel onderstaande query doet?

SELECT COUNT(orderregelid) FROM orderregel WHERE orderid=x

count+1 is dan het nieuwe orderregelnr. Dit kun je in het formulier implementeren.

[ Voor 41% gewijzigd door Verwijderd op 25-11-2002 11:20 ]


  • Dielie
  • Registratie: Februari 2001
  • Laatst online: 22-08 20:35
Yep, die count functie ("aantal (*)" in NL versie) had ik al gebruikt, maar dan moet ik tussentijds weer de dataset opslaan. Doe ik dat niet, dan pakt hij slechts het opgeslagen aantal (en dat klopt niet als ik circa 5 records achter elkaar wil aanmaken).

Eigenlijk wil ik gewoon het current recordnummer hebben...

Moet toch simpel kunnen, zou je zeggen.

Verwijderd

Ik heb dit probleem opgelost door op het moment dat een order is aangemaakt, de order weg te schrijven naar een andere tabel. Er is een query op deze tabel die het maximale ordernummer (eventueel +1) tevoorschijn tovert. Dit gebruik ik als input op een formulier waar ik een nieuwe order aanmaak. Op deze manier kun je trouwens ook ordernummers per klant maken (voor elke klant een eigen opvolgende nummering).

  • Dielie
  • Registratie: Februari 2001
  • Laatst online: 22-08 20:35
Dat is een mogelijkheid SanIsman! Zeker de laatste zin is nagenoeg gelijk aan mijn situatie.

Een andere die ik heb gevonden is middels een loop in VBA. Ik wil de waarde van die for-to loop dan telkens meegeven aan een toevoegquery (die ik elke keer binnen de loop aanroep). Kan dat? Zo ja, hoe?

Dus: For I = 1 to 30
Query aanroepen met I als parameter
Next I

Verwijderd

Wel even DAO aanvinken onder tools, references...
Visual Basic .NET:
1
2
3
4
5
6
7
8
dim dbs as Database
dim mySQL as String
set dbs=currentDB
For ...
  mySQL=....
  dbs.execute mySQL
Loop
set dbs=Nothing

[ Voor 18% gewijzigd door Verwijderd op 25-11-2002 15:07 ]


  • Dielie
  • Registratie: Februari 2001
  • Laatst online: 22-08 20:35
Helemaal raak Underscore. Thanx allemaal. Topic mag dicht. _/-\o_
Pagina: 1