J'ai une base MDE qui me sert de "programme". Cette base contient une série
de tables liées se trouvant dans une base DONNEES.mdb.
Pour gérer la maintenance de mes tables, le projet développé évoluant avec
le temps, j'ai besoin d'ajouter des champs à certaines tables liées.
Pour cela, j'avais pensé créer une base MODELE.mdb reprenant la structure
des tables et que je peux envoyer aux utilisateurs avec le MDE. J'imaginais
alors pouvoir mettre la structure des tables de DONNEES.mdb en renommant
l'ancienne table de DONNEES, en copiant la nouvelle table de MODELE vers
DONNEES, puis une requête pour ajouter les enregistrements de l'ancienne
vers la nouvelle, et pour finir en supprimant l'ancienne table renommée...
Tout cela avec le code suivant
Dim Base_Source As DAO.Database
Dim Base_Modele As DAO.Database
Dim Table_Source As DAO.TableDef
Dim Table_Modele As DAO.TableDef
Set Base_Source = DAO.OpenDatabase(CurrentProject.Path & "\donnees.mdb")
Set Base_Modele = DAO.OpenDatabase(CurrentProject.Path & "\modele.mdb")
Base_Source.TableDefs("contacts").Name = "Contacts1"
Base_Source.TableDefs.Refresh
Set Table_Modele = Base_Modele.TableDefs("contacts")
Base_Source.TableDefs.Append Table_Modele <<<============= Le code
plante ici
...
...
VBA me dit "Ajout impossible. Il existe déjà un objet de ce nom dans la
collection"
Alors que j'ai beau scanner ma collection TableDefs dans DONNEES, plus
de traces de Contacts, par contre, Contacts1 existe bien...
Où me plante-je?
Merci dès à présent pour vos éclaircissements.
--
Pierre Fauconnier (pierre.fauconnier@nospam.nospam)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pierre Fauconnier
Bonjour
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb") maBase.Execute "select contacts.* into contacts1 in '" & CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base cible.mdb") With maBase .Execute "insert into contacts1 select *from contacts" .TableDefs.Delete "contacts" .TableDefs("contacts1").Name = "Contacts" End With
-- Pierre Fauconnier () "Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe zen ) Remplacez nospam.nospam par pfi.be pour répondre. Merci
"Pierre Fauconnier" a écrit dans le message de news:
Bonjour
J'ai une base MDE qui me sert de "programme". Cette base contient une série de tables liées se trouvant dans une base DONNEES.mdb.
Pour gérer la maintenance de mes tables, le projet développé évoluant avec le temps, j'ai besoin d'ajouter des champs à certaines tables liées.
Pour cela, j'avais pensé créer une base MODELE.mdb reprenant la structure des tables et que je peux envoyer aux utilisateurs avec le MDE. J'imaginais alors pouvoir mettre la structure des tables de DONNEES.mdb en renommant l'ancienne table de DONNEES, en copiant la nouvelle table de MODELE vers DONNEES, puis une requête pour ajouter les enregistrements de l'ancienne vers la nouvelle, et pour finir en supprimant l'ancienne table renommée... Tout cela avec le code suivant
Dim Base_Source As DAO.Database Dim Base_Modele As DAO.Database
Dim Table_Source As DAO.TableDef Dim Table_Modele As DAO.TableDef
Set Base_Source = DAO.OpenDatabase(CurrentProject.Path & "donnees.mdb") Set Base_Modele = DAO.OpenDatabase(CurrentProject.Path & "modele.mdb")
Base_Source.TableDefs("contacts").Name = "Contacts1" Base_Source.TableDefs.Refresh Set Table_Modele = Base_Modele.TableDefs("contacts") Base_Source.TableDefs.Append Table_Modele <<<============= Le code plante ici ... ...
VBA me dit "Ajout impossible. Il existe déjà un objet de ce nom dans la collection"
Alors que j'ai beau scanner ma collection TableDefs dans DONNEES, plus de traces de Contacts, par contre, Contacts1 existe bien...
Où me plante-je?
Merci dès à présent pour vos éclaircissements.
-- Pierre Fauconnier () "Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe zen ) Remplacez nospam.nospam par pfi.be pour répondre. Merci
Bonjour
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb")
maBase.Execute "select contacts.* into contacts1 in '" &
CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base cible.mdb")
With maBase
.Execute "insert into contacts1 select *from contacts"
.TableDefs.Delete "contacts"
.TableDefs("contacts1").Name = "Contacts"
End With
--
Pierre Fauconnier (pierre.fauconnier@nospam.nospam)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci
"Pierre Fauconnier" <pierre.fauconnier@nospam.nospam> a écrit dans le
message de news: OkpKLg7VFHA.3076@TK2MSFTNGP12.phx.gbl...
Bonjour
J'ai une base MDE qui me sert de "programme". Cette base contient une
série de tables liées se trouvant dans une base DONNEES.mdb.
Pour gérer la maintenance de mes tables, le projet développé évoluant avec
le temps, j'ai besoin d'ajouter des champs à certaines tables liées.
Pour cela, j'avais pensé créer une base MODELE.mdb reprenant la structure
des tables et que je peux envoyer aux utilisateurs avec le MDE.
J'imaginais alors pouvoir mettre la structure des tables de DONNEES.mdb en
renommant l'ancienne table de DONNEES, en copiant la nouvelle table de
MODELE vers DONNEES, puis une requête pour ajouter les enregistrements de
l'ancienne vers la nouvelle, et pour finir en supprimant l'ancienne table
renommée... Tout cela avec le code suivant
Dim Base_Source As DAO.Database
Dim Base_Modele As DAO.Database
Dim Table_Source As DAO.TableDef
Dim Table_Modele As DAO.TableDef
Set Base_Source = DAO.OpenDatabase(CurrentProject.Path &
"donnees.mdb")
Set Base_Modele = DAO.OpenDatabase(CurrentProject.Path & "modele.mdb")
Base_Source.TableDefs("contacts").Name = "Contacts1"
Base_Source.TableDefs.Refresh
Set Table_Modele = Base_Modele.TableDefs("contacts")
Base_Source.TableDefs.Append Table_Modele <<<============= Le code
plante ici
...
...
VBA me dit "Ajout impossible. Il existe déjà un objet de ce nom dans la
collection"
Alors que j'ai beau scanner ma collection TableDefs dans DONNEES, plus
de traces de Contacts, par contre, Contacts1 existe bien...
Où me plante-je?
Merci dès à présent pour vos éclaircissements.
--
Pierre Fauconnier (pierre.fauconnier@nospam.nospam)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin (
proverbe zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb") maBase.Execute "select contacts.* into contacts1 in '" & CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base cible.mdb") With maBase .Execute "insert into contacts1 select *from contacts" .TableDefs.Delete "contacts" .TableDefs("contacts1").Name = "Contacts" End With
-- Pierre Fauconnier () "Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe zen ) Remplacez nospam.nospam par pfi.be pour répondre. Merci
"Pierre Fauconnier" a écrit dans le message de news:
Bonjour
J'ai une base MDE qui me sert de "programme". Cette base contient une série de tables liées se trouvant dans une base DONNEES.mdb.
Pour gérer la maintenance de mes tables, le projet développé évoluant avec le temps, j'ai besoin d'ajouter des champs à certaines tables liées.
Pour cela, j'avais pensé créer une base MODELE.mdb reprenant la structure des tables et que je peux envoyer aux utilisateurs avec le MDE. J'imaginais alors pouvoir mettre la structure des tables de DONNEES.mdb en renommant l'ancienne table de DONNEES, en copiant la nouvelle table de MODELE vers DONNEES, puis une requête pour ajouter les enregistrements de l'ancienne vers la nouvelle, et pour finir en supprimant l'ancienne table renommée... Tout cela avec le code suivant
Dim Base_Source As DAO.Database Dim Base_Modele As DAO.Database
Dim Table_Source As DAO.TableDef Dim Table_Modele As DAO.TableDef
Set Base_Source = DAO.OpenDatabase(CurrentProject.Path & "donnees.mdb") Set Base_Modele = DAO.OpenDatabase(CurrentProject.Path & "modele.mdb")
Base_Source.TableDefs("contacts").Name = "Contacts1" Base_Source.TableDefs.Refresh Set Table_Modele = Base_Modele.TableDefs("contacts") Base_Source.TableDefs.Append Table_Modele <<<============= Le code plante ici ... ...
VBA me dit "Ajout impossible. Il existe déjà un objet de ce nom dans la collection"
Alors que j'ai beau scanner ma collection TableDefs dans DONNEES, plus de traces de Contacts, par contre, Contacts1 existe bien...
Où me plante-je?
Merci dès à présent pour vos éclaircissements.
-- Pierre Fauconnier () "Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe zen ) Remplacez nospam.nospam par pfi.be pour répondre. Merci
Eric
Bonjour Pierre,
Effectivement je regardai ton problème et butai sur la même erreur. Je n'ai pas encore de solution.
La suite, c'est juste pour info perso
Parfait si tu as trouvé une solution, mais je me pose quand même quelques interrogations.
Tu disais, question Maintenance, devoir ajouter des champs à la table Contact.
Pour gérer la maintenance de mes tables, le projet développé évoluant avec le temps, j'ai besoin d'ajouter des champs à certaines tables liées.
Ce n'est pas le cas là, tu ajoutes seulement des enregistrements, non ?
D'autre part, la table Contact1 créée dans la 1ere partie de la procédure n'a ni index, ni clé primaire, ca ne risque pas d'être génant ?
Enfin, la suppression de la table (ancienne) Contact ne risque-t-elle pas de poser des problèmes si elle est en relation avec d'autres tables ?
A+ Eric
Bonjour
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb") maBase.Execute "select contacts.* into contacts1 in '" & CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base cible.mdb") With maBase .Execute "insert into contacts1 select *from contacts" .TableDefs.Delete "contacts" .TableDefs("contacts1").Name = "Contacts" End With
Bonjour Pierre,
Effectivement je regardai ton problème et butai sur la même erreur. Je
n'ai pas encore de solution.
La suite, c'est juste pour info perso
Parfait si tu as trouvé une solution, mais je me pose quand même
quelques interrogations.
Tu disais, question Maintenance, devoir ajouter des champs à la table
Contact.
Pour gérer la maintenance de mes tables, le projet développé évoluant
avec le temps, j'ai besoin d'ajouter des champs à certaines tables liées.
Ce n'est pas le cas là, tu ajoutes seulement des enregistrements, non ?
D'autre part,
la table Contact1 créée dans la 1ere partie de la procédure n'a ni
index, ni clé primaire, ca ne risque pas d'être génant ?
Enfin,
la suppression de la table (ancienne) Contact ne risque-t-elle pas de
poser des problèmes si elle est en relation avec d'autres tables ?
A+
Eric
Bonjour
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb")
maBase.Execute "select contacts.* into contacts1 in '" &
CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base cible.mdb")
With maBase
.Execute "insert into contacts1 select *from contacts"
.TableDefs.Delete "contacts"
.TableDefs("contacts1").Name = "Contacts"
End With
Effectivement je regardai ton problème et butai sur la même erreur. Je n'ai pas encore de solution.
La suite, c'est juste pour info perso
Parfait si tu as trouvé une solution, mais je me pose quand même quelques interrogations.
Tu disais, question Maintenance, devoir ajouter des champs à la table Contact.
Pour gérer la maintenance de mes tables, le projet développé évoluant avec le temps, j'ai besoin d'ajouter des champs à certaines tables liées.
Ce n'est pas le cas là, tu ajoutes seulement des enregistrements, non ?
D'autre part, la table Contact1 créée dans la 1ere partie de la procédure n'a ni index, ni clé primaire, ca ne risque pas d'être génant ?
Enfin, la suppression de la table (ancienne) Contact ne risque-t-elle pas de poser des problèmes si elle est en relation avec d'autres tables ?
A+ Eric
Bonjour
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb") maBase.Execute "select contacts.* into contacts1 in '" & CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base cible.mdb") With maBase .Execute "insert into contacts1 select *from contacts" .TableDefs.Delete "contacts" .TableDefs("contacts1").Name = "Contacts" End With
Pierre Fauconnier
Bonjour Eric
Merci pour tes réponses et tes interrogations
Ce n'est pas le cas là, tu ajoutes seulement des enregistrements, non ? Non, justement. La table CONTACTS de BASE CIBLE contient les
enregistrements. La table CONTACTS de la base MODELE ne contient aucun enregistrement, mais elle contient des nouveaux champs qui ne sont pas présents dans la table CONTACTS de BASE CIBLE. Dès lors, mon code - crée une nouvelle table CONTACTS1 dans BASE CIBLE en copiant la structure et les enregistrements ( inexistants ) de CONTACTS de la base MODELE - Ajoute les enregistrements de CONTACTS dans CONTACTS1 de la base BASE CIBLE. Les nouveaux champs sont vides. - Supprime la table CONTACTS de la base BASE CIBLE - Renomme la table CONTACTS1 en CONTACTS dans la base BASE CIBLE
Je ne gère pas les liaisons de mes tables dans BASE CIBLE. La base PROGRAMME.MDE qui contient une liaison vers CONTACTS de BASE CIBLE fonctionne parfaitement avec la nouvelle table, puisqu'elle porte le même nom
la table Contact1 créée dans la 1ere partie de la procédure n'a ni index, ni clé primaire, ca ne risque pas d'être génant ? Ca, c'est beaucoup plus gênant. Surtout que Access 2000 ne conserve pas
toutes les propriétés des champs. Ainsi, les clés primaires sont perdues, les index aussi, et la propriété "Chaîne vide autorisée=OUI" passe à "NON", alors que je veux l'éviter à tout prix...
la suppression de la table (ancienne) Contact ne risque-t-elle pas de poser des problèmes si elle est en relation avec d'autres tables ?
Je ne gère pas les liaisons de mes tables dans BASE CIBLE. La base PROGRAMME.MDE qui contient une liaison vers CONTACTS de BASE CIBLE fonctionne parfaitement avec la nouvelle table, puisqu'elle porte le même nom
Merci dès lors pour tes précisions. Je n'ai donc pas LA solution à mon problème... Merd.....
Si tu as d'autres pistes pour la maintenance des tables, je suis preneur. Je pense donc que je vais devoir scanner chaque champ de ma table d'origine et ajouter les nouveaux champs par itération, en "itérant" également sur les propriétés des champs...
Merci pour tes remarques pertinentes
-- Pierre Fauconnier () "Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe zen ) Remplacez nospam.nospam par pfi.be pour répondre. Merci
"Eric" a écrit dans le message de news: %
Bonjour Pierre,
Effectivement je regardai ton problème et butai sur la même erreur. Je n'ai pas encore de solution.
La suite, c'est juste pour info perso
Parfait si tu as trouvé une solution, mais je me pose quand même quelques interrogations.
Tu disais, question Maintenance, devoir ajouter des champs à la table Contact.
Pour gérer la maintenance de mes tables, le projet développé évoluant avec le temps, j'ai besoin d'ajouter des champs à certaines tables liées.
Ce n'est pas le cas là, tu ajoutes seulement des enregistrements, non ?
D'autre part, la table Contact1 créée dans la 1ere partie de la procédure n'a ni index, ni clé primaire, ca ne risque pas d'être génant ?
Enfin, la suppression de la table (ancienne) Contact ne risque-t-elle pas de poser des problèmes si elle est en relation avec d'autres tables ?
A+ Eric
Bonjour
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb") maBase.Execute "select contacts.* into contacts1 in '" & CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base cible.mdb") With maBase .Execute "insert into contacts1 select *from contacts" .TableDefs.Delete "contacts" .TableDefs("contacts1").Name = "Contacts" End With
Bonjour Eric
Merci pour tes réponses et tes interrogations
Ce n'est pas le cas là, tu ajoutes seulement des enregistrements, non ?
Non, justement. La table CONTACTS de BASE CIBLE contient les
enregistrements.
La table CONTACTS de la base MODELE ne contient aucun enregistrement, mais
elle contient des nouveaux champs qui ne sont pas présents dans la table
CONTACTS de BASE CIBLE.
Dès lors, mon code
- crée une nouvelle table CONTACTS1 dans BASE CIBLE en copiant la
structure et les enregistrements ( inexistants ) de CONTACTS de la base
MODELE
- Ajoute les enregistrements de CONTACTS dans CONTACTS1 de la base BASE
CIBLE. Les nouveaux champs sont vides.
- Supprime la table CONTACTS de la base BASE CIBLE
- Renomme la table CONTACTS1 en CONTACTS dans la base BASE CIBLE
Je ne gère pas les liaisons de mes tables dans BASE CIBLE.
La base PROGRAMME.MDE qui contient une liaison vers CONTACTS de
BASE CIBLE fonctionne parfaitement avec la nouvelle table, puisqu'elle porte
le même nom
la table Contact1 créée dans la 1ere partie de la procédure n'a ni index,
ni clé primaire, ca ne risque pas d'être génant ?
Ca, c'est beaucoup plus gênant. Surtout que Access 2000 ne conserve pas
toutes les propriétés des champs. Ainsi, les clés primaires sont perdues,
les index aussi, et la propriété "Chaîne vide autorisée=OUI" passe à "NON",
alors que je veux l'éviter à tout prix...
la suppression de la table (ancienne) Contact ne risque-t-elle pas de
poser des problèmes si elle est en relation avec d'autres tables ?
Je ne gère pas les liaisons de mes tables dans BASE CIBLE.
La base PROGRAMME.MDE qui contient une liaison vers CONTACTS de
BASE CIBLE fonctionne parfaitement avec la nouvelle table, puisqu'elle porte
le même nom
Merci dès lors pour tes précisions. Je n'ai donc pas LA solution à mon
problème... Merd.....
Si tu as d'autres pistes pour la maintenance des tables, je suis preneur. Je
pense donc que je vais devoir scanner chaque champ de ma table d'origine et
ajouter les nouveaux champs par itération, en "itérant" également sur les
propriétés des champs...
Merci pour tes remarques pertinentes
--
Pierre Fauconnier (pierre.fauconnier@nospam.nospam)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci
"Eric" <f_framZZ@hotmail.com> a écrit dans le message de news:
%23A4VEx8VFHA.3488@TK2MSFTNGP10.phx.gbl...
Bonjour Pierre,
Effectivement je regardai ton problème et butai sur la même erreur. Je
n'ai pas encore de solution.
La suite, c'est juste pour info perso
Parfait si tu as trouvé une solution, mais je me pose quand même quelques
interrogations.
Tu disais, question Maintenance, devoir ajouter des champs à la table
Contact.
Pour gérer la maintenance de mes tables, le projet développé évoluant
avec le temps, j'ai besoin d'ajouter des champs à certaines tables liées.
Ce n'est pas le cas là, tu ajoutes seulement des enregistrements, non ?
D'autre part,
la table Contact1 créée dans la 1ere partie de la procédure n'a ni index,
ni clé primaire, ca ne risque pas d'être génant ?
Enfin,
la suppression de la table (ancienne) Contact ne risque-t-elle pas de
poser des problèmes si elle est en relation avec d'autres tables ?
A+
Eric
Bonjour
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb")
maBase.Execute "select contacts.* into contacts1 in '" &
CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base
cible.mdb")
With maBase
.Execute "insert into contacts1 select *from contacts"
.TableDefs.Delete "contacts"
.TableDefs("contacts1").Name = "Contacts"
End With
Ce n'est pas le cas là, tu ajoutes seulement des enregistrements, non ? Non, justement. La table CONTACTS de BASE CIBLE contient les
enregistrements. La table CONTACTS de la base MODELE ne contient aucun enregistrement, mais elle contient des nouveaux champs qui ne sont pas présents dans la table CONTACTS de BASE CIBLE. Dès lors, mon code - crée une nouvelle table CONTACTS1 dans BASE CIBLE en copiant la structure et les enregistrements ( inexistants ) de CONTACTS de la base MODELE - Ajoute les enregistrements de CONTACTS dans CONTACTS1 de la base BASE CIBLE. Les nouveaux champs sont vides. - Supprime la table CONTACTS de la base BASE CIBLE - Renomme la table CONTACTS1 en CONTACTS dans la base BASE CIBLE
Je ne gère pas les liaisons de mes tables dans BASE CIBLE. La base PROGRAMME.MDE qui contient une liaison vers CONTACTS de BASE CIBLE fonctionne parfaitement avec la nouvelle table, puisqu'elle porte le même nom
la table Contact1 créée dans la 1ere partie de la procédure n'a ni index, ni clé primaire, ca ne risque pas d'être génant ? Ca, c'est beaucoup plus gênant. Surtout que Access 2000 ne conserve pas
toutes les propriétés des champs. Ainsi, les clés primaires sont perdues, les index aussi, et la propriété "Chaîne vide autorisée=OUI" passe à "NON", alors que je veux l'éviter à tout prix...
la suppression de la table (ancienne) Contact ne risque-t-elle pas de poser des problèmes si elle est en relation avec d'autres tables ?
Je ne gère pas les liaisons de mes tables dans BASE CIBLE. La base PROGRAMME.MDE qui contient une liaison vers CONTACTS de BASE CIBLE fonctionne parfaitement avec la nouvelle table, puisqu'elle porte le même nom
Merci dès lors pour tes précisions. Je n'ai donc pas LA solution à mon problème... Merd.....
Si tu as d'autres pistes pour la maintenance des tables, je suis preneur. Je pense donc que je vais devoir scanner chaque champ de ma table d'origine et ajouter les nouveaux champs par itération, en "itérant" également sur les propriétés des champs...
Merci pour tes remarques pertinentes
-- Pierre Fauconnier () "Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe zen ) Remplacez nospam.nospam par pfi.be pour répondre. Merci
"Eric" a écrit dans le message de news: %
Bonjour Pierre,
Effectivement je regardai ton problème et butai sur la même erreur. Je n'ai pas encore de solution.
La suite, c'est juste pour info perso
Parfait si tu as trouvé une solution, mais je me pose quand même quelques interrogations.
Tu disais, question Maintenance, devoir ajouter des champs à la table Contact.
Pour gérer la maintenance de mes tables, le projet développé évoluant avec le temps, j'ai besoin d'ajouter des champs à certaines tables liées.
Ce n'est pas le cas là, tu ajoutes seulement des enregistrements, non ?
D'autre part, la table Contact1 créée dans la 1ere partie de la procédure n'a ni index, ni clé primaire, ca ne risque pas d'être génant ?
Enfin, la suppression de la table (ancienne) Contact ne risque-t-elle pas de poser des problèmes si elle est en relation avec d'autres tables ?
A+ Eric
Bonjour
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb") maBase.Execute "select contacts.* into contacts1 in '" & CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base cible.mdb") With maBase .Execute "insert into contacts1 select *from contacts" .TableDefs.Delete "contacts" .TableDefs("contacts1").Name = "Contacts" End With
G Roydor
le pb que vous évoquiez :
Set Table_Modele = Base_Modele.TableDefs("contacts") Base_Source.TableDefs.Append Table_Modele <<<============= Le code
plante ici ...
...
VBA me dit "Ajout impossible. Il existe déjà un objet de ce nom dans la collection"
Alors que j'ai beau scanner ma collection TableDefs dans DONNEES, plus de traces de Contacts, par contre, Contacts1 existe bien...
est cetainement du à la conservation des données par ACCESS pour permettre un retour à la situation initiale si une impossibilité survenait dans les opérations successives. il faut étudier la notion de transaction et les possibilités de donner l'indication de bonne fin de procédure (ce qui arrive lorsque vous avez quitté l'exécution du code d'ou la disparition de Contact).
Cordialement GR
Pierre Fauconnier a écrit:
Bonjour
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb") maBase.Execute "select contacts.* into contacts1 in '" & CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base cible.mdb") With maBase .Execute "insert into contacts1 select *from contacts" .TableDefs.Delete "contacts" .TableDefs("contacts1").Name = "Contacts" End With
le pb que vous évoquiez :
Set Table_Modele = Base_Modele.TableDefs("contacts")
Base_Source.TableDefs.Append Table_Modele <<<============= Le code
plante ici
...
...
VBA me dit "Ajout impossible. Il existe déjà un objet de ce nom
dans la
collection"
Alors que j'ai beau scanner ma collection TableDefs dans DONNEES, plus
de traces de Contacts, par contre, Contacts1 existe bien...
est cetainement du à la conservation des données par ACCESS pour
permettre un retour à la situation initiale si une impossibilité
survenait dans les opérations successives.
il faut étudier la notion de transaction et les possibilités de donner
l'indication de bonne fin de procédure (ce qui arrive lorsque vous avez
quitté l'exécution du code d'ou la disparition de Contact).
Cordialement
GR
Pierre Fauconnier a écrit:
Bonjour
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb")
maBase.Execute "select contacts.* into contacts1 in '" &
CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base cible.mdb")
With maBase
.Execute "insert into contacts1 select *from contacts"
.TableDefs.Delete "contacts"
.TableDefs("contacts1").Name = "Contacts"
End With
Set Table_Modele = Base_Modele.TableDefs("contacts") Base_Source.TableDefs.Append Table_Modele <<<============= Le code
plante ici ...
...
VBA me dit "Ajout impossible. Il existe déjà un objet de ce nom dans la collection"
Alors que j'ai beau scanner ma collection TableDefs dans DONNEES, plus de traces de Contacts, par contre, Contacts1 existe bien...
est cetainement du à la conservation des données par ACCESS pour permettre un retour à la situation initiale si une impossibilité survenait dans les opérations successives. il faut étudier la notion de transaction et les possibilités de donner l'indication de bonne fin de procédure (ce qui arrive lorsque vous avez quitté l'exécution du code d'ou la disparition de Contact).
Cordialement GR
Pierre Fauconnier a écrit:
Bonjour
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb") maBase.Execute "select contacts.* into contacts1 in '" & CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base cible.mdb") With maBase .Execute "insert into contacts1 select *from contacts" .TableDefs.Delete "contacts" .TableDefs("contacts1").Name = "Contacts" End With
Pierre Fauconnier
Bonsoir
Je n'avais pas pensé à cette possibilité de transaction, mais je pense que le problème se situe ailleurs car même après avoir fermé la base cible et l'avoir ouverte à nouveau, le problème demeure...
De toute façon, comme expliqué dans ma réponse, le problème du transfert des propriétés de champs qui ne se fait pas rend inutile la manipulation de cette façon. J'ai donc dµu créé une fonction pour copier ma structure autrement.
Merci pour l'aide apportée et bon week-end.
-- Pierre Fauconnier () "Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe zen ) Remplacez nospam.nospam par pfi.be pour répondre. Merci
"G Roydor" a écrit dans le message de news:
le pb que vous évoquiez :
Set Table_Modele = Base_Modele.TableDefs("contacts") Base_Source.TableDefs.Append Table_Modele <<<============= Le code
plante ici ...
...
VBA me dit "Ajout impossible. Il existe déjà un objet de ce nom dans la collection"
Alors que j'ai beau scanner ma collection TableDefs dans DONNEES, plus de traces de Contacts, par contre, Contacts1 existe bien...
est cetainement du à la conservation des données par ACCESS pour permettre un retour à la situation initiale si une impossibilité survenait dans les opérations successives. il faut étudier la notion de transaction et les possibilités de donner l'indication de bonne fin de procédure (ce qui arrive lorsque vous avez quitté l'exécution du code d'ou la disparition de Contact).
Cordialement GR
Pierre Fauconnier a écrit:
Bonjour
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb") maBase.Execute "select contacts.* into contacts1 in '" & CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base cible.mdb") With maBase .Execute "insert into contacts1 select *from contacts" .TableDefs.Delete "contacts" .TableDefs("contacts1").Name = "Contacts" End With
Bonsoir
Je n'avais pas pensé à cette possibilité de transaction, mais je pense que
le problème se situe ailleurs car même après avoir fermé la base cible et
l'avoir ouverte à nouveau, le problème demeure...
De toute façon, comme expliqué dans ma réponse, le problème du transfert des
propriétés de champs qui ne se fait pas rend inutile la manipulation de
cette façon. J'ai donc dµu créé une fonction pour copier ma structure
autrement.
Merci pour l'aide apportée et bon week-end.
--
Pierre Fauconnier (pierre.fauconnier@nospam.nospam)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci
"G Roydor" <guy.roydor@NOlaposteSPAM.net> a écrit dans le message de news:
4284FD71.5070604@NOlaposteSPAM.net...
le pb que vous évoquiez :
Set Table_Modele = Base_Modele.TableDefs("contacts")
Base_Source.TableDefs.Append Table_Modele <<<============= Le code
plante ici
...
...
VBA me dit "Ajout impossible. Il existe déjà un objet de ce nom dans
la
collection"
Alors que j'ai beau scanner ma collection TableDefs dans DONNEES, plus
de traces de Contacts, par contre, Contacts1 existe bien...
est cetainement du à la conservation des données par ACCESS pour permettre
un retour à la situation initiale si une impossibilité survenait dans les
opérations successives.
il faut étudier la notion de transaction et les possibilités de donner
l'indication de bonne fin de procédure (ce qui arrive lorsque vous avez
quitté l'exécution du code d'ou la disparition de Contact).
Cordialement
GR
Pierre Fauconnier a écrit:
Bonjour
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb")
maBase.Execute "select contacts.* into contacts1 in '" &
CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base
cible.mdb")
With maBase
.Execute "insert into contacts1 select *from contacts"
.TableDefs.Delete "contacts"
.TableDefs("contacts1").Name = "Contacts"
End With
Je n'avais pas pensé à cette possibilité de transaction, mais je pense que le problème se situe ailleurs car même après avoir fermé la base cible et l'avoir ouverte à nouveau, le problème demeure...
De toute façon, comme expliqué dans ma réponse, le problème du transfert des propriétés de champs qui ne se fait pas rend inutile la manipulation de cette façon. J'ai donc dµu créé une fonction pour copier ma structure autrement.
Merci pour l'aide apportée et bon week-end.
-- Pierre Fauconnier () "Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe zen ) Remplacez nospam.nospam par pfi.be pour répondre. Merci
"G Roydor" a écrit dans le message de news:
le pb que vous évoquiez :
Set Table_Modele = Base_Modele.TableDefs("contacts") Base_Source.TableDefs.Append Table_Modele <<<============= Le code
plante ici ...
...
VBA me dit "Ajout impossible. Il existe déjà un objet de ce nom dans la collection"
Alors que j'ai beau scanner ma collection TableDefs dans DONNEES, plus de traces de Contacts, par contre, Contacts1 existe bien...
est cetainement du à la conservation des données par ACCESS pour permettre un retour à la situation initiale si une impossibilité survenait dans les opérations successives. il faut étudier la notion de transaction et les possibilités de donner l'indication de bonne fin de procédure (ce qui arrive lorsque vous avez quitté l'exécution du code d'ou la disparition de Contact).
Cordialement GR
Pierre Fauconnier a écrit:
Bonjour
Pour ceux que cela intéresse, j'ai trouvé une solution en DAO...
Dim maBase As DAO.Database
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "modèle.mdb") maBase.Execute "select contacts.* into contacts1 in '" & CurrentProject.Path & "base cible.mdb' from contacts"
Set maBase = DAO.OpenDatabase(CurrentProject.Path & "base cible.mdb") With maBase .Execute "insert into contacts1 select *from contacts" .TableDefs.Delete "contacts" .TableDefs("contacts1").Name = "Contacts" End With