Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/01/2012, 11h28   #1
Invité de passage
 
Homme William Grognot
Administrateur systèmes et réseaux
Inscription : janvier 2012
Messages : 20
Détails du profil
Informations personnelles :
Nom : Homme William Grognot
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Conseil

Informations forums :
Inscription : janvier 2012
Messages : 20
Points : 0
Points : 0
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.
willou-78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 13h53   #2
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 258
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2008
Messages : 1 258
Points : 1 877
Points : 1 877
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 :
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
nico84 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/01/2012, 14h19   #3
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
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 ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 15h08   #4
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 258
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2008
Messages : 1 258
Points : 1 877
Points : 1 877
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
nico84 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 15h19   #5
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
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"...
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 16h30   #6
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 258
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2008
Messages : 1 258
Points : 1 877
Points : 1 877
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 )
nico84 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 17h01   #7
Invité de passage
 
Homme William Grognot
Administrateur systèmes et réseaux
Inscription : janvier 2012
Messages : 20
Détails du profil
Informations personnelles :
Nom : Homme William Grognot
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Conseil

Informations forums :
Inscription : janvier 2012
Messages : 20
Points : 0
Points : 0
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à
willou-78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 10h59   #8
Invité de passage
 
Homme William Grognot
Administrateur systèmes et réseaux
Inscription : janvier 2012
Messages : 20
Détails du profil
Informations personnelles :
Nom : Homme William Grognot
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Conseil

Informations forums :
Inscription : janvier 2012
Messages : 20
Points : 0
Points : 0
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 :
1
2
3
Erreur d'execution '424'
 
Objet requis
à la ligne (en rouge), Fld = vide

Code :
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 ?
willou-78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 11h19   #9
Rédacteur/Modérateur
 
Avatar de GAYOT
 
Homme Jean-Damien GAYOT
Inscription : novembre 2004
Messages : 2 076
Détails du profil
Informations personnelles :
Nom : Homme Jean-Damien GAYOT
Âge : 56
Localisation : France, Meuse (Lorraine)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : novembre 2004
Messages : 2 076
Points : 4 396
Points : 4 396
Envoyer un message via Skype™ à GAYOT
Bonjour
Fld ou oFld?
__________________
Plus j'avance et plus j'ai l'impression de ne rien savoir. Et comme j'essaie d'aller loin..!!.

Tutoriels sur:http://jdgayot.developpez.com

Pas de sujets techniques par Mp. Sinon
GAYOT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 11h35   #10
Invité de passage
 
Homme William Grognot
Administrateur systèmes et réseaux
Inscription : janvier 2012
Messages : 20
Détails du profil
Informations personnelles :
Nom : Homme William Grognot
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Conseil

Informations forums :
Inscription : janvier 2012
Messages : 20
Points : 0
Points : 0
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é ?
willou-78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 11h41   #11
Rédacteur/Modérateur
 
Avatar de GAYOT
 
Homme Jean-Damien GAYOT
Inscription : novembre 2004
Messages : 2 076
Détails du profil
Informations personnelles :
Nom : Homme Jean-Damien GAYOT
Âge : 56
Localisation : France, Meuse (Lorraine)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : novembre 2004
Messages : 2 076
Points : 4 396
Points : 4 396
Envoyer un message via Skype™ à GAYOT
On peut le faire sur la dorsale.
A condition qu'elle ne soit pas déjà utilisée dans la frontale;
__________________
Plus j'avance et plus j'ai l'impression de ne rien savoir. Et comme j'essaie d'aller loin..!!.

Tutoriels sur:http://jdgayot.developpez.com

Pas de sujets techniques par Mp. Sinon
GAYOT est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 14/01/2012, 17h51   #12
Invité de passage
 
Homme William Grognot
Administrateur systèmes et réseaux
Inscription : janvier 2012
Messages : 20
Détails du profil
Informations personnelles :
Nom : Homme William Grognot
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Conseil

Informations forums :
Inscription : janvier 2012
Messages : 20
Points : 0
Points : 0
Désolé, je n'ai pas la moindre idée de ce qu'est la Dorsale, ni la Frontale ?
willou-78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 18h43   #13
Rédacteur/Modérateur
 
Avatar de GAYOT
 
Homme Jean-Damien GAYOT
Inscription : novembre 2004
Messages : 2 076
Détails du profil
Informations personnelles :
Nom : Homme Jean-Damien GAYOT
Âge : 56
Localisation : France, Meuse (Lorraine)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : novembre 2004
Messages : 2 076
Points : 4 396
Points : 4 396
Envoyer un message via Skype™ à GAYOT
Si la table est liée, il faut agir sur la base ou est stockée la table d'origine (dorsale).
__________________
Plus j'avance et plus j'ai l'impression de ne rien savoir. Et comme j'essaie d'aller loin..!!.

Tutoriels sur:http://jdgayot.developpez.com

Pas de sujets techniques par Mp. Sinon
GAYOT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 12h03   #14
Invité de passage
 
Homme William Grognot
Administrateur systèmes et réseaux
Inscription : janvier 2012
Messages : 20
Détails du profil
Informations personnelles :
Nom : Homme William Grognot
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Conseil

Informations forums :
Inscription : janvier 2012
Messages : 20
Points : 0
Points : 0
donc, en claire, la seule solution est de rappatrier les fichiers des bases de toutes les personnes qui les ont téléchargées ?
willou-78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 17h45   #15
Rédacteur/Modérateur
 
Avatar de GAYOT
 
Homme Jean-Damien GAYOT
Inscription : novembre 2004
Messages : 2 076
Détails du profil
Informations personnelles :
Nom : Homme Jean-Damien GAYOT
Âge : 56
Localisation : France, Meuse (Lorraine)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : novembre 2004
Messages : 2 076
Points : 4 396
Points : 4 396
Envoyer un message via Skype™ à GAYOT
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.
__________________
Plus j'avance et plus j'ai l'impression de ne rien savoir. Et comme j'essaie d'aller loin..!!.

Tutoriels sur:http://jdgayot.developpez.com

Pas de sujets techniques par Mp. Sinon
GAYOT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 19h20   #16
Invité de passage
 
Homme William Grognot
Administrateur systèmes et réseaux
Inscription : janvier 2012
Messages : 20
Détails du profil
Informations personnelles :
Nom : Homme William Grognot
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Conseil

Informations forums :
Inscription : janvier 2012
Messages : 20
Points : 0
Points : 0
D'accord, mais c'est vraiment au dessus de mes compétances en, auriez-vous une petite idée du code à appliquer ?
willou-78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 12h27   #17
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 258
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2008
Messages : 1 258
Points : 1 877
Points : 1 877
Bonjour,

Pour cela, il suffit déclarer le bon odb :
Code :
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")
nico84 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h22.


 
 
 
 
Partenaires

Hébergement Web