Toon posts:

[asp/access] Autonummering klopt niet!

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

Verwijderd

Topicstarter
Ik zit met het volgende: vanuit ASP voer ik een INSERT uit op een tabel. Na het uitvoeren van de query worden alle waarden netjes in een nieuw record gestopt. De tabel heeft ook een ID-veld met een autonummering zodat het nieuw ingevoerde record meteen een uniek nummer krijgt. Hier gaat het fout.

Bij het toevoegen van het eerste record is dit ID netjes 1, maar bij de volgende invoer is dit ID 3 (i.pv. 2) Er wordt bij de autonummering steeds een getal overgeslagen! heb na het invoeren van 5 records dus de unieke ID's 1-3-5-7-9 terwijl ik natuurlijk 1-2-3-4-5 wil hebben.

Ik heb met een collega alles nagekeken en de insert wordt echt maar 1 keer uitgevoerd. De waarden worden ook maar 1 keer toegevoegd. Alleen de autonummering klopt niet.

In access staat ook alles goed (denk ik dan...):

veldnaam: element_ID;
gegevenstype: autonummering
veldlengte: lange integer;
nieuwe waarden: reeks
geindexeerd: JA (geen duplicaten)

Voor de database-structuur is het echt belangrijk dat element_ID netjes oploopt en dat er dus geen 'gaten' in de autonummering zitten. Heb echt al goed gezocht, maar ik ben hetzelfde probleem hier nog niet tegengekomen. Heeft iemand hier ook last van? hoe is dit op te lossen?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

autonummering wil niet zeggen opeenvolgend. Als je opeenvolgend wilt, per definitie geen enkel gat er tussen, dan zul je je eigen volgorde moeten maken.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 12-08 16:04

Jaspertje

Max & Milo.. lief

Waarom wil je dat het op een volgend is?

Idd wat pistole zecht staat je seed goed.. wat gebeurt er als je nu iets verwijderd? dan gaat het namelijk ook niet meer goed.. en klopt je db ook niet meer...

[ Voor 68% gewijzigd door Jaspertje op 11-11-2003 11:36 ]


  • pistole
  • Registratie: Juli 2000
  • Nu online

pistole

Frutter

controleer je identity seed eens? Misschien staat die op 2 ipv 1

Ik frut, dus ik epibreer


Verwijderd

Topicstarter
als een record eenmaal is toegevoegd, zal deze nooit meer worden verwijderd (is de bedoeling ;-) ) daarom zullen er bij gebruik van een autonummering die wél stapsgewijs -dus elke keer met 1- ophoogt nooit gaten ontstaan.
Nu krijg ik gaten doordat de autonummering op raadselachtige wijze niet elke keer met 1 ophoogt, maar met 2...

Verwijderd

Bij het invoeren slaat Access er iedere keer 1 over.
controleer je identity seed eens?
Nee, die is goed, want als we (ja, ik doe met _10us_ mee) het direct in access doen via de interface telt access wel gewoon op. Dit gebeurt enkel en alleen als we het via de code doen. En daar is verder niets speciaals aan, gewoon een standaard DSN-less connectie.

  • pistole
  • Registratie: Juli 2000
  • Nu online

pistole

Frutter

ja, ik las net al dat je de seed in access niet eens kan veranderen (ik gebruik nooit access, vandaar).

Maar je geeft zelf al aan de fout dus in je eigen code zit omdat het wél goed gaat als je direct in access een record toevoegd.

Lijkt me dat je dan wel weet waar je moet zoeken?
Post anders eens een stukje relevante code?

[ Voor 8% gewijzigd door pistole op 11-11-2003 11:45 ]

Ik frut, dus ik epibreer


Verwijderd

Nou bij deze dan de code, waar volgens mij de fout niet echt in zit.....

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function addStructureRecord(element_root_id, element_node_id, owner_id, element_has_node, order)
    conn.Execute("INSERT INTO [elements_structure]" & _
        " ([element_root_id], [element_node_id], [owner_id], [element_has_node], [order])" & _
        " VALUES (" & element_root_id & ", " & element_node_id & ", " & owner_id & ", " & element_has_node & ", " & order & ")")
    
    Set getID = conn.Execute("SELECT [elements_structure_id]" & _
        " FROM [elements_structure]" & _
        " WHERE" & _
        " [element_root_id] = " & element_root_id & _
        " AND [element_node_id] = " & element_node_id & _
        " AND [owner_id] = " & owner_id & _
        " AND [element_has_node] = " & element_has_node & _
        " AND [order] = " & order)
    
    addStructureRecord = getID(0)
End Function



P.S. Sorry voor de layout

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

Het ligt niet aan je code. En het is ook geen fout van access. Als jij er vanuit gaat dat alles opeenvolgend moet zijn dan heb je een fout in je ontwerp zitten. Waarom moeten de nummers opeenvolgend zijn?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Creepy schreef op 11 november 2003 @ 11:56:
Het ligt niet aan je code. En het is ook geen fout van access.....
geen fout van access...zou ik het mee eens kunnen zijn, alleen is het niet gewoon logisch een autonummering met stappen van 1 op te hogen?

Waarom doet access dat wel als we rechtstreeks in de database een record toevoegen, en niet als we dat vanuit ASP doen? Dát was de vraag....niet waarom het opeenvolgend moet zijn, dat doet er eigenlijk niet toe.

Verwijderd

Probeer eens vanuit een andere ASP file een record in de tabel te inserten, dus een asp pagina met alleen de commando's om naar de DB te connecten, een insert query te doen met de noodzakelijke velden en dan weer databaseconnectie sluiten.
Ik heb dit soort dingen ook wel eens gehad en vaak kom je tegen dat je toch iets over het hoofd hebt gezien. Soms zijn het hele kleine dingen als dat ergens naar het foute bestand verwezen wordt o.i.d.

Anders moet je in access de tabel ff verwijderen en opnieuw aanmaken :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 11 november 2003 @ 12:02:
[...]


geen fout van access...zou ik het mee eens kunnen zijn, alleen is het niet gewoon logisch een autonummering met stappen van 1 op te hogen?

Waarom doet access dat wel als we rechtstreeks in de database een record toevoegen, en niet als we dat vanuit ASP doen? Dát was de vraag....niet waarom het opeenvolgend moet zijn, dat doet er eigenlijk niet toe.
Het is een autonummering veld, en je krijgt automatisch een uniek nummer toegewezen -> het werkt dus correct.

Het kan zijn dat de ASP laag ergens alvast een record reserveert ofzo, en deze weer cancelt. Geen idee waarom. Maar elke DB met een autonummering veld krijgt bijna altijd wel gaten in de nummering, ook als je geen records verwijdert. Maar ik had eigenlijk verwacht te je er afhankelijk van was, gelukkig is dat niet het geval :)

En wat gebeurt er als je met een paar man tegelijk gat inserten, en halverwege cancelt iemand er, i.p.v dat ie post. Tada, ook een gat.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Ik weet niet of je ook een replica hebt gemaakt van de database maar als dat het geval is, dan zal access zowiezo de nummers van toegevoegde records niet meer opeenvolgend maken.

Je hebt overigens inderdaad een probleem in het ontwerp van je database want het is niet goed dat je afhankelijk bent van de opeenvolging van dit autonumering veld. Ik stel voor om een soort 'OrderCode' veld ofzo toe te voegen waar je zelf een autonumering in aanbrengt vanuit je code (op moment dat je een record toevoegd).

Verwijderd

Topicstarter
Ik heb me er maar bij neergelegd dat ik geen mooi opeenvolgende reeks krijg in mijn autonummeringsveld. Boeit verder ook niet. We zijn er inderdaad niet van afhankelijk.

Misschien toch nog wel leuk of interessant om ff bij dit probleem stil gestaan te hebben. Het blijft immers een RAAR probleem....toch?

  • pistole
  • Registratie: Juli 2000
  • Nu online

pistole

Frutter

het is inderdaad vaag.
Misschien een laatste mogelijkheid: zet odbc querylogging aan (in odbc admin) en ga daar kijken wat voor sql statements er langskomen, misschien levert dat nog iets op?

Ik frut, dus ik epibreer


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Rechtstreeks in Access inserten gaat bij jullie goed.
Via een VB applicatie inserten gaat goed (meerdere malen gedaan hiero ;))
Via een Delphi applicatie inserten gaat goed (ook al vaker gedaan!)
Via de ASP-pagina loopt er iets niet lekker....

Klinkt misschien heel vervelend, maar het ligt in je ASP pagina. Misschien is je code wel goed, maar wordt er inderdaad al ergens een keer iets gereserveerd, maar wordt daar niets mee gedaan...? Verder zou je eens alle code online kunnen zetten van die pagina die iets te maken heeft met database-toegang. Wellicht zie je iets over het hoofd. Of maak een alleen-insert-pagina aan zoals ed_ehv al aangeeft.

My personal website

Pagina: 1