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.
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.
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
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 ?
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![]()
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"...
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)
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à
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 :
à la ligne (en rouge), Fld = vide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3Erreur d'execution '424' Objet requis
Que puis-je faire ?
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
Bonjour
Fld ou oFld?
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é ?
On peut le faire sur la dorsale.
A condition qu'elle ne soit pas déjà utilisée dans la frontale;
Désolé, je n'ai pas la moindre idée de ce qu'est la Dorsale, ni la Frontale ?![]()
Si la table est liée, il faut agir sur la base ou est stockée la table d'origine (dorsale).
donc, en claire, la seule solution est de rappatrier les fichiers des bases de toutes les personnes qui les ont téléchargées ?![]()
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.
D'accord, mais c'est vraiment au dessus de mes compétances en, auriez-vous une petite idée du code à appliquer ?![]()
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")
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager