Problème pour déclaration d'un champ auto increment

Problème pour déclaration d'un champ auto increment - VB/VBA/VBS - Programmation

Marsh Posté le 11-04-2006 à 09:13:20    

Bonjour,
 
je sais que ce problème à ce sujet revient souvent, mais je n'ai pas réussi à trouver la réponse à ma question.
Donc sous access, en vba j'essaye de créer des tables et l'un des champs de ces tables doit être de type auto increment mais je ne parvient pas à le déclarer correctement. J'ai essayé différentes méthodes mais sans succès et voici la dernière en date : CurrentDb.Execute "CREATE TABLE STATION__ (Id_station INT AUTO_INCREMENT PRIMARY KEY, Nom VARCHAR (50))"
 
Voila j'espère que vous pourrez m'aider
Merci

Reply

Marsh Posté le 11-04-2006 à 09:13:20   

Reply

Marsh Posté le 11-04-2006 à 10:05:16    

Pour les numéros automatiques, il ne faut pas spécifier le type et le mot clef est AUTOINCREMENT sans underscore :
 


CurrentDb.Execute "CREATE TABLE STATION__ (Id_station AUTOINCREMENT PRIMARY KEY, Nom VARCHAR (50))"

 

Reply

Marsh Posté le 11-04-2006 à 11:01:25    

ok merci ça marche :) il me semblait pourtant avoir déjà essayé cette méthode. Enfin bref le principale c'est que celà fonctionne encore merci

Reply

Marsh Posté le 12-04-2006 à 09:54:31    

Une autre petite question si je souhaite déclarer la table de la façon suivante :

Code :
  1. Dim Table As TableDef, Idx As Index
  2. Dim Chp As Field, Bd As Database
  3. Set Bd = CurrentDb
  4. CurrentDb.Execute "DROP TABLE STATION__"
  5. Set Table = CurrentDb.CreateTableDef("STATION" )
  6. With Table.Fields
  7.     .Append Table.CreateField("Id_station", AUTOINCREMENT)
  8.     .Append Table.CreateField("Nom", dbText, 50)
  9. End With
  10. Set Idx = Table.CreateIndex("I1" )
  11. Idx.Fields.Append Idx.CreateField("Id_station" )
  12. Idx.Primary = True
  13. Table.Indexes.Append Idx
  14. Bd.TableDefs.Append Table


 
Comment je fais pour déclarer le champ autoincrement ??

Reply

Marsh Posté le 12-04-2006 à 10:30:25    

Of course .Append Table.CreateField("Id_station", AUTOINCREMENT) ne va pas marcher, il faut un dbquelquechose.
 
En m'inspirant de lexemple à http://msdn.microsoft.com/library/ [...] abaseX.asp je pense qu'il faut faire :

With Table.Fields
    .Append Table.CreateField("Id_station", dbLong + dbAutoIncrField)
    .Append Table.CreateField("Nom", dbText, 50)
End With

Reply

Marsh Posté le 12-04-2006 à 10:35:57    

je viens d'essayer mais ça ne marche pas.
Erreur : type de champs de données non valide

Reply

Marsh Posté le 12-04-2006 à 10:38:13    

Sinon je fais :

Code :
  1. Set Table = CurrentDb.CreateTableDef("UF__" )
  2. Set Chp = Table.CreateField("Id_uf", dbLong)
  3. Chp.OrdinalPosition = 1
  4. Chp.Attributes = dbAutoIncrField
  5. Table.Fields.Append Chp
  6. Set Chp = Table.CreateField("Num_uf", dbText, 50)
  7. Table.Fields.Append Chp
  8. Set Chp = Table.CreateField("Id_equip", dbLong)
  9. Table.Fields.Append Chp
  10. Set Chp = Table.CreateField("Libelle", dbText, 50)
  11. Table.Fields.Append Chp
  12. Set Idx = Table.CreateIndex("I2" )
  13. Idx.Primary = True
  14. Idx.Required = True
  15. Idx.Unique = True
  16. Set Chp = Idx.CreateField("Num_uf" )
  17. Idx.Fields.Append Chp
  18. Set Chp = Idx.CreateField("Id_equip" )
  19. Idx.Fields.Append Chp
  20. Table.Indexes.Append Idx
  21. Bd.TableDefs.Append Table


 
donc la le champ est bien en NumeroAuto mais la le problème c'est que mes champs ne sont pas indexés

Reply

Marsh Posté le 12-04-2006 à 11:03:43    

en fait j'ai remarqué que c'est lorsque je met plusieurs champs dans l'index que ça ne marche plus mais je n'ai pas de message d'erreur.

Reply

Marsh Posté le 12-04-2006 à 11:36:40    

Le fait d'ajouter les champs à la collection de l'index avant de déclarer la propriété .Primary = True change-t-il quelque chose ?

Reply

Marsh Posté le 12-04-2006 à 12:34:28    

Non celà ne change rien

Reply

Marsh Posté le 12-04-2006 à 12:34:28   

Reply

Marsh Posté le 13-04-2006 à 16:29:31    

Personne ne peut m'aider... :(

Reply

Marsh Posté le 13-04-2006 à 16:40:12    

Le lien chez Microsoft que j'ai cité plus haut donne un exemple qui marche (bien sûr c'est un peu différent, faut un peu l'adapter), et une rapide recherche sur Google avec les mots CreateIndex et CreateField retourne d'autres réponses qui constituent une source d'inspiration pour ta solution.

Reply

Sujets relatifs:

Leave a Replay

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