Je cherche un code VBA qui, à l'ouverture d'un formulaire, vérifie
l'existance de plusieurs champs dans une table et qui les ajoute s'ils
n'existent pas.
Pour créer un champs Texte je pense que ceci convient:: CurrentDb.Execute
"ALTER TABLE TbleA ADD COLUMN Champ1 CHAR(50) " ; "
Mais je dois également créer des champs suivants dont je ne connais pas la
syntaxe:
De plus je ne connaîs pas le code pour vérifier l'existance des champs
Ci-dessous une ébauche de code mais qui ne fonctionne pas.
Merci pour votre aide précieuse.
Pat (au soleil ce matin)
-------------------------------------
Private Sub Form_Open(Cancel As Integer)
On Error GoTo Form_Open_Err
If CurrentDb.QueryDefs.Fields("TbleA").Name.Exist = "Champ1" Then
CurrentDb.Execute "ALTER TABLE TbleA ADD COLUMN Champ1 CURRENCY ; "
End If
If CurrentDb.QueryDefs.Fields("TbleA").Name = "Champ2" Then
CurrentDb.Execute "ALTER TABLE TbleA ADD COLUMN Champ2 CHAR(50) " ; "
End If
Bon, bon, finalement y a t'il moyen ou non d'ajouter des champs à une table attachée. Cela ne sembla pas simple pourtant la procédure ci-dessus proposée par Fred fonctionnerait d'après lui. Mais je reçois le message Impossible de trouver le nom dbBolean entré dans l'expression.
Une petite routine svp.
Merci pour votre patience.
Pat (qui va aller manger)
"Eric" a écrit dans le message de news:
Bonsoir Raymond,
C'est ce que je pensais mais on peut effectivement modifier la structure d'une table attachée par exemple en lui ajoutant des champs, du moins en local puisque je n'ai pas de reseau, via une procédure DAO et non par une exécution de SQL -Définition des données.
Bonjour.
depuis quand peut-on modifier la structure d'une base attachée ? c'est nouveau, ça vient de sortir. voir aide en ligne.
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bon, bon, finalement y a t'il moyen ou non d'ajouter des champs à une table
attachée. Cela ne sembla pas simple pourtant la procédure ci-dessus proposée
par Fred fonctionnerait d'après lui. Mais je reçois le message Impossible de
trouver le nom dbBolean entré dans l'expression.
Une petite routine svp.
Merci pour votre patience.
Pat (qui va aller manger)
"Eric" <f_framZZ@hotmail.com> a écrit dans le message de news:
umHt5eS7FHA.3880@TK2MSFTNGP12.phx.gbl...
Bonsoir Raymond,
C'est ce que je pensais mais on peut effectivement modifier la structure
d'une table attachée par exemple en lui ajoutant des champs, du moins en
local puisque je n'ai pas de reseau, via une procédure DAO et non par une
exécution de SQL -Définition des données.
Bonjour.
depuis quand peut-on modifier la structure d'une base attachée ? c'est
nouveau, ça vient de sortir.
voir aide en ligne.
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bon, bon, finalement y a t'il moyen ou non d'ajouter des champs à une table attachée. Cela ne sembla pas simple pourtant la procédure ci-dessus proposée par Fred fonctionnerait d'après lui. Mais je reçois le message Impossible de trouver le nom dbBolean entré dans l'expression.
Une petite routine svp.
Merci pour votre patience.
Pat (qui va aller manger)
"Eric" a écrit dans le message de news:
Bonsoir Raymond,
C'est ce que je pensais mais on peut effectivement modifier la structure d'une table attachée par exemple en lui ajoutant des champs, du moins en local puisque je n'ai pas de reseau, via une procédure DAO et non par une exécution de SQL -Définition des données.
Bonjour.
depuis quand peut-on modifier la structure d'une base attachée ? c'est nouveau, ça vient de sortir. voir aide en ligne.
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Pat
J'avais pas lu ton message Eric, je teste ça tout à l'heure.
Merci
Pat
"Eric" a écrit dans le message de news:
.../... et tu la lances par : AjoutChamp "unTexte", dbText ou AjoutChamp "UnNumérique", dbSingle
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
J'avais pas lu ton message Eric, je teste ça tout à l'heure.
Merci
Pat
"Eric" <f_framZZ@hotmail.com> a écrit dans le message de news:
uakiooS7FHA.3416@TK2MSFTNGP15.phx.gbl...
.../...
et tu la lances par :
AjoutChamp "unTexte", dbText
ou
AjoutChamp "UnNumérique", dbSingle
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Function AjoutChamp(strNomChamp As String, intTypeChamp As Integer) Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As Boolean
Set w = DBEngine.Workspaces(0) Set bd = w.OpenDatabase("C:db.mdb") Set t = bd.TableDefs("TbleA") Dim f As DAO.Field For Each f In t.Fields If LCase(f.Name) = LCase(strNomChamp) Then Trouve = True Exit For End If Next If Not Trouve Then With t Set f = .CreateField(strNomChamp, intTypeChamp) If intTypeChamp = dbText Then f.Size = Longueur End If .Fields.Append f End With End If bd.Close w.Close Set f = Nothing Set t = Nothing Set bd = Nothing Set w = Nothing
End Function ----------------------------
"Eric" a écrit dans le message de news:
.../... et tu la lances par : AjoutChamp "unTexte", dbText ou AjoutChamp "UnNumérique", dbSingle
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
J'ai créé un module ModAjoutChamp avec le code que tu me propose collé ci
plus bas. Déboguage pas de problème.
J'ai créé une macro avec comme action "ExécuterCode" et "Nom Fonction"
AjoutChamp ("Champ1", dbText)
Je reçois le message "Impossible de trouver le nom dbText entré dans
l'expression.
Function AjoutChamp(strNomChamp As String, intTypeChamp As Integer)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As
Boolean
Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For
End If
Next
If Not Trouve Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing
End Function
----------------------------
"Eric" <f_framZZ@hotmail.com> a écrit dans le message de news:
uakiooS7FHA.3416@TK2MSFTNGP15.phx.gbl...
.../...
et tu la lances par :
AjoutChamp "unTexte", dbText
ou
AjoutChamp "UnNumérique", dbSingle
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Function AjoutChamp(strNomChamp As String, intTypeChamp As Integer) Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As Boolean
Set w = DBEngine.Workspaces(0) Set bd = w.OpenDatabase("C:db.mdb") Set t = bd.TableDefs("TbleA") Dim f As DAO.Field For Each f In t.Fields If LCase(f.Name) = LCase(strNomChamp) Then Trouve = True Exit For End If Next If Not Trouve Then With t Set f = .CreateField(strNomChamp, intTypeChamp) If intTypeChamp = dbText Then f.Size = Longueur End If .Fields.Append f End With End If bd.Close w.Close Set f = Nothing Set t = Nothing Set bd = Nothing Set w = Nothing
End Function ----------------------------
"Eric" a écrit dans le message de news:
.../... et tu la lances par : AjoutChamp "unTexte", dbText ou AjoutChamp "UnNumérique", dbSingle
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Pat
J'ai créé un module ModAjoutChamp avec le code que tu me propose collé ci plus bas. Déboguage pas de problème.
J'ai créé une macro avec comme action "ExécuterCode" et "Nom Fonction" AjoutChamp ("Champ1", dbText)
Je reçois le message "Impossible de trouver le nom dbText entré dans l'expression.
Function AjoutChamp(strNomChamp As String, intTypeChamp As Integer) Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As Boolean
Set w = DBEngine.Workspaces(0) Set bd = w.OpenDatabase("C:db.mdb") Set t = bd.TableDefs("TbleA") Dim f As DAO.Field For Each f In t.Fields If LCase(f.Name) = LCase(strNomChamp) Then Trouve = True Exit For End If Next If Not Trouve Then With t Set f = .CreateField(strNomChamp, intTypeChamp) If intTypeChamp = dbText Then f.Size = Longueur End If .Fields.Append f End With End If bd.Close w.Close Set f = Nothing Set t = Nothing Set bd = Nothing Set w = Nothing
End Function ----------------------------
"Eric" a écrit dans le message de news:
re, j'avais oublié le Booléen AjoutChamp "unBooléen", dbBoolean
Notes qu'il y a deux O et non 1 comme dans ton post sur la réponse de Raymond
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
J'ai créé un module ModAjoutChamp avec le code que tu me propose collé ci
plus bas. Déboguage pas de problème.
J'ai créé une macro avec comme action "ExécuterCode" et "Nom Fonction"
AjoutChamp ("Champ1", dbText)
Je reçois le message "Impossible de trouver le nom dbText entré dans
l'expression.
Function AjoutChamp(strNomChamp As String, intTypeChamp As Integer)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As
Boolean
Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For
End If
Next
If Not Trouve Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing
End Function
----------------------------
"Eric" <f_framZZ@hotmail.com> a écrit dans le message de news:
eDiPxrS7FHA.476@TK2MSFTNGP15.phx.gbl...
re,
j'avais oublié le Booléen
AjoutChamp "unBooléen", dbBoolean
Notes qu'il y a deux O et non 1 comme dans ton post sur la réponse de
Raymond
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Function AjoutChamp(strNomChamp As String, intTypeChamp As Integer) Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As Boolean
Set w = DBEngine.Workspaces(0) Set bd = w.OpenDatabase("C:db.mdb") Set t = bd.TableDefs("TbleA") Dim f As DAO.Field For Each f In t.Fields If LCase(f.Name) = LCase(strNomChamp) Then Trouve = True Exit For End If Next If Not Trouve Then With t Set f = .CreateField(strNomChamp, intTypeChamp) If intTypeChamp = dbText Then f.Size = Longueur End If .Fields.Append f End With End If bd.Close w.Close Set f = Nothing Set t = Nothing Set bd = Nothing Set w = Nothing
End Function ----------------------------
"Eric" a écrit dans le message de news:
re, j'avais oublié le Booléen AjoutChamp "unBooléen", dbBoolean
Notes qu'il y a deux O et non 1 comme dans ton post sur la réponse de Raymond
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Eric
Dans les arguments de la fonction appelée par la macro, remplaces dbText par 10 dbSingle par 6 dbBoolean par 1
J'ai créé un module ModAjoutChamp avec le code que tu me propose collé ci plus bas. Déboguage pas de problème.
J'ai créé une macro avec comme action "ExécuterCode" et "Nom Fonction" AjoutChamp ("Champ1", dbText)
Je reçois le message "Impossible de trouver le nom dbText entré dans l'expression.
Merci.
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Dans les arguments de la fonction appelée par la macro, remplaces
dbText par 10
dbSingle par 6
dbBoolean par 1
J'ai créé un module ModAjoutChamp avec le code que tu me propose collé ci
plus bas. Déboguage pas de problème.
J'ai créé une macro avec comme action "ExécuterCode" et "Nom Fonction"
AjoutChamp ("Champ1", dbText)
Je reçois le message "Impossible de trouver le nom dbText entré dans
l'expression.
Merci.
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Function AjoutChamp(strNomChamp As String, intTypeChamp As Integer) Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As Boolean
Set w = DBEngine.Workspaces(0) Set bd = w.OpenDatabase("C:db.mdb") Set t = bd.TableDefs("TbleA") Dim f As DAO.Field For Each f In t.Fields If LCase(f.Name) = LCase(strNomChamp) Then Trouve = True Exit For End If Next If Not Trouve Then With t Set f = .CreateField(strNomChamp, intTypeChamp) If intTypeChamp = dbText Then f.Size = Longueur End If .Fields.Append f End With End If bd.Close w.Close Set f = Nothing Set t = Nothing Set bd = Nothing Set w = Nothing
End Function ----------------------------
"Eric" a écrit dans le message de news:
re, j'avais oublié le Booléen AjoutChamp "unBooléen", dbBoolean
Notes qu'il y a deux O et non 1 comme dans ton post sur la réponse de Raymond
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Génial, ça fonctionne. Merci 1000 fois j'imagine qu'avec ça je vais pouvoir
me débrouiller.
Encore merci et bonne soirée
Pat
"Pat" <nospam@nospam.net> a écrit dans le message de news:
437f6067$0$8047$ba620e4c@news.skynet.be...
J'ai créé un module ModAjoutChamp avec le code que tu me propose collé ci
plus bas. Déboguage pas de problème.
J'ai créé une macro avec comme action "ExécuterCode" et "Nom Fonction"
AjoutChamp ("Champ1", dbText)
Je reçois le message "Impossible de trouver le nom dbText entré dans
l'expression.
Function AjoutChamp(strNomChamp As String, intTypeChamp As Integer)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As
Boolean
Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For
End If
Next
If Not Trouve Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing
End Function
----------------------------
"Eric" <f_framZZ@hotmail.com> a écrit dans le message de news:
eDiPxrS7FHA.476@TK2MSFTNGP15.phx.gbl...
re,
j'avais oublié le Booléen
AjoutChamp "unBooléen", dbBoolean
Notes qu'il y a deux O et non 1 comme dans ton post sur la réponse de
Raymond
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Function AjoutChamp(strNomChamp As String, intTypeChamp As Integer) Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As Boolean
Set w = DBEngine.Workspaces(0) Set bd = w.OpenDatabase("C:db.mdb") Set t = bd.TableDefs("TbleA") Dim f As DAO.Field For Each f In t.Fields If LCase(f.Name) = LCase(strNomChamp) Then Trouve = True Exit For End If Next If Not Trouve Then With t Set f = .CreateField(strNomChamp, intTypeChamp) If intTypeChamp = dbText Then f.Size = Longueur End If .Fields.Append f End With End If bd.Close w.Close Set f = Nothing Set t = Nothing Set bd = Nothing Set w = Nothing
End Function ----------------------------
"Eric" a écrit dans le message de news:
re, j'avais oublié le Booléen AjoutChamp "unBooléen", dbBoolean
Notes qu'il y a deux O et non 1 comme dans ton post sur la réponse de Raymond
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Raymond [mvp]
Bonjour Eric.
il y a un problème d'énoncé du problème. on ne peut pas créer un nouveau champ sur une table Access attachée. tu dois modifier sur la table d'origine obligatoirement. si l'ajout se réalise c'est parce qu'il doit être fait sur la table d'origine. voir le opendatabase. la fonction .Fields.Append f va déclencher l'erreur 3057 qui est: "opération non gérée sur les tables attachées". ou alors il y a une version spéciale access.
je rappelle quand même que microsoft dit clairement : Pour ajouter un champ à une table liée dans une autre base de données Microsoft Access, vous devez ouvrir sa base de données source. Si la table liée provient d'une autre application, vous devez ouvrir le fichier source avec son application pour ajouter un champ.
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://OfficeSystem.Access.free.fr/runtime/ http://www.mpfa.info/ pour débuter sur le forum
"Eric" a écrit dans le message de news:
Bonsoir Raymond,
C'est ce que je pensais mais on peut effectivement modifier la structure d'une table attachée par exemple en lui ajoutant des champs, du moins en local puisque je n'ai pas de reseau, via une procédure DAO et non par une exécution de SQL -Définition des données.
Bonjour Eric.
il y a un problème d'énoncé du problème.
on ne peut pas créer un nouveau champ sur une table Access attachée. tu dois
modifier sur la table d'origine obligatoirement. si l'ajout se réalise c'est
parce qu'il doit être fait sur la table d'origine. voir le opendatabase.
la fonction .Fields.Append f va déclencher l'erreur 3057 qui est:
"opération non gérée sur les tables attachées".
ou alors il y a une version spéciale access.
je rappelle quand même que microsoft dit clairement :
Pour ajouter un champ à une table liée dans une autre base de données
Microsoft Access, vous devez ouvrir sa base de données
source. Si la table liée provient d'une autre application, vous devez ouvrir
le fichier source avec son application pour ajouter un champ.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://www.mpfa.info/ pour débuter sur le forum
"Eric" <f_framZZ@hotmail.com> a écrit dans le message de news:
umHt5eS7FHA.3880@TK2MSFTNGP12.phx.gbl...
Bonsoir Raymond,
C'est ce que je pensais mais on peut effectivement modifier la structure
d'une table attachée par exemple en lui ajoutant des champs, du moins en
local puisque je n'ai pas de reseau, via une procédure DAO et non par une
exécution de SQL -Définition des données.
il y a un problème d'énoncé du problème. on ne peut pas créer un nouveau champ sur une table Access attachée. tu dois modifier sur la table d'origine obligatoirement. si l'ajout se réalise c'est parce qu'il doit être fait sur la table d'origine. voir le opendatabase. la fonction .Fields.Append f va déclencher l'erreur 3057 qui est: "opération non gérée sur les tables attachées". ou alors il y a une version spéciale access.
je rappelle quand même que microsoft dit clairement : Pour ajouter un champ à une table liée dans une autre base de données Microsoft Access, vous devez ouvrir sa base de données source. Si la table liée provient d'une autre application, vous devez ouvrir le fichier source avec son application pour ajouter un champ.
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://OfficeSystem.Access.free.fr/runtime/ http://www.mpfa.info/ pour débuter sur le forum
"Eric" a écrit dans le message de news:
Bonsoir Raymond,
C'est ce que je pensais mais on peut effectivement modifier la structure d'une table attachée par exemple en lui ajoutant des champs, du moins en local puisque je n'ai pas de reseau, via une procédure DAO et non par une exécution de SQL -Définition des données.
Eric
Bonjour Raymond, Oui je suis d'accord avec toi. D'ailleurs, il en est de même si on veut mettre des relations entre des tables liées à partir de la bd contenant ces tables liées. Il est vrai que si l'on fait un createfield puis un append.fields directement sur une tabledef de la collection Tabledefs contenant la table attachée, ca ne marche pas, le message obtenu étant l'objet n'est plus défini ou qq chose de ce gout.
En fait, dès lors qu'on utilises la méthode Opendatabase dans un Workspace créé à cette effet, à partir de la bd contenant la table attachée, c'est comme si on ouvrait directement la bd contenant cette table. C'est bien ça ?
Enfin, je ne comprends pas toujours 'le pourquoi vouloir modifier la structure des tables attachées' d'autant plus qu'elles sont partagées avec d'autres utilisateurs ou applications et donc risque fort de perturbation.
Bonjour Eric.
il y a un problème d'énoncé du problème. on ne peut pas créer un nouveau champ sur une table Access attachée. tu dois modifier sur la table d'origine obligatoirement. si l'ajout se réalise c'est parce qu'il doit être fait sur la table d'origine. voir le opendatabase. la fonction .Fields.Append f va déclencher l'erreur 3057 qui est: "opération non gérée sur les tables attachées". ou alors il y a une version spéciale access.
je rappelle quand même que microsoft dit clairement : Pour ajouter un champ à une table liée dans une autre base de données Microsoft Access, vous devez ouvrir sa base de données source. Si la table liée provient d'une autre application, vous devez ouvrir le fichier source avec son application pour ajouter un champ.
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour Raymond,
Oui je suis d'accord avec toi.
D'ailleurs, il en est de même si on veut mettre des relations entre des
tables liées à partir de la bd contenant ces tables liées. Il est vrai
que si l'on fait un createfield puis un append.fields directement sur
une tabledef de la collection Tabledefs contenant la table attachée, ca
ne marche pas, le message obtenu étant l'objet n'est plus défini ou qq
chose de ce gout.
En fait, dès lors qu'on utilises la méthode Opendatabase dans un
Workspace créé à cette effet, à partir de la bd contenant la table
attachée, c'est comme si on ouvrait directement la bd contenant cette
table. C'est bien ça ?
Enfin, je ne comprends pas toujours 'le pourquoi vouloir modifier la
structure des tables attachées' d'autant plus qu'elles sont partagées
avec d'autres utilisateurs ou applications et donc risque fort de
perturbation.
Bonjour Eric.
il y a un problème d'énoncé du problème.
on ne peut pas créer un nouveau champ sur une table Access attachée. tu dois
modifier sur la table d'origine obligatoirement. si l'ajout se réalise c'est
parce qu'il doit être fait sur la table d'origine. voir le opendatabase.
la fonction .Fields.Append f va déclencher l'erreur 3057 qui est:
"opération non gérée sur les tables attachées".
ou alors il y a une version spéciale access.
je rappelle quand même que microsoft dit clairement :
Pour ajouter un champ à une table liée dans une autre base de données
Microsoft Access, vous devez ouvrir sa base de données
source. Si la table liée provient d'une autre application, vous devez ouvrir
le fichier source avec son application pour ajouter un champ.
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour Raymond, Oui je suis d'accord avec toi. D'ailleurs, il en est de même si on veut mettre des relations entre des tables liées à partir de la bd contenant ces tables liées. Il est vrai que si l'on fait un createfield puis un append.fields directement sur une tabledef de la collection Tabledefs contenant la table attachée, ca ne marche pas, le message obtenu étant l'objet n'est plus défini ou qq chose de ce gout.
En fait, dès lors qu'on utilises la méthode Opendatabase dans un Workspace créé à cette effet, à partir de la bd contenant la table attachée, c'est comme si on ouvrait directement la bd contenant cette table. C'est bien ça ?
Enfin, je ne comprends pas toujours 'le pourquoi vouloir modifier la structure des tables attachées' d'autant plus qu'elles sont partagées avec d'autres utilisateurs ou applications et donc risque fort de perturbation.
Bonjour Eric.
il y a un problème d'énoncé du problème. on ne peut pas créer un nouveau champ sur une table Access attachée. tu dois modifier sur la table d'origine obligatoirement. si l'ajout se réalise c'est parce qu'il doit être fait sur la table d'origine. voir le opendatabase. la fonction .Fields.Append f va déclencher l'erreur 3057 qui est: "opération non gérée sur les tables attachées". ou alors il y a une version spéciale access.
je rappelle quand même que microsoft dit clairement : Pour ajouter un champ à une table liée dans une autre base de données Microsoft Access, vous devez ouvrir sa base de données source. Si la table liée provient d'une autre application, vous devez ouvrir le fichier source avec son application pour ajouter un champ.
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Raymond [mvp]
Tu as tout à fait raison.
le fait d'indiquer la base d'origine contenant la table dans un nouveau workspace, ce n'est plus une table attachée mais une table locale.
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://OfficeSystem.Access.free.fr/runtime/ http://www.mpfa.info/ pour débuter sur le forum
"Eric" a écrit dans le message de news: %
Bonjour Raymond, Oui je suis d'accord avec toi. D'ailleurs, il en est de même si on veut mettre des relations entre des tables liées à partir de la bd contenant ces tables liées. Il est vrai que si l'on fait un createfield puis un append.fields directement sur une tabledef de la collection Tabledefs contenant la table attachée, ca ne marche pas, le message obtenu étant l'objet n'est plus défini ou qq chose de ce gout.
En fait, dès lors qu'on utilises la méthode Opendatabase dans un Workspace créé à cette effet, à partir de la bd contenant la table attachée, c'est comme si on ouvrait directement la bd contenant cette table. C'est bien ça ?
Enfin, je ne comprends pas toujours 'le pourquoi vouloir modifier la structure des tables attachées' d'autant plus qu'elles sont partagées avec d'autres utilisateurs ou applications et donc risque fort de perturbation.
Tu as tout à fait raison.
le fait d'indiquer la base d'origine contenant la table dans un nouveau
workspace, ce n'est plus une table attachée mais une table locale.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://www.mpfa.info/ pour débuter sur le forum
"Eric" <f_framZZ@hotmail.com> a écrit dans le message de news:
%235e3Sre7FHA.3648@tk2msftngp13.phx.gbl...
Bonjour Raymond,
Oui je suis d'accord avec toi.
D'ailleurs, il en est de même si on veut mettre des relations entre des
tables liées à partir de la bd contenant ces tables liées. Il est vrai que
si l'on fait un createfield puis un append.fields directement sur une
tabledef de la collection Tabledefs contenant la table attachée, ca ne
marche pas, le message obtenu étant l'objet n'est plus défini ou qq chose
de ce gout.
En fait, dès lors qu'on utilises la méthode Opendatabase dans un Workspace
créé à cette effet, à partir de la bd contenant la table attachée, c'est
comme si on ouvrait directement la bd contenant cette table. C'est bien ça
?
Enfin, je ne comprends pas toujours 'le pourquoi vouloir modifier la
structure des tables attachées' d'autant plus qu'elles sont partagées avec
d'autres utilisateurs ou applications et donc risque fort de perturbation.
le fait d'indiquer la base d'origine contenant la table dans un nouveau workspace, ce n'est plus une table attachée mais une table locale.
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://OfficeSystem.Access.free.fr/runtime/ http://www.mpfa.info/ pour débuter sur le forum
"Eric" a écrit dans le message de news: %
Bonjour Raymond, Oui je suis d'accord avec toi. D'ailleurs, il en est de même si on veut mettre des relations entre des tables liées à partir de la bd contenant ces tables liées. Il est vrai que si l'on fait un createfield puis un append.fields directement sur une tabledef de la collection Tabledefs contenant la table attachée, ca ne marche pas, le message obtenu étant l'objet n'est plus défini ou qq chose de ce gout.
En fait, dès lors qu'on utilises la méthode Opendatabase dans un Workspace créé à cette effet, à partir de la bd contenant la table attachée, c'est comme si on ouvrait directement la bd contenant cette table. C'est bien ça ?
Enfin, je ne comprends pas toujours 'le pourquoi vouloir modifier la structure des tables attachées' d'autant plus qu'elles sont partagées avec d'autres utilisateurs ou applications et donc risque fort de perturbation.