IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

modifier type de champs dans table de base access 2000


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 10
    Points
    10
    Par défaut modifier type de champs dans table de base access 2000
    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

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    J'ai ouvert Access (et un de mes anciens programmes), j'ai tapé le nom d'une TableDef disponible, j'ai tapé un point et, dans la liste que m'a donné l'Intellisense, j'ai choisi Fields.
    J'ai tapé un index (1) puis un point.
    Dans la liste proposée par l'Intellisense, j'ai vu Type.
    J'en conclus donc que ta commande devrait ressembler à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableDef.Fields(1).Type = dbText
    Autrement dit, les questions que vous posez, vous pourriez y trouver les réponses vous-mêmes avec un peu de bonne volonté.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    ca qui montre que l'intellisense qui a autant de bon sens que j'ai de bonne volonté, me retourne le Type du champ que je connais déjà mais:

    TableDef.Fields(1).Type = dbText
    ne met pas à jour le Type du champ

    mais ton idée est bonne , je vais approfondir pour trouver la cmd de mise à jour

    merci

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Effectivement, je viens de vérifier.
    Type est en lecture seule.

    Désolé pour mon commentaire sur la "bonne volonté", il ne s'appliquait pas dans ce cas.

    Dans l'aide, j'ai trouvé qu'il faut faire les modifications de champs via une requête SQL "ALTER TABLE".

    Edit: Finalement, j'aurais mieux fait de ne rien dire...
    Je ne trouve pas comment modifier le type d'un champs déjà créé autrement qu'en créant une nouvelle table et en y important les données de la première.

    Quelqu'un connait peut-être une autre méthode, mais pas moi.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Je suis arrivé a la même conclusion, je crois bien que access, qui semble savoir le faire, utilise en fait la même methode :
    Créer un Nouveau champs dans le bon type, y copier toutes les données du champs a supprimer, suprimer le champs, donner le ordinalposition du champs d'origine

    Ce qui en dao donnerait pour modifier la taille d'un champs texte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Public Function StChangeFieldSize(BaseName As String, TableName As String, FieldName As String, NewSize As Integer)
        'BaseName  = nom de la base
        'TableName = nom de la table
        'FieldName = nom du field
        'NewSize = nouvelle taille
        Dim Dbse As DAO.Database
        Dim Tble As DAO.TableDef
        Dim F1 As DAO.Field
        Dim F2 As DAO.Field
        Dim OldPos As Integer
        Set Dbse = DAO.OpenDatabase(BaseName)
        Set Tble = Dbse.TableDefs(TableName)
        On Error GoTo erreurStChangeFieldName
        Set F1 = Tble.Fields(FieldName)
        If F1.Size = NewSize Then Exit Function 'deja fait
        OldPos = F1.OrdinalPosition
     
        Set F2 = Tble.CreateField("Temp", dbText, NewSize)
        Tble.Fields.Append F2
        Dbse.Execute "update [" & TableName & "] set Temp=[" & FieldName & "]"
        Tble.Fields.Delete FieldName
        F2.Name = FieldName
        F2.OrdinalPosition = OldPos
        On Error GoTo 0
        StChangeFieldSize = 0
    SortChangeFieldSize:
        Dbse.Close
        Exit Function
    erreurStChangeFieldName:
        StChangeFieldSize = -1
        If TraiteErreur Then
            MsgBox "Erreur n° " & Str$(Err) & vbCrLf & Err.Description, , _
                   "SqChangeFieldSize(" & BaseName & "," & _
                                     TableName & "," & _
                                     FieldName & "," & _
                                     NewSize & ")"
        End If
        Resume SortChangeFieldSize
     
    End Function
    Je ne connais pas ADO, donc a transposer
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pour changer le type de champ il faut passer par du SQL.

    Va voir ici

    http://access.developpez.com/faq/?pa...s#ModifTypeChp

    pour les paramétres de type va voir dans les tutos sql

    Starec

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 10
    Points
    10
    Par défaut maj d'un champ dans une base access: pb resolu
    bonjour et merci de votre aide, particulierement à Delbeke.

    la mise à jour du type de champs dans la base access fonctionne à merveille sans perdre les données

    j'ai demandé des conseils, je les ai suivis, et je ne le regrette pas, désolé pour Alexandre Dumas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/06/2015, 11h20
  2. [AC-2010] Lier champs de type liste déroulante dans table
    Par py86acces dans le forum Access
    Réponses: 10
    Dernier message: 20/01/2015, 21h55
  3. Probleme de Type de champs dans une table access
    Par dimis dans le forum Modélisation
    Réponses: 3
    Dernier message: 23/07/2009, 10h15
  4. Définir le futur type de champ dans une requête création de table
    Par Fredo67 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/02/2007, 18h19
  5. Ajouter un champ dans une autre base Access
    Par scaalp dans le forum Access
    Réponses: 2
    Dernier message: 20/10/2005, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo