Results 1 to 11 of 11

Thread: AutoInc en access problemen

  1. #1
    Registered User
    Join Date
    Dec 2001
    Location
    Nijmegen
    Posts
    11

    Question AutoInc en access problemen

    Hallo allemaal,

    Ik heb een applicatie gemaakt die met de volgende code (voorbeeld) een record aan een access tabel toevoegd.

    procedure appendrecord;
    begin
    Table1.Append;
    Table1['Field1'] := variabele1;
    Table1['Field2'] := variabele2;
    Table1['Field3'] := variabele3;
    Table1.Post;
    end;

    Nu onstaat het volgende probleem, de tabel heeft ook een autonummering veld. Het is voor mij van belang dat dit veld iedere keer als er een record wordt toegevoegd dat dit autonummeringveld netjes met 1 ophoogd! Dit gaat dus fout, iedere keer als de applicatie een record toevoegd dan verhoogd ie meestal met stappen van 7 maar als ik de applicatie afsluit en weer opstart en dan een record toevoeg kan er wel een stap vat 142 (in ieder geval een voor mij onlogisch getal) tussen zitten
    Wie heeft een idee wat dit zou kunnen zijn?

    Groeten,

    Mick

  2. #2
    Senior Member walterheck's Avatar
    Join Date
    Oct 2001
    Location
    Belo Horizonte, Brasil
    Posts
    4,212
    wat dat kan zijn? autonumbering in access!!

    niet gebruiken. als het maar om een tabel gaat zou ik een inifiletje maken of een reg-setting die aangeeft wat het laatst gebruikte nummer is en dat steeds met een ophogen...

    kan wel alleen als jouw progsel de enige gebruiker van die db is. want als iemand achter je rug om een record toevoegt heb je een probleem...
    Nee, de Romeinen spraken geen ISO-8859-1 LATIN

  3. #3
    Registered User
    Join Date
    Dec 2001
    Location
    Nijmegen
    Posts
    11
    Hoi Walter,

    Er moeten inderdaad meerdere mensen gebruik maken van dezelfde Db, het zou dus kunnen voorkomen dat meerdere tegelijkertijd records willen toevoegen.
    Begrijp ik goed uit je verhaal dat je beter zelf de autonummer routine kan gaan schrijven? Weet jij waarom er van die vreemde stappen zitten in dat autoinc veld?

    Groeten,

    Mick

  4. #4
    Member
    Join Date
    Feb 2002
    Location
    Gent / Belgi?½
    Posts
    28
    Hoi,

    Met acces tabellen kan je inderdaad zeer vreemde zaken krijgen, ik zou je zeker aanraden om je database eens te comprimeren en repareren, meestal geeft dit een oplossing.

    Maar dit is natuurlijk geen manier van werken, dus het voorstel van Walter om zelf een routine te schrijven is zeker niet slecht. Als meerder mensen je db gebruiken kan je gewoon een bijkomende tabel creeeren die de laatste nummer bijhoud.


    Groetjes Johan

  5. #5
    Senior Member walterheck's Avatar
    Join Date
    Oct 2001
    Location
    Belo Horizonte, Brasil
    Posts
    4,212
    dat was inderdaad de eigenlijke manier, een nieuwe tabel maken met een veld genaamd lastnumber ofzo en dan voor elke tabel een record maken, waarin het laatste nummer van je veld staat. zo kunnen andere gebruikers ook kijken wat het laatst gebruikte nummer is.
    Maar ik dacht stel eerst maar even voor met die ini want als je een stansalone progje maakt met een tabel is het onzin om er een extra tabel voor te maken in je db

    Hoe het wordt veroorzaakt weet ik niet precies maar ik weet wel dat je er gewoon niet mee moet werken omdat dit hele vreemde problemen kan veroorzaken
    Nee, de Romeinen spraken geen ISO-8859-1 LATIN

  6. #6

    Autonumber in Acces

    Bij meerdere gebruikers tegelijkertijd "moet" je uiteraard een eigen routinetje maken.
    Voor testjes enzo gebruik ik wel altijd autonumber en na dit bericht realiseer me opeens dat ik het autonumberprobleem bij Acces 2002 (nog?) niet tegen ben gekomen. Zou het echt zijn opgelost? (wel de eigenschap reeks in plaats van willekeurig gebruiken natuurlijk).

    Paulf

  7. #7
    Registered User
    Join Date
    Dec 2001
    Location
    Nijmegen
    Posts
    11
    Dank voor jullie reacties,

    Ik heb reeks ingesteld, maar ik gebruik geen access 2002 maar 97. Is Access 2002 een oplossing? Ik heb inmiddels een tabel aangemaakt met 1 record met de velden "ingebruik" (boolean) en het veld "storingsnummer" Numeriek. Als er een nummer opgehaald moet worden controleer ik eerst het ingebruikveld. Ingebruik dan wachten. Niet ingebruik dan ingebruik waar en het storingsnummer ophalen en ophogen en vervolgens ingebruik weer False maken.
    Het werkt nu prima, maar ik moet het wel nog goed doortesten want ik weet niet wat er gebeurt in de dagelijkse werkelijkheid?
    Ik heb van een vriend het advies gekregen om te upgraden naar iets als Oracle maar dat ken ik helemaal niet. Maar volgens mij is Delphi zo flexible dat dat altijd nog kan (met minimale aanpassingen)?

    Groetjes,

    Mick

  8. #8
    Senior Member McTinus's Avatar
    Join Date
    May 2001
    Location
    Hoek van Holland
    Posts
    389
    een nieuwe tabel maken met een veld genaamd lastnumber ofzo
    Daar ga je problemen mee krijgen met een multi-user systeem. Zeker als je transacties gaat gebruiken. Dan zou ik nog een 'select max(id) from ... ' gebruiken om de hoogste ID op te halen en die 1 verhogen. Maar een betere oplossing voor dit probleem zijn generators (in interbase) of sequences (in oracle). Ik weet niet of Access zoiets heeft. Deze generator zorgt ervoor dat je altijd een uniek nummer terug krijgt, een generator wordt door een stored procedure aangesproken.

    Als er een nummer opgehaald moet worden controleer ik eerst het ingebruikveld. Ingebruik dan wachten. Niet ingebruik dan ingebruik waar en het storingsnummer ophalen en ophogen en vervolgens ingebruik weer False maken.
    Het probleem hierbij is dat als twee gebruikers tegelijkertijd controleren of het 'ingebruikveld' false is. Ze zien beide dat deze false is. Geven allebei tegelijkertijd een update op dat veld (dat kan prima zonder foutmeldingen). Lezen allebij je nummer en zetten allebij ingebruik weer op false. Dit kan allemaal zonder dat er een error komt. Niet zo robuust. Gebruik liever een multi-user database zoals oracle of interbase. Access is daar eigenlijk niet voor bedoeld!
    Last edited by McTinus; 07-Apr-02 at 11:41.

  9. #9
    Registered User
    Join Date
    Dec 2001
    Location
    Nijmegen
    Posts
    11

    AutoInc en access problemen

    Ik heb het nu als volgt opgelost.

    Ik open de tabel (zoals hiervoor beschreven) iedere keer als ik een nieuw nummer nodig heb exclusief. Op deze manier kan er niemand anders een nummer aanmaken!?
    Ik ben benieuwd of dit de juiste weg is?

    Groetejs,

    Mick

  10. #10
    Senior Member walterheck's Avatar
    Join Date
    Oct 2001
    Location
    Belo Horizonte, Brasil
    Posts
    4,212
    Op zich kan dat wel, als je er voor zorgt dat de tabel alleen maar geopend wordt, als hij ook direct weer wordt gesloten zonder tussenkomst van de gebruiker. Anders heb je het probleem dat die gebruiker bijvoorbeeld gaat lunchen en ondertussen staat jouw tabel exclusief geopend. je moet er ook voor zorgen dat als je app in de soep loopt, je tabel geunlocked wordt anders kan er niemand meer aan...
    Nee, de Romeinen spraken geen ISO-8859-1 LATIN

  11. #11
    Registered User
    Join Date
    Dec 2001
    Location
    Nijmegen
    Posts
    11
    Het gaat om het loggen van een storing, een operator moet dit netjes afmaken en het duurt niet langer dan 1 minuutje ofzo. Dus ik verwacht niet echt dat 't mis gaat maar ik zou er een timer in kunnen zetten die bv na 5 min de tabel weer unlocked en de operator een melding geeft.

    Groetjes,

    Mick

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Replies: 13
    Last Post: 21-Apr-04, 15:50
  2. Access en Mysql koppelen
    By jojo in forum Databases
    Replies: 5
    Last Post: 29-Feb-04, 16:13
  3. Replies: 3
    Last Post: 04-Aug-03, 12:06
  4. Access afronden niet toestaan.
    By labee in forum Databases
    Replies: 7
    Last Post: 26-May-03, 10:12
  5. Convert from access 97 to access 2000
    By ElDJ in forum Databases
    Replies: 11
    Last Post: 14-Mar-03, 11:21

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •