Modifier un champs d'une table de base Access

cs_bobydi Messages postés 15 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 28 juin 2010 - 8 mars 2007 à 16:20
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 - 9 mars 2007 à 18:24
bonjour

j'utilise les méthodes
TableDef.Fields.Delete nom_champ
TableDef.CreateField(nom champ, type de champ)
pour modifier le type de données d'un champ dans une table access 2000

l'inconvénient est que le champ est supprimé et recréé donc les données sont perdues
y'a t'il un moyen de modifier (du genre TableDef.UpdateField ??) le type d'un champ sans perdre les données?

merci

didier

9 réponses

Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
8 mars 2007 à 17:01
He, je ne connais pas bien Access  mais une solution (un peut bourine c'est vrais) serrais de sauvegarder dans un tempon tes données ainsi que les clefs de tes données, tu modifi ton type de donnée, ensuite de ré-injecte tout cas. Quel quantité de donnée ta BdD dois gérer si cela ce compte en dizaine cette façon de faire dois marcher  si c'est plutôt des millier de données ca rique d'être sacrément long (et gourmand en mémoire). Si non je ne sais pas command faire.
En éspéran que ma réponce puise te servir.
Amicalement
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
8 mars 2007 à 17:04
He, si autre idée (mais je ne sais pas si ca marcherais avec Access) :
-> Tu crée un champ tempon
-> Copie du champ à modifier dans champ Tempon
-> Modification du type de champ
-> Copie du champ Tempon vers ton champ modifier
-> Déstruction du champ tempon

Oui je sais mes idée marche toutes avec un tempon () mais comme je le disais sur mon 1ér poste : je ne connais pas bien Access.
Amicalement
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
8 mars 2007 à 19:00
Salut,
 Inverse le processus

- TableDef.CreateField(nom champ, type de champ)

- Met à jour ton nouveau champ à partir de celui que
 tu veux supprimer

- TableDef.Fields.Delete nom_champ
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
8 mars 2007 à 19:40
oups !
il y' aurait un problème de nom de champ ...
je vais voir s' il y a possibilité de renommer
un champ
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
erefdatacomputing Messages postés 165 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 24 avril 2018
9 mars 2007 à 00:49
Salut à Tous !!! 

Il y a tout  (ou presque) dans MSDN qui est fourni avec VB6
(CD Authentique bien sûr !!)


Proverbe Rédarèssien du Jour:
 "Le Chercheur d'or à beaucoup plus de chance de faire fortune que le Mendiant !!

Un conseil:  "Cherche un peu !!!"   ça te sera plus bénéfique que de "Quemender" la réponse  !!!  

Mais bon ... comme le sujet des Bdd est plutôt ardu, et que moi aussi j'ai planché pour avoir certains résultats, je vais te piloter un peu .......

Alors si j'ai bien compris,  tu voudrais renommer une table d'une Bdd ??

**********************************************************

Mon exemple:

Une Form avec :   2 TextBox ('t' et 'ind'), 1 ListBox ('List1'), et 1 CommandButton ('Command1')

Valider les composants et Références necessaires !!
(Mais je pense que si tu bosse sur des Bdd, c'est déjà fait .....)

***********************************************************

Option Explicit
Dim BD As Database
Dim i As Interger
Dim enr As String
_____________________________________________________
Private Sub Form_Load()
Set BD = OpenDatabase("C:\test.mdb")  ' par exemple...
For i = 0 To BD.TableDefs.Count - 1
        List1.AddItem BD.TableDefs(i).Name
Next i
End Sub

List1 se remplie des tables existantes dans 'test.mdb', y compris les tables système dont le nom commence par "MSys"
(Surtout, à ne pas y 'Toucher' !!!!!  ...  Sinon ...  "ARMAGEDON" !!)
_____________________________________________________

on clique sur le nom de la table à modifier ...  il apparait dans la TextBox 't', et son N° d'index s'affiche dans la TextBox 'ind'

Private Sub List1_Click()
t = List1.Text
ind = List1.ListIndex
End Sub
_____________________________________________________

on écrit le nouveau nom de la table dans la TextBox 't', et on click sur le bouton ....

Private Sub Command1_Click()
enr = t
BD.TableDefs(Val(ind)).Name = enr
BD.TableDefs.Refresh
List1.Clear
    Set BD = OpenDatabase("C:\test.mdb")
For i = 0 To BD.TableDefs.Count - 1            ... le nom est modifié, 
           List1.AddItem BD.TableDefs(i).Name       et la liste  (List1)
Next i                                                                        remise à jour !!
End Sub
_____________________________________________________

Terminé !!!     à toi de l'adapter à ton code !!!

(PS: l'usage de certaines variables est peut-être facultatif ...)
 

Bon Courage pour la suite !!!............

Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!
0
erefdatacomputing Messages postés 165 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 24 avril 2018
9 mars 2007 à 00:54
PS2 :  Je sais que l'exemple que je t'ai fourni sert à modifier les nom des tables , et pas le nom des champs !!! 
mais c'est pour le principe !!!
Généralement si tu peux le faire avec ACCESS direct,  le code existe pour le faire !!!

Vas-y Lycos ....  Cherche !!   

Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!
0
erefdatacomputing Messages postés 165 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 24 avril 2018
9 mars 2007 à 01:39
Allez va !!  ....  Voilà la solution !!

Code:

' le '0'  (zéro) dans le TableDefs indique qu'on liste les champs de la 1ère Table Présente dans la Bdd   (d'où l'utilité du code que je t'ai fais passé précédement, pour afficher la liste des Tables d'une Bdd !!!)

Option Explicit
Dim BD As Database
Dim i As Integer
Dim enr As String
____________________________________________________

Private Sub Command1_Click()
enr = t
BD.TableDefs(0).Fields(Val(ind)).Name = enr
List1.Clear
For i = 0 To BD.TableDefs(0).Fields.Count - 1
        List1.AddItem BD.TableDefs(0).Fields(i).Name
Next i




End Sub
____________________________________________________




Private Sub Form_Load()
Set BD = OpenDatabase("C:\test.mdb")
BD.TableDefs(0).OpenRecordset



For i = 0 To BD.TableDefs(0).Fields.Count - 1
        List1.AddItem BD.TableDefs(0).Fields(i).Name
Next i




End Sub

____________________________________________________

Private Sub List1_Click()
t = List1.Text
ind = List1.ListIndex
End Sub

____________________________________________________

Voilà !!     à +

Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
9 mars 2007 à 14:50
Bonjour,
c' est ce qu' on appelle une "entrée en force"


Reprenons:


= Alors si j'ai bien compris,  tu voudrais renommer une table ...


Non , ic' est pas ça qu'il veut
Ce qu' il veut c' est Modifier la définition d' un champ sans que
ses données ne soient perdues.
Il a choisis de Supprimer le champ en question et Créer un nouveau
On lui a proposer de sauvegarder sa colonne avant de la supprimer.
Reste à savoir ou ?
Dans un champ temporaire ou dans la même table.
Un ami a suggéré un champ tampon,.J' ai proposé dans la même
table en oubliant qu' il y' aura confli de nom...
La question est donc si je crée un nouveau champ avec un nom
différent de celui qu' on veut supprimer et le et le renommer ensuite
avec nom.
Si renommer est possible avec


Dim xFld As Field
Set xFld=TableDef.Fields(TableDefs.Fields.Count-1) ' puisque c' est le dernier


xFld.Name="xNom"


Reste à savoir comment l' insèrer à la même place que celui
qu' on a supprimé.


C' est possible en changant (un à un les index des champs....

Bonne fin de journée
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
9 mars 2007 à 18:24
plus court encore (sans suppression ni création)


Dim xFld As Field
Set xFld=TableDef.Fields(SonRang)
xFld.Type=<NouveauType>
à condition que l' Ex_Type peut être convertit au nouveau
(Numérique vers String par exemple) sinon tout sera perdu !
0
Rejoignez-nous