J'ai bugé !
Il fallait lireNon, mais je vais chercher à moins que tu ne me donnes une piste !Sais-tu mettre en place une gestion d'erreurs? Il s'agit ici, de 4 ou 5 lignes seulement.
J'ai bugé !
Il fallait lireNon, mais je vais chercher à moins que tu ne me donnes une piste !Sais-tu mettre en place une gestion d'erreurs? Il s'agit ici, de 4 ou 5 lignes seulement.
Je me perds un peu dans tes explications
"ANN", c'est la référence à DB2 que tu veux remplacer par une autre plus à jour, c'est bien çà?
Donc la procédure adéquate serait de :
- virer cette référence par "References.Remove"
- Supprimer le fichier DB2 contenant l'ancienne référence
- Copier la nouvelle version grâce au fso
- Rajouter la nouvelle référence par le "References.AddFromFile Chemin-du-fichier"
Si au milieu de tout çà tu as une erreur soulevée tu peux la gérer par la gestion d'erreur, ta procédure devrait avoir la structure suivante:
Lorsque l'erreur se déclenche, à l'affichage du message Access:
Ctl+Pause
La ligne incriminée se retrouve surlignée de jaune
Dans la fenêtre de débogage (Ctl+G)
Tape : ?err
Une numéro d'erreur s'affiche
Ensuite tu l'interceptes ainsi:
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 Sub Machin() On Error Goto ErrMan ligne 1 ligne 2 ... Fin: Exit Sub ErrMan: If err=N°-erreur-soulevée Then Resume Next Else MsGBox(Error(Err)) Resume Fin end if End Sub
Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
Ou encore:
Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
... Des principes qui m'ont beaucoup aidé en informatique...
Je vais essayer de préciser.Je me perds un peu dans tes explications
Il s'agit d'une appli basée sur une très grosse table généalogique , l'"index" d'une dizaine de champs et de près de 500000 lignes, extrait de fiches individuelles avec état-civil, adresses, parents, conjoints et enfants de cheminots depuis les origines du chemin de fer en France.
Les données détaillées sont dans une douzaine de bases externes situées dans le même répertoire que la base active qui permet
1) de rechercher par le nom/prénom un individu.
2) de rechercher une fiche détaillée dont on connait le N° et la base, à partir de cette base qui est une référence de la base active.
3) de mettre à jour les bases externes en fonction des nouvelles fiches dont les données ont été enregistrées et de compléter l'index
4) de créer 2 fois par an un fichier de plus (actuellement) 35 Mo qui est transmis à une association bien connue "Geneanet' qui les met en ligne.
Les 2 premières opérations nécessitent l'accès à distance aux bases externes, d'où l'obligation de les référencer. Elles peuvent être utilisées par les membres du cercle.
Par contre les 2 autres, qui ne nécessitent pas de références, chaque base pouvant être traitée individuellement, sont utilisées uniquement par des personnes désignées.
C'est donc un Portail donnant accès à plusieurs bases et il s'appelle justement CGCPortail du nom du "Cercle Généalogique des Cheminots"
J'ai été un peu longe et j'espère que tu y verras plus clair dans mes demandes.
Il y a une raison pour que tu passes par des références plutôt que par des attaches de tables ?
Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
Ou encore:
Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
... Des principes qui m'ont beaucoup aidé en informatique...
Bonne question !
Dans chacune des bases externes, qui sont des bases autonomes scindées, il y a un fichier mdb contenant uniquement deux tables, à savoir les données individuelles et celles des personnes qui les ont relevé dans les différentes archives, et un autre fichier mdb contenant les états de sortie, les requêtes correspondantes et une procédure d'affichage.
Une référence à chaque base externe suffit pour pouvoir commander depuis la base BDA l'affichage des états à distance.
les liaisons entre bases n'existent réellement qu'au sein de chaque base externe.
Et cela facilite la Màj de ces bases : il suffit de supprimer temporairement la référence dans la BDA à condition de savoir le faire !
L'utilisation de toutes les tables liées (actuellement 24) conduirait probablement à d'autres problèmes et les bases externes ne pourraient plus être facilement (?) rendues autonomes pour simplifier leur Màj.
J'ai essayé de reproduire chez moi ton architecture mais je tombe sur le même message "Impossible d'entrer en mode Arrêt maintenant" lors du remove alors que je l'ai pratiqué avec bonheur sur d'autres appls . S'agirait-il d'un réglage Access proprement dit (ou de l'éditeur)?
Je peux t'envoyer mes essais mais je doute qu'ils te servent.
Tu pourrais t'intéresser sinon au "Late Binding" qui résoudrait probablement ton pbme.
Littérature ici et ici.
Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
Ou encore:
Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
... Des principes qui m'ont beaucoup aidé en informatique...
Intéressante cette littérature !
J'ai maintenant supprimé toutes les références aux tables externes dans la base de commande , car elles ne sont pas nécessaires pour le développement.
Je na'ai pas encore eu le temps de reprendre les tests, pour le moment ces références ne sont pas revenues, ce que je craignais.
Je te tiens au courant des suites.
Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
Ou encore:
Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
... Des principes qui m'ont beaucoup aidé en informatique...
J'ai crié "victoire" un peu vite, car ce matin, ces références étaient revenues.
Je les ai toutes à nouveau supprimées et fait un premier testCa bute ligne 3 "erreur de compilation. Incompatibilité de type" sur le nom de la base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Dim db As Database Dim oa As AccessObject Set db = "C:\CGCPortail\DIS_ACO3.mdb" For Each oa In db.AllForms 'CurrentProject.AllTables() Debug.Print oa.Name Next oa
Je ne comprends plus, car c'est bien un nom de base qui existe.
Essaye comme çà:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Dim db As Database Dim oa As AccessObject Set db = OpenDatabase( "C:\CGCPortail\DIS_ACO3.mdb") For Each oa In db.Containers("Forms").Documents Debug.Print oa.Name Next oa db.Close Set db = Nothing
Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
Ou encore:
Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
... Des principes qui m'ont beaucoup aidé en informatique...
Grâce à toi, j'ai avancé.C'est maintenant à la ligne 5 que ça coince "Incompatibilité de type".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Dim db As Database Dim oa As AccessObject Set db = OpenDatabase("C:\CGCPortail\DIS_AC03.mdb") 'For Each oa In db.AllForms 'CurrentProject.AllTables() For Each oa In db.Containers("Tables").Documents Debug.Print oa.Name Next oa
Essaye en mettant un type variant pour oa en ligne 2, comme çà:
Code : Sélectionner tout - Visualiser dans une fenêtre à part Dim oa
Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
Ou encore:
Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
... Des principes qui m'ont beaucoup aidé en informatique...
ou alors:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Sub ListerFormBaseDistante(LeCheminDeLaDbDistante As String) Dim db As DAO.Database, doc As DAO.Document 'Ouvrir la db distante Set db = OpenDatabase(LeCheminDeLaDbDistante) 'Lister les formulaires For Each doc In db.Containers("Forms").Documents Debug.Print doc.Name Next doc 'Sortir db.Close Set db = Nothing End Sub
Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
Ou encore:
Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
... Des principes qui m'ont beaucoup aidé en informatique...
On avance !
J'ai testé ta suggestion telle qu'elle.
Va au bout, mais aucun nom ne sort.
Il n'y a pas de formulaire dans la base choisie, seulement des tables et des états.
Donc, remplacé Forms par Reports et obtenu le nom des états.
Avec "Tables" on obtiens une longue liste de tablesles 3 dernières lignes correspondent aux doc existants (en dehors des docs système)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 MSysAccessStorage MSysAccessXML MSysACEs MSysNavPaneGroupCategories MSysNavPaneGroups MSysNavPaneGroupToObjects MSysNavPaneObjectIDs MSysObjects MSysQueries MSysRelationships Releveurs reqDIS tabDIS
Avec cela je vais pouvoir avancer un peu plus.
A+
Cool !
Tout çà illustre bien la maxime de Samuel Beckett ci-dessous !
Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
Ou encore:
Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
... Des principes qui m'ont beaucoup aidé en informatique...
Je progresse très lentement.
Je viens seulement de me rendre compte que le container "Queries" est inconnu de mon codequi ne connait que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 For Each co In db.Containers Debug.Print co.Name & " " & co.Documents.Count next
DataAccessPages
DataBases
Forms
Modules
Relationships
reports
Scripts
SysRel
Tables
Quand on cherche le container Queries : inconnu !
Or j'en ai besoin pour les états.
Aurais-tu une idée ?
Bonsoir,
Après 5 mn de recherches (donc pas exhaustives), je suis tombé sur cette source dans le forum:
... qui recense les requêtes de la base en cours: tu peux peut-être modifier ce code en ouvrant une base cible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Sub AllQueries() Dim obj As AccessObject, dbs As Object Set dbs = Application.CurrentData ' Search for open AccessObject objects in AllQueries collection. For Each obj In dbs.AllQueries If obj.IsLoaded = True Then ' Print name of obj. Debug.Print obj.Name End If Next obj End Sub
En faisant au début un truc du genre:
Tu peux aussi regarder çà et çà.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Dim dbCible as DataBase, obj as AccessObject Set dbCible="Chemin de la base\Base-Cible.accdb" For Each obj In dbCible.AllQueries ...
Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
Ou encore:
Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
... Des principes qui m'ont beaucoup aidé en informatique...
Malheureusement AllQueries n'est connu que de CurrentBase ou DataBase et je suis dans une base distante.
Réflexion faite, comme chaque Repors possède dans ses propriété sa source qui est une requête, il ne m'est pas nécessaire d'en connaître le nom, seule l'existence de cette requête est indispensable et la situation est telle que je suis sur de son existence.
Donc j'arrête mes recherchées sur ce point, car il m'en reste pas mal d'autres à régler !
pour lister les queries d'une bases distante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Sub listDistant_AllQueries() Dim obj As Object, oDb As DAO.Database Set oDb = OpenDatabase("D:\dev\dev_IGP\app_igp.accdb") ' Search for open AccessObject objects in a collection. 'For Each obj In oDb.AllQueries For Each obj In oDb.QueryDefs ' Print name of obj. Debug.Print obj.Name Next obj End Sub
"Always look at the bright side of life." Monty Python.
Bah oui!
Merci micniv, j'y pense jamais aux querydefs !
Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
Ou encore:
Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
... Des principes qui m'ont beaucoup aidé en informatique...
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