OVH Cloud OVH Cloud

remplacement de tables (mise à jour)

2 réponses
Avatar
POL
Bonjour,
J'utilise Access 2000 et ai un programme tournant sur 2=20
ordinateurs diff=E9rents, l'un des 2 seulement =E9tant=20
autoris=E9 =E0 modifier les donn=E9es dans les tables (l'autre=20
a le fichier MDB avec propri=E9t=E9s "en lecture seule").
La base de donn=E9es est "fractionn=E9e" afin d'avoir libre=20
acc=E8s aux tables.
Je veux mettre =E0 jour les tables d=E9suettes du 1er=20
ordinateur par celles du 2=E8 qui ont =E9volu=E9 dans la=20
semaine.
Comment =E9crire (sous Access ?) une routine qui=20
effectuerait cette op=E9ration de mani=E8re transparente, le=20
m=E9dia de transfert entre les deux pc =E9tant p.ex. un=20
memory stick.
Id=E9alement cette op=E9ration devrait pr=E9server la=20
propri=E9t=E9 "lecture seule" du fichier de destination.
Merci pour votre aide !
POL

2 réponses

Avatar
Raymond [mvp]
Bonjour.

ce n'est pas si simple qi'il n'y parait de changer une base principale par
une autre.
Il faut conserver les options de la base locale et pas que la lecture
seulement.
il faut conserver les relations de la table externe importée.
on ne peut pas supprimer une table qui a des relations, il faut les
supprimer avant la suppression de la table.

Il faut faire un choix :
1- la base locale frontale gère des codes d'accès et selon le code tu mets
les formulaires en lecture ou lecture-écriture.
dans ce cas une simple copie de la base principale suffit.

2-tu ne peux rien gérer au niveau de la base frontale et tu dois copier tous
les objets de la base externe dans ta base principale. ce qui nécessite
d'avoir un formulaire dans la base principale pour faire la mise à jour. il
te faut donc supprimer toutes les relations, voir page :
http://access.seneque.free.fr/sup_relations.htm, et ensuite supprimer les
tables et importer celles de la base externe.

pour faire la copie tu peux utiliser l'automation access comme ceci:

Private Sub Commande0_Click()
Dim Tbl As DAO.TableDef
Dim APP As Access.Application
Set APP = New Access.Application
APP.OpenCurrentDatabase ("bd3.mdb")
For Each Tbl In APP.CurrentDb.TableDefs
If Left(Tbl.Name, 4) <> "msys" Then
DoCmd.DeleteObject acTable, Tbl.Name
DoCmd.TransferDatabase acImport, "Microsoft Access", "bd3.mdb",
acTable, Tbl.Name, Tbl.Name
End If
Next Tbl
APP.CloseCurrentDatabase
APP.Quit
Set APP = Nothing
Set Tbl = Nothing
End Sub

c'est une des idées, il y en a d'autres .
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"POL" a écrit dans le message de
news:7f7301c3b4cc$84767670$
Bonjour,
J'utilise Access 2000 et ai un programme tournant sur 2
ordinateurs différents, l'un des 2 seulement étant
autorisé à modifier les données dans les tables (l'autre
a le fichier MDB avec propriétés "en lecture seule").
La base de données est "fractionnée" afin d'avoir libre
accès aux tables.
Je veux mettre à jour les tables désuettes du 1er
ordinateur par celles du 2è qui ont évolué dans la
semaine.
Comment écrire (sous Access ?) une routine qui
effectuerait cette opération de manière transparente, le
média de transfert entre les deux pc étant p.ex. un
memory stick.
Idéalement cette opération devrait préserver la
propriété "lecture seule" du fichier de destination.
Merci pour votre aide !
POL
Avatar
POL
Bien reçu ta réponse Raymond.
Pas si simple en effet cette solution...!
Je me mets au travail dès maintenant.
Merci pour ton aimable réponse.
POL.

-----Message d'origine-----
Bonjour.

ce n'est pas si simple qi'il n'y parait de changer une
base principale par

une autre.
Il faut conserver les options de la base locale et pas
que la lecture

seulement.
il faut conserver les relations de la table externe
importée.

on ne peut pas supprimer une table qui a des relations,
il faut les

supprimer avant la suppression de la table.

Il faut faire un choix :
1- la base locale frontale gère des codes d'accès et
selon le code tu mets

les formulaires en lecture ou lecture-écriture.
dans ce cas une simple copie de la base principale
suffit.


2-tu ne peux rien gérer au niveau de la base frontale et
tu dois copier tous

les objets de la base externe dans ta base principale.
ce qui nécessite

d'avoir un formulaire dans la base principale pour faire
la mise à jour. il

te faut donc supprimer toutes les relations, voir page :
http://access.seneque.free.fr/sup_relations.htm, et
ensuite supprimer les

tables et importer celles de la base externe.

pour faire la copie tu peux utiliser l'automation access
comme ceci:


Private Sub Commande0_Click()
Dim Tbl As DAO.TableDef
Dim APP As Access.Application
Set APP = New Access.Application
APP.OpenCurrentDatabase ("bd3.mdb")
For Each Tbl In APP.CurrentDb.TableDefs
If Left(Tbl.Name, 4) <> "msys" Then
DoCmd.DeleteObject acTable, Tbl.Name
DoCmd.TransferDatabase acImport, "Microsoft
Access", "bd3.mdb",

acTable, Tbl.Name, Tbl.Name
End If
Next Tbl
APP.CloseCurrentDatabase
APP.Quit
Set APP = Nothing
Set Tbl = Nothing
End Sub

c'est une des idées, il y en a d'autres .
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"POL" a écrit dans le message de
news:7f7301c3b4cc$84767670$
Bonjour,
J'utilise Access 2000 et ai un programme tournant sur 2
ordinateurs différents, l'un des 2 seulement étant
autorisé à modifier les données dans les tables (l'autre
a le fichier MDB avec propriétés "en lecture seule").
La base de données est "fractionnée" afin d'avoir libre
accès aux tables.
Je veux mettre à jour les tables désuettes du 1er
ordinateur par celles du 2è qui ont évolué dans la
semaine.
Comment écrire (sous Access ?) une routine qui
effectuerait cette opération de manière transparente, le
média de transfert entre les deux pc étant p.ex. un
memory stick.
Idéalement cette opération devrait préserver la
propriété "lecture seule" du fichier de destination.
Merci pour votre aide !
POL


.