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

VBA Access Discussion :

Comment formater en Décimal un champ texte d'une table via DAO et TableDef


Sujet :

VBA Access

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut Comment formater en Décimal un champ texte d'une table via DAO et TableDef
    Bonjour à tous,

    J'ai eu beau chercher je n'ai pas trouvé comment avec TableDef je peux transformer un champ texte en décimal (18,8) sachant que

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE TExport_Cal_FG_COU_Final 
    ALTER COLUMN Qte_OF_PF DECIMAL (18,8)

    Me génère un message d'erreur qu'elle soit lancer le générateur de requête ou de docmd.runsql ou currentdb.excute.

    Merci par avance
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Je ne suis pas sur que ce soit faisable.

    Je souspconnes Access de faire une creation suivi d'une suppression en cachette quand tu passes par l'interface.

    Si c'est possible, c'est probablement quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dim db as dao.database:set db=currentdb
    dim t as dao.tabledef:set t=db.tabledefs("TaTable")
    dim f as dao.field: set f=t.fields("TonChamp")
    f.type=adText
    f.size=255
    set f=nothing
    set t=nothing
    db.close:set db=nothing
    Évidement si ton besoin est juste d'afficher un nombre en texte, tu peux utiliser une requête et la fonction Format().

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    Citation Envoyé par marot_r
    Je souspconnes Access de faire une creation suivi d'une suppression en cachette quand tu passes par l'interface.
    Je confirme ce que dit marot_r:
    il semble que par DAO il ne soit pas possible de le faire directement avec un champ déjà existant, j'ai essayé mais j'ai l'erreur d'exécution 3219 "Opération non valide".
    je pense qu'il faut créer un nouveau champ puis supprimer l'ancien.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  4. #4
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Bonjour,

    Avec ado est-ce que ça passe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    currentProject.connection.execute "Alter ..."

  5. #5
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Une solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Commande1_Click()
        Dim dbs As DAO.Database
        Dim tdf As DAO.TableDef
        Dim fld As DAO.Field
        Set dbs = CurrentDb()
        Set tdf = dbs.TableDefs("TExport_Cal_FG_COU_Final")
        tdf.Fields.Append tdf.CreateField("Qte_OF_PF", dbSingle) 'Ajoute le champ numérique réel simple
        tdf.Fields.Delete "Qte_OF_PF" 'Supprime le champ
        Set fld = Nothing
        Set tdf = Nothing
        Set dbs = Nothing
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  6. #6
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Citation Envoyé par informer Voir le message
    Bonjour hyperion13
    Merci pour le code mais 2 objections
    Je veux déclarer un champ en Décimal
    L'ajout se fait en dernière position et je dois garder une même structure car la table est ensuite cha
    Nous sommes bien d'accord Qte_OF_PF est bien de type Texte à l'origine et tu veux le modifier en numérique, réel simple.
    Quelle est la position du champ Qte_OF_PF dans la tbl svp ? Le champ contient-il déjà des valeurs ?
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Nous sommes bien d'accord Qte_OF_PF est bien de type Texte à l'origine et tu veux le modifier en numérique, réel simple.
    Quelle est la position du champ Qte_OF_PF dans la tbl svp ? Le champ contient-il déjà des valeurs ?

    • Je veux passer un champ texte en champ DECIMAL(18,8)
    • Et mon champ doit rester à la même position dans ma table car elle est ensuite historisée dans une table qui a la même structure à la marge de 2 champs dDate et Seq.


    Merci pour ton aide hyperion13
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour informer,
    Je veux passer un champ texte en champ DECIMAL(18,8)
    le souci est que DAO ne reconnait pas le type dbDecimal (qui est pourtant membre de DataTypeEnum) en création de champ, l'erreur 3259 est levée (type de champ de données non valide).
    - Peux-tu expliquer pourquoi la table doit être créée par code et pas manuellement ?
    - La table est-elle vide ou chargée lorsque que tu souhaites créer ou modifier le champ ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Tee_grandbois,

    J'ai hérité d'un projet Access dans lequel tous les champs de toutes les tables sont en texte, un choix malheureux mais c'est comme ça.

    Je fais une requête qui depuis une requête crée une table mais même en castant les champs du bon type, la table créée est tout en texte.

    Voilà mon problème

    Bien sûr , je peux faire une table modèle et la copier en structure pour que la requête charge cette table copie de la master mais préferais la solution de modifier les champs texte au bon format et notamment en Décimal.


    Si pas possible de passer par ALTER TABLE ALTER COLUMN alors on bascule sur la solution dégradée.

    Merci encore pour ton aide
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  10. #10
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Le plus simple alors, aurait été de créer manuellement la tbl TExport_Cal_FG_COU_Final, de formater correctement l'ensemble des champs et d'utiliser une req Ajout pour alimenter ladite tbl.
    A tester
    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
    Private Sub Commande1_Click()
        Dim dbs As DAO.Database
        Dim tdf As DAO.TableDef
        Dim fld As DAO.Field
        Set dbs = CurrentDb()
        dbs.TableDefs.Refresh
        Set tdf = dbs.TableDefs("TExport_Cal_FG_COU_Final")
        Set fld = tdf.CreateField("Qte_OF_PF_New", dbSingle)
        fld.OrdinalPosition = X ' remplacer X par le numéro de ligne qui suit Qte_OF_PF. En clair, si Qte_OF_PF est le 4è champ de la tbl remplacer X par 5
        tdf.Fields.Append fld
        dbs.Execute "Update TExport_Cal_FG_COU_Final Set Qte_OF_PF_New=Qte_OF_PF", dbFailOnError
        tdf.Fields.Delete "Qte_OF_PF"
        tdf.Fields.Refresh
        tdf.Fields("Qte_OF_PF_New").Name = "Qte_OF_PF"
        tdf.Fields.Refresh
        Set tdf = Nothing
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bonjour hyperion13 ,

    Super info qui resoudrait mon problème si je savais comment créer un champ au format decimal (18,8) ?

    Mais encore merci pour le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fld.OrdinalPosition = X '
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  12. #12
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 284
    Points : 284
    Points
    284
    Par défaut
    Bonjour,
    Juste une une idée :
    Au lieu de transformer le champs en DECIMAL(18,8), faire le contraire : transformer les champs DECIMAL(18,8) en TEXT(XX),
    Bien sur il faut créer manuellement 1 table vide modèle avec le nombre de colonnes maxi en DECIMAL(18,8) puis tu dupliques cette table avant de renommer, transformer en TEXT(XX) les champs à conserver en l'état et enfin les remplir avec ceux de ta table initiale toute en TEXT.
    Un travail qui plait est à moitié fait.

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bonjour Tortille ,


    J'en suis arrive à cette solution.

    La question était de savoir s'il était possible avec du VBA / SQL de declarer/formatter un champ en DECIMAL.

    Il semblerait que pas facile car si creation par SAL alors pas la main sur la position de l'ajout du champ sauf peut-être à utliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fld.OrdinalPosition = X '
    Mais pas le temps de voir comment

    Merci pour ton aide
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  14. #14
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Citation Envoyé par Arkham46 Voir le message
    Bonjour,

    Avec ado est-ce que ça passe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    currentProject.connection.execute "Alter ..."
    Je réitère ma question.
    Avec ADO ça doit fonctionner.

  15. #15
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Arkham46 ,

    Dès que je le teste, je te fais un retour!

    Merci encore
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

Discussions similaires

  1. Javascript :comment enable ou disable un champ text
    Par cyrilherve dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/09/2009, 09h37
  2. comment recuperer valeur d'un champ Text
    Par ____22 dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 13/03/2009, 10h13
  3. Réponses: 21
    Dernier message: 25/12/2008, 21h44
  4. Changer la description d'un champ texte via code
    Par c_d_o_s dans le forum Reports
    Réponses: 8
    Dernier message: 29/05/2008, 11h47
  5. Mise à jour d'un champ texte via une liste déroulante
    Par dedein84 dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2008, 20h24

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