Access me génere des Autonumber déja existants....

Access me génere des Autonumber déja existants.... - SQL/NoSQL - Programmation

Marsh Posté le 21-04-2003 à 22:40:44    

Salut,  
 
Je dispose d'une table avec un champ en AutoNumber.
Cette table possède 60000 enregistrement, le dernier étant le Numéro 122312.
 
Quand je crée un nouvel enregistrement pour cette table, Access me génère un truc du genre 20066 pour l'AutoNumber au lieu de 122313. Et bien entendu, l'enregistrement refuse de s'ajouter, à cause de duplicata.
 
Que puis je faire? J'ai essayé de compacter et réparer, mais rien n'y fait...
 
Merci,
 
Yoyo*


---------------
It's nice to be important, but it's more important to be nice
Reply

Marsh Posté le 21-04-2003 à 22:40:44   

Reply

Marsh Posté le 21-04-2003 à 22:46:21    

arf 60000 enregistrements de combien de champs ?
 
c beaucoup pour acces ! faudrait trouver un autre SGBD

Reply

Marsh Posté le 21-04-2003 à 22:47:02    

google : "Access autonumber limitation" :
 

Citation :

A table that has a field formatted as autonumber somehow has resulted in duplicate numbers. How can this happen?
 
When an autonumber format is selected, Access will assign a number to each new record that is entered to the table. The initial number default starts at 1, but utilizing the following steps can change this default. Follow the example 1. Create a table of addresses using field names ID, Fname, Lname, Address1, Address2, City, State, and Zip. Be sure to format ID as autonumber and all other fields as Text (or some other format that will accept your data. Save the table as TableA. 2. Add records to TableA. Watch Access automatically assign an incremental number for the ID field starting at 1. 3. Now create a second table using the same fields as above. This time format the ID field as number. Save this table as TableB 4. Add records to the table. This time you will have to assign an ID to each record. Start the first record with ID = 100, and increment from there up. 5. Create an Append query to populate the records of TableB to TableA. As long as you named the fields the same between the two tables, Access will automatically link the field names when you choose Append Query. See the QBE grid. Run the query. 6. Now go back to TableA and add another record. The field ID formatted as autonumber now starts at the next highest value of all the records within TableA. This is the only known way to defeat the autonumber procedure. To answer the question above, add records to TableB duplicating the ID numbers from TableA. Re-run the append query, then view TableA again. The ID field will be duplicated.

Reply

Marsh Posté le 21-04-2003 à 22:49:02    

corvincent a écrit :

arf 60000 enregistrements de combien de champs ?
 
c beaucoup pour acces ! faudrait trouver un autre SGBD


Access supporte des bases jusqu'à 1 Go, même si M$ ne garantie pas le comportement du produit du delà de 20 Mo :)

Reply

Marsh Posté le 21-04-2003 à 22:56:40    

Sinon, pour access, l'autonumber est un "long" (définition dans MSDN de l'autonumbher de Acess) :
 
AutoNumber
(FieldSize= Long Integer)
 
Long Integer
Long  
 
adInteger
 
COUNTER (Synonym: AUTOINCREMENT)  
 
Hors, chez M$, long c'est :
 
Long data type
A fundamental data type that holds large integers. A Long variable is stored as a 32-bit (4-byte) number ranging in value from ?2,147,483,648 to 2,147,483,647. The type-declaration character is & (ANSI character 38).

Reply

Marsh Posté le 22-04-2003 à 12:34:54    

Pour vous répondre,  
 
Ma table possède au moins 15 champs, mais ça ne devrait pas être un problème! D plus, ma Base de Données fait moins de 20Mo!
 
Migrer à un autre SGBD, j'y ai déja pensé, mais vu que le logiciel que j'implémente (sous Access et VBA) est assez conséquent, ce passage est assez risqué (mon but à terme étant de migrer vers SQL Server et de considérer les tables SQL Server comme des tables Access et donc, de changer un minimum de choses à mon appli... J'ai déja fait le test, et y a plein de petites subtilités qui font que ca ne marche pas directement (genre, quand 'jouvre un recordSet avec un Autnumber, il faut que je rajoute l'attribut dbSeeChanges). De plus, c'est extrememnt lent :(
 
Bref, tout ça ne résoud pas mon problème...
 
En fait, j'ai trouvé un maniere de résoudre mon problème : je prend la table fautive, je la copie sous une autre table, j'efface la table originale, et je renomme la nouvelle table copiée pour lui redonner son vrai nom! Là, ca marche, Access retrouve ses marques, mais bon, c'est pas une solution en soit, je voudrait plutot que mon appli ne plante pas à cause de ça...
 
Merci pour vos réponses,
 
Yoyo*


---------------
It's nice to be important, but it's more important to be nice
Reply

Marsh Posté le 22-04-2003 à 12:48:21    

Yoyo > Tu utilises des recordset client, en mode connecté ?
 
Ben cherche pas plus loin, ton problème vient de là.
Change les options de ton recordset pour le forcer à euh...
 
Merde... Je sais plus, je cherche

Reply

Marsh Posté le 22-04-2003 à 12:53:58    

Pour le CursorType :
 
adOpenDynamic
 
CursorLocation :
 
adUseServer
 
LockType :
 
adLockPessimistic
 
http://msdn.microsoft.com/library/ [...] mdm_13.asp
 
Et fait attention à ce qui est écrit là : si tu change par exemple "adUseClient", le "adLockPessimistic" ne fonctionnera plus, sans rien te dire.
 
http://msdn.microsoft.com/library/ [...] ro04_1.asp
 
 
A priori, le pessimistic devrait résoudre le problème, puisque toute modification est exécutée côté serveur.


Message édité par MagicBuzz le 22-04-2003 à 12:54:04
Reply

Marsh Posté le 22-04-2003 à 15:20:21    

Merci MagicBuzz pour ta réponse...
 
Mais ici, dans le cas de mon problème, cen'est pas même aps une hsitoirede client/serveur : meme quand je vais directement altérer manuellement la table, en essaynt de rajouter un enregistrement, le probleme est là, et Access génère le mauvais autonumber !
 
Sinon, juste pour info, dans toute mon appli (cotés client et Serveru = Access), je n'utilise quasiment que du DAO... Peut etre qu'il faudrait que je songe à migrer petit à petit en ADO? Mais bon, cen'est pas mon probleme immédiat!
 
Merci,
 
Yoyo*
 


---------------
It's nice to be important, but it's more important to be nice
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed