cs_bobydi
Messages postés15Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention28 juin 2010
-
8 mars 2007 à 16:20
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 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?
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 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
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 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
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 !!!
erefdatacomputing
Messages postés165Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention24 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 !!!
erefdatacomputing
Messages postés165Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention24 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
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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....
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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 !