Il me semble que le Alter Table doit fonctionner, mais c’est parfois un peu différent dans Access.
Si jamais tu peux essayer de créer la requête voulue dans Access et ensuite de l’afficher en mode SQL et faire un copier-coller du code.
Sinon en accès DAO (mais je crois que ADO ça doit être à peu près la même procédure), il y a l’objet TableDefs par lequel tu peux passer pour accéder aux attributs (colonnes) et ainsi en ajouter.
dim td as TableDef
td = db.TableDefs("MaTable") 'db est un objet "Database"
td.CreateField "nom", "type", "taille"
Le plus simple : tu fais une requête de création de table, en ajoutant à l’ancienne ton nouveau champ à la place que tu veux
Ou alors tu fais en vba
Dim champ As Field
Set champ = CurrentDb.TableDefs!.CreateField()
CurrentDb.TableDefs().Fields.Append champ
Après avoir contrôlé, le “ALTER TABLE” doit marcher.
Par exemple cette commande fonctionne:
DoCmd.RunSQL “ALTER TABLE ma_table ADD COLUMN [mon_champ] TEXT;”
Donc vérifie que tu n’as pas fait d’erreur de frappe ou oubli de guillemets ou autre.
Et il me semble que avec AFTER c’est “AFTER ma_colonne” et pas “AFTER COLUMN ma_colonne”.
Tu as fait comment ?
merci jray d’avoir répondu mais le problème n’est pas la syntaxe :
DoCmd.RunSQL “ALTER TABLE ADD COLUMN ;”
mais pluto la syntaxe suivante :
DoCmd.RunSQL “ALTER TABLE ADD COLUMN AFTER COLUMN ;”
donc je voulais savoir comment je peux faire pour insérer un nouveau champ à une place bien précise dans une table, si tu peu aider, ton aide es la bienvenue jray??
ok jray, jvé essayé!!
pour te rép gcc, je veux pas créer une nouvelle table, je veux conserver et rester dans la même table!!
ben oui justement c’est bien ce que je te dit gcc, je ne veux pas effacer ma table actuelle!! je préfére la conserver car ce n’est pas pour moi donc vaut mieu pas que je fasse ca!!dsl
pour te rép : jray : j'ai remplacer "AFTER COLUMN ma_colonne" par "AFTER ma_colonne" mais toujours le même souci!!
ok, merci que même , jvé essayer de voir ca!!mé el fé koi exactement cette formule?? cr jla conné po trop!!(normal j’ai un peu de mal en vba pi ya tro dchose!!lol)
merci bcp jray, C gentil!
Oups, ben ne nous énervons pas trop, parce que avec l’obje TableDefs il y a la fonction “Append” qui permet d’ajouter un champ à la fin, mais je n’ai pas non plus trouvé le moyen de définir l’ordre.
Il y a bien une solution qui consiste à faire une copie en réordonnant les champs et ensuite effacer l’originale, mais c’est pas très propre. :peur:
Ben tu ajoute le ou les champs qu’il te faut à la suite dans ta table (“ALTER TABLE ma_table ADD COLUMN mon_champ type;”)
Tu as par exemple ça, après l’opération:
[MaTable1]
Champ1
Champ2
Champ5
Champ6
Champ3 (ajouté par VBA à la fin)
Champ4 (ajouté par VBA à la fin)
Et ensuite soit avec l’objets TableDefs soit avec SQL, tu copies la table en modifiant sa structure.
Il me semble qu’en SQL tu dois pouvoir faire qqch du style:
Create table MaTable2 select Champ, Champ2, Champ3, … from Table1
Et ensuite Il faut renommer la table soit de nouveau avec TableDefs soit en faisant à nouveau une copie de la table, par ce que le :@ de SQL simplifié de MS ne supporte pas non plus le ALTER TABLE … RENAME …
Edité le 12/06/2007 à 16:07
oulaaaaaaaaaaaaaaa, oué ben ca mtente bof puis ca va étre lourd!! puis apré fo aussi ke jrécupére toute les donnée que j’avai sur ma table donc lourd!!jvéré ca demlain (si ta une nvle idée tien mi o courant!!) jrentre chez mi, g fini ma journée !!lol.
merci bcp!!
M’ais l’aide MSDN n’est pas très claire, je ne suis pas sûr que cette propriété soit en lecture/écriture dans tu as déjà des données dans la table. A tester.
gcc> oui, j’avoue que je n’ai pas lu en détails tous les posts, mais il me semble que très peu parlent de l’ordre des champs, moi je me suis concentré sur cette problèmatique, après l’import.
Car à l’import il existe pas mal de possibilités, mais pas toujours évident (voir Google, je n’ai pas un lien particulier à donner)
Personnellement je pense qu’il y a plus de possibilités en passant par un programe VB externe autonome. Ce sera aussi plus souple mais un peu plus compliqué à programmer, mais en faisant soi-même la lecture de la feuille Excel et l’écriture dans Access, là il est possible de modifier l’ordre des champs comme on l’entend.
quel lecture de la feuille Excel parle tu jray?? Dans mon problème j’ai pas de feuille Excel!! G juste à rajouter un champ et à le placer entre 2 autres champs(enfin si possible ca seré mieu mé bon) mais jaimeré le faire sans avoir le besoin de tout supprimer et tt refaire.
Ben au début du topic du parles de transféer Excel (DoCmd.TransferSreadsheet).
Mais si c’est juste une fois que tu dois ajouter un champ, le plus simple est de le faire manuellement dans Access. Ou faire l’ajout du champ à la fin de la table et l’insertion des données en VBA, puis ensuite déplacer le champ manuellement (par simple glisser-déplacer) si l’ordre est vraiment inportant pour toi (on peut toujours faire des requêtes après, pour faires des listes ordonnées).