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 :

Modifier une table liée


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    fais ce que je peux en n'informatique
    Inscrit en
    Janvier 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : fais ce que je peux en n'informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 60
    Points : 30
    Points
    30
    Par défaut Modifier une table liée
    Bonjour,
    Est-il possible de modifier une table lié ?

    Je dois :
    1) modifier la taille d'un champ en le passant de 50 à 100 caractères
    2) ajouter un champ dans une autre table

    Merci de votre aide.

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,

    C'est tout à fait possible par VBA (voir cet excellent tuto DAO), sauf pour l'agrandissement d'un champ texte où il faut :
    - créer un nouveau champ + grand
    - recopier les valeurs
    - effacer l'ancien
    - renommer le nouveau champ

    voici le code que j'utilise :
    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
    Public Sub Agrandir(odb As Object, table As String, champ As String, lg As Integer)
    If Not Mode_debug Then On Error GoTo err:
    Dim oTbl As DAO.TableDef, oFld As DAO.Field, prp As DAO.Property
     
    100 Set oTbl = odb.TableDefs(table)
    102 Set oFld = oTbl.CreateField("x", dbText, lg)
    104 oFld.Required = False        'Null interdit ?
    106 oFld.AllowZeroLength = True  'chaine vide autorisée ?
    108 oTbl.Fields.Append oFld      'Ajoute le champ à la table
    On Error GoTo e:   '10.9g parfois le champ n'a pas de description
    110 Set prp = oFld.CreateProperty("Description", dbText, oTbl.Fields(champ).Properties("Description"))
    112 oFld.Properties.Append prp
    e:
    If Not Mode_debug Then On Error GoTo err:
    114 odb.Execute "UPDATE " & table & " SET x=" & champ, dbFailOnError
    116 oTbl.Fields.Delete champ
    118 oTbl.Fields("x").Name = champ
    120 Set prp = Nothing
    122 Set oFld = Nothing
    124 Set oTbl = Nothing
        Exit Sub
    err: Call message("Erreur " & err.Number & "/" & Erl & " dans fonctions.Agrandir : " & err.description)
    End Sub

  3. #3
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Willou-78 et Nico84,

    Je me permets de m'immiscer, Nico84... tu m'apprends quelque chose. Néanmoins, je trouve cela très dangereux.

    Willou-78, pourquoi ne modifies-tu pas la structure de ta table initiale ?

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Dans le cas d'un logiciel utilisé par plusieurs clients c'est très pratique au contraire car une fois le code écrit dans la dorsale tu es sûr que toutes les frontales subiront la même modification

    Chaque nouvelle version de frontale est donc livrée avec un "patch" qui modifie la frontale à sa première exécution

  5. #5
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Oui, oui, je comprends bien (et bravo encore).

    Mais, en fait, la question est plus d'ordre "politique" que technique : c'est la raison pour laquelle elle s'adresse plus à Willou-78.

    Je ne sais pas pourquoi Willou-78 veut modifier la structure de la table par code :
    • si c'est pour la raison que tu évoques, OK, ;
    • si c'est pour passer "au-dessus" de l'éventuel DBA (ou celui qui a la responsabilité de la structure de la base), tu imagines le bazar .

    Mais bon, "cela ne nous regarde pas"...

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Dans mon cas, la dorsale est protégée par un mot de passe donc seule ma frontale peut la modifier (et l'administrateur du client mais il sait que ce n'est pas son intérêt )

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    fais ce que je peux en n'informatique
    Inscrit en
    Janvier 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : fais ce que je peux en n'informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Bonjour nico84 et Richard_35
    Merci pour cette aide

    Je suis à l'origine d'une base de données de gestion d'emprunt de films, et accessoirement gestion des caractéristiques de Films mais aussi Albums de musique, que j'ai mis en libre distribution sur le net.

    Je livre donc un fichier "serveur" contenant la base et un fichier "client" contenant l'interface. Je peux dont faire évoluer mon produit sans casser la base de données, en livrant uniquement le nouveau fichier "interface"

    Récemment, je me suis rendu compte d'un bug suite à son évolution (concaténation prenant trop de place dans un champ (Support (DVD, BluRay...) & Titre & Supplement) et j'ai voulu intégrer (UNION) la section "album de musique" à la gestion d'emprunt mais il me manquait le champs "support" (SACD, CD).

    Alors, d'habitude je crée une base de données supplémentaire, appelé "module", que je lie à la base de données "serveur" . Mais ça ne fait pas très pro et un de mes produits comporte déjà 6 modules tandis que ma gestion d'emprunt n'en à pas encore.

    voilà

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    fais ce que je peux en n'informatique
    Inscrit en
    Janvier 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : fais ce que je peux en n'informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Suivant le tuto Access, j'ai trouvé le code suivant pour créer un champ, l'ai intégré à un bouton de commande.

    lorsque j'éxécute cette commande, il y a une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Erreur d'execution '424'
     
    Objet requis
    à la ligne (en rouge), Fld = vide

    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
    Private Sub Commande131_Click()
        Dim oDb As DAO.Database
        Dim oTbl As DAO.TableDef
        Dim oFld As DAO.Field
        Set oDb = CurrentDb
        Set oTbl = oDb.TableDefs("A Aide")
        'Etape 1 : Créer le champ
        Set oFld = oTbl.CreateField("test", dbText, 120)
        'Etape 2 : Définit les propriétés
        oFld.AllowZeroLength = False 'Chaine vide autorisée : Non
        oFld.Required = True         'Null interdit : Oui
        'Etape 3 : Ajout du champ à la table
        oTbl.Fields.Append Fld
        'Rafraichit la collection
        oTbl.Fields.Refresh
    End Sub
    Que puis-je faire ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour
    Fld ou oFld?

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    fais ce que je peux en n'informatique
    Inscrit en
    Janvier 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : fais ce que je peux en n'informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Bonjour,
    J'ai recopié bêtement le code. il fonctionne mieux avec oFLD
    Par contre, il ne fonctionne pas avec une table attaché, ce que je craignais

    donc, il est impossible de créer un champs dans une table attaché ?

  11. #11
    Invité
    Invité(e)
    Par défaut
    On peut le faire sur la dorsale.
    A condition qu'elle ne soit pas déjà utilisée dans la frontale;

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    fais ce que je peux en n'informatique
    Inscrit en
    Janvier 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : fais ce que je peux en n'informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Désolé, je n'ai pas la moindre idée de ce qu'est la Dorsale, ni la Frontale ?

  13. #13
    Invité
    Invité(e)
    Par défaut
    Si la table est liée, il faut agir sur la base ou est stockée la table d'origine (dorsale).

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    fais ce que je peux en n'informatique
    Inscrit en
    Janvier 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : fais ce que je peux en n'informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    donc, en claire, la seule solution est de rappatrier les fichiers des bases de toutes les personnes qui les ont téléchargées ?

  15. #15
    Invité
    Invité(e)
    Par défaut
    Non car le fichier "client" peut tout à fait à l'ouverture vérifier que la table du fichier "serveur" est conforme et dans la négative faire la modif sur le fichier "serveur".
    J'ai repris les termes que tu utilisais.

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    fais ce que je peux en n'informatique
    Inscrit en
    Janvier 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : fais ce que je peux en n'informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    D'accord, mais c'est vraiment au dessus de mes compétances en, auriez-vous une petite idée du code à appliquer ?

  17. #17
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,

    Pour cela, il suffit déclarer le bon odb :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim wrk As DAO.WorkSpace
    Set wrk = DBEngine.Workspaces(0)
    Set odb = wrk.OpenDatabase("chemin_et_nom_de_ma_base_de_données", False, False, "MS Access;PWD=MonMotDePasse")

Discussions similaires

  1. Modifier une table liée en cours de lecture
    Par béodéo dans le forum VBA Access
    Réponses: 21
    Dernier message: 07/11/2012, 15h13
  2. Modifier la structure d'une table liée
    Par Stargate SG1 dans le forum VBA Access
    Réponses: 2
    Dernier message: 09/05/2009, 12h56
  3. Modifier le type d'un champ d'une table liée à un fichier CSV
    Par Borowsky dans le forum Modélisation
    Réponses: 3
    Dernier message: 26/03/2009, 12h14
  4. Comment modifier un champ dans une table liée ?
    Par HookerSeven dans le forum Access
    Réponses: 11
    Dernier message: 05/02/2006, 23h50

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