Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Débutant] Outil de comparaison de mdb

12 réponses
Avatar
Frd
Bonjour,

existe-t-il un outil permettant de comparer 2 fichiers mdb de façon
"globale" ?
Les fichiers contiennent, a priori, le même nombre de tables mais ces
tables peuvent différer en nombre de champs et en nombre
d'enregistrements et je ne trouve pas de programme qui me donne juste
ces infos. Et dans Access je trouve pas non plus.

Merci.

10 réponses

1 2
Avatar
Gloops
Frd a écrit, le 18/04/2013 10:07 :
Bonjour,

existe-t-il un outil permettant de comparer 2 fichiers mdb de façon
"globale" ?
Les fichiers contiennent, a priori, le même nombre de tables mais ces
tables peuvent différer en nombre de champs et en nombre
d'enregistrements et je ne trouve pas de programme qui me donne juste
ces infos. Et dans Access je trouve pas non plus.

Merci.




Bonjour,

Si on s'arrête à la première question pour des bases identiques
(obtenues par copier/coller), il y a bien FC qui permet de vérifier la
conformité, attention de bien prendre le temps d'en comprendre le
fonctionnement.

En revanche, si on sait qu'il y a des différences et qu'on veut en fair e
le tour, je n'ai jamais entendu parler de quelque chose de tout prêt.
Comme je ne connais pas tout tu peux revenir dans quelques jours pour
voir, encore que la fréquentation ait quand même bien baissé ici.

Il reste donc à écrire toi-même la comparaison, avec les objets
Database, TableDef pour une table, Field pour un champ ...

Si c'est juste le nombre de champs qui t'intéresse, ça ira plus vite que
si tu veux aussi comparer leurs noms et leurs types ...

Il me semble que ça devrait pouvoir se faire en une heure ou deux en
comptant un peu de mise au point. Peut-être un peu plus si tu veux
fignoler l'interface utilisateur.


Pour commencer, tu auras les nombres de champs des tables comme ceci (je
n'ai rien pour tester, mais j'espère ne pas taper trop de sottises) :

' =========
Dim Db As Database
Dim Tb As TableDef
Dim Fd As Field

Set Db = CurrentDb()
' variante : Db = Workspaces(0)(0)
For Each Tb in Db.TableDefs
Debug.Print Tb.Name, Tb.Fields.Count
Next

' =========

Tu verras que parmi les tables il y a quelques tables dites "système",
qui servent à Access à gérer sa cuisine, et ne figurent pas au modè le
opérationnel de données tel que défini par l'analyste-programmeur s elon
les principes de Merise, et a priori sont cachées dans l'interface
utilisateur, et qui donc ne t'intéressent pas.

Si je me rappelle bien leurs noms commencent par MSys (à vérifier), o n
peut donc compléter le code :

For Each Tb in Db.TableDefs
If Left(Tb.Name, 4) <> "MSys" Then
Debug.Print Tb.Name, Tb.Fields.Count
End If
Next

Tu vois, en quatre lignes, on a bien avancé le problème, donc
finalement, tu risques d'aller plus vite de le faire toi-même que
d'attendre que quelqu'un te trouve une sauce toute prête.

Dans l'aide, tu as voir que l'objet Database a une méthode OpenDatabase ,
pour ouvrir une autre base, que l'objet TableDef peut être visé par s on
nom, comme par exemple Db.TableDefs("tabPersonne")

Pour savoir si une table existe, plusieurs intervenants ont proposé des
fonctions ExisteTable, prenant comme argument le nom de la base et celui
de la table cherchée. Je pense par exemple à Raymond Sénèque, à 3stone ...

Ce n'est pas sûr que ça te prenne plus de temps pour le faire que ç a ne
t'a pris pour me lire :)
Avatar
Frd
Le 19/04/2013 16:15, Gloops a écrit :
Frd a écrit, le 18/04/2013 10:07 :



Bonjour,


existe-t-il un outil permettant de comparer 2 fichiers mdb de façon
"globale" ?
Les fichiers contiennent, a priori, le même nombre de tables mais ces
tables peuvent différer en nombre de champs et en nombre
d'enregistrements et je ne trouve pas de programme qui me donne juste
ces infos. Et dans Access je trouve pas non plus.

Merci.




Bonjour,

Si on s'arrête à la première question pour des bases identiques
(obtenues par copier/coller), il y a bien FC qui permet de vérifier la
conformité, attention de bien prendre le temps d'en comprendre le
fonctionnement.



peux-tu m'en dire plus sur ce FC ?
D'après google, c'est sans doute un club de foot, mais j'y crois pas :)

Il me semble que ça devrait pouvoir se faire en une heure ou deux en
comptant un peu de mise au point. Peut-être un peu plus si tu veux
fignoler l'interface utilisateur.



J'ai déjà un bout de code C++ qui lit les tables, je crois que je vais
repartir de là.

Si je me rappelle bien leurs noms commencent par MSys (à vérifier),



Oui

Ce n'est pas sûr que ça te prenne plus de temps pour le faire que ça ne
t'a pris pour me lire :)



Merci pour ta réponse détaillée.
Avatar
Gloops
Frd a écrit, le 22/04/2013 14:50 :
peux-tu m'en dire plus sur ce FC ?
D'après google, c'est sans doute un club de foot, mais j'y crois pas :)



Tu aurais dû ajouter Windows aux critères de recherche ;)
En tapant FC /? dans une fenêtre de lignes de commandes, tu obtiens cec i :

FC /?


Compare deux fichiers ou ensembles de fichiers et affiche les différenc es
entre eux


FC [/A] [/C] [/L] [/LBn] [/N][/OFF[LINE]][/T] [/U] [/W] [/nnnn]
[lect1:][chemin1]fichier1 [lect2:][chemin2]fichier2
FC /B [lect1:][chemin1]fichier1 [lect2:][chemin2]fichier2

/A Affiche la 1ère et dernière ligne de chaque ensemble de
différences
.
/B Effectue une comparaison binaire.
/C Ignore la casse.
/L Compare les fichiers en tant que texte ASCII.
/LBn Définit le nombre maximal de différences consécutives
comme égal
au nombre de lignes spécifié.
/N Affiche les numéros de ligne pour une comparaison ASCII.
/OFF[LINE] Ne pas ignorer les fichiers dont l'attribut hors connexion
a été ré
glé.
/T Ne convertit pas les tabulations en espaces.
/U Compare les fichiers en tant que fichiers texte UNICODE.
/W Comprime les blancs (tabulations et espaces) pour la
comparaison.
/nnnn Spécifie le nombre de lignes consécutives qui doivent
correspondre
après une différence.
[lect1:][chemin1]fichier1
Spécifie le premier fichier ou ensemble de fichiers à
comparer.
[lect2:][chemin2]fichier2
Spécifie le second fichier ou ensemble de fichiers à co mparer.
======================== ========================= ==========

J'imagine que tu sais que sous Windows XP, pour obtenir une fenêtre de
lignes de commandes il suffit de presser les touches Windows R, et dans
l'invite de commandes taper CMD, suivi de la touche d'entrée.

A un moment il y avait FCOMP, je ne sais plus, c'était peut-être la
version d'avant. Sous DOS peut-être bien (ouais je suis un petit jeune,
je viens de sortir de l'école ;) )


Il me semble que ça devrait pouvoir se faire en une heure ou deux en
comptant un peu de mise au point. Peut-être un peu plus si tu veux
fignoler l'interface utilisateur.



J'ai déjà un bout de code C++ qui lit les tables, je crois que je v ais
repartir de là.



Tu programmes en C++ et tu rames tant pour comparer les structures de
deux bases Access ? Je me gratte la tête ...

Merci pour ta réponse détaillée.



Comme disait quelqu'un, "pasd'quoi" :)
Avatar
Gloops
Gloops a écrit, le 22/04/2013 17:06 :
/B Effectue une comparaison binaire.



indispensable pour comparer deux bases, si je ne m'abuse.
Sinon on va comparer en mode texte, et ça ne rime pas à grand-chose.
Avatar
Frd
Le 22/04/2013 17:06, Gloops a écrit :
Frd a écrit, le 22/04/2013 14:50 :
peux-tu m'en dire plus sur ce FC ?
D'après google, c'est sans doute un club de foot, mais j'y crois pas :)



Tu aurais dû ajouter Windows aux critères de recherche ;)
En tapant FC /? dans une fenêtre de lignes de commandes, tu obtiens ceci :

>FC /?
Compare deux fichiers ou ensembles de fichiers et affiche les différences
entre eux



Ouhla vu la taille des bases en question c'est un coup à avoir quelques
millions d'octets de différences.

A un moment il y avait FCOMP, je ne sais plus, c'était peut-être la
version d'avant. Sous DOS peut-être bien (ouais je suis un petit jeune,
je viens de sortir de l'école ;) )



Pas mieux !

J'ai déjà un bout de code C++ qui lit les tables, je crois que je vais
repartir de là.



Tu programmes en C++ et tu rames tant pour comparer les structures de
deux bases Access ? Je me gratte la tête ...



Faire du C++ ne veut pas dire qu'on maîtrise les finesses de SQL !

C'est pas que je rame, mais je voulais pas réinventer la roue.
J'ai bien trouvé une application "CompareDB" mais elle se plante de suite...

Merci pour ta réponse détaillée.



Comme disait quelqu'un, "pasd'quoi" :)



Mais si, si, j'insiste :)
Avatar
Frd
Le 22/04/2013 17:07, Gloops a écrit :
Gloops a écrit, le 22/04/2013 17:06 :
/B Effectue une comparaison binaire.



indispensable pour comparer deux bases, si je ne m'abuse.
Sinon on va comparer en mode texte, et ça ne rime pas à grand-chose.



Oui un mdb c'est pas du texte.
Avatar
Gloops
Frd a écrit, le 23/04/2013 09:32 :
J'ai bien trouvé une application "CompareDB" mais elle se plante de s uite...



Tiens, ça me rappelle vaguement quelque chose ...
Raconte un peu pour voir ?
Avatar
Gloops
Frd a écrit, le 23/04/2013 09:32 :
Ouhla vu la taille des bases en question c'est un coup à avoir quelqu es
millions d'octets de différences.




Au fait ça serait une bonne idée de fractionner entre frontal et base
dorsale ... Histoire de pouvoir d'un côté comparer les structures et
traitements, de l'autre les données. Enfin les données c'est pour rig oler.
Avatar
Frd
Le 25/04/2013 23:56, Gloops a écrit :
Frd a écrit, le 23/04/2013 09:32 :
J'ai bien trouvé une application "CompareDB" mais elle se plante de suite...



Tiens, ça me rappelle vaguement quelque chose ...
Raconte un peu pour voir ?



Oh y a pas grand chose à dire.
Tu choisis les 2 bases à comparer, tu lances la comparaison, ça dit
"runtime error invalid column value" et ça sort.
Avatar
Frd
Le 25/04/2013 23:58, Gloops a écrit :
Frd a écrit, le 23/04/2013 09:32 :
Ouhla vu la taille des bases en question c'est un coup à avoir quelques
millions d'octets de différences.




Au fait ça serait une bonne idée de fractionner entre frontal et base
dorsale ... Histoire de pouvoir d'un côté comparer les structures et
traitements, de l'autre les données. Enfin les données c'est pour rigoler.



Pour rigoler ?
Il n'y a pas de traitement, formulaires ou autres dans ces bases.
Tout se fait par l'intermédiaire d'une application maison.
1 2