Requete multi bases dans plusieurs répertoires

mgoujeon Messages postés 13 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 11 janvier 2012 - 27 sept. 2011 à 20:49
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 - 3 oct. 2011 à 01:33
Bonjour à tous,

Voilà je débute en VB.NET et j'ai déjà une problématique assez complexe à résoudre... en parallèle de mes recherches infructueuses pour le moment je vous soumets mon cas en espérant trouver ici une piste ou élément de réponse.

J'ai plusieurs Base de données Access 2007 qui se trouvent dans plusieurs répertoires d'une racine de la manière suivante :

Racine :
- Répertoire "A"
- - Sous Répertoire "A1" - Basededonnées.accdb -> Table X -> Champàvérifier
- - Sous Répertoire "A2" - Basededonnées.accdb -> Table X -> Champàvérifier

- Répertoire "B"
- - Sous Répertoire "B1" - Basededonnées.accdb -> Table X -> Champàvérifier

Je précise que le nom de la base de données est toujours le même comme celui de la table et du champ à vérifier.

Mon besoin est de pouvoir vérifier si le champàvérifier est égale à une valeur recherchée (variable) dans l'ensemble des enregistrements de la table X de l'ensemble des bases de données situées sous la racine. Le résultat pourrait s'afficher dans un listview qui préciserait le chemin de la table contenant la valeur recherchée.

De mon point de vue cela devrait ressembler à quelque chose comme cela d'un point de vue logique.

Recherche de tables.accdb à partir de la racine
Si table.accdb est trouvée alors
Vérifier si un enregistrement de la table = valeur recherchée
Si oui : Renvoyer le chemin de la base de données dans un listview
Si non : rechercher une table.accdb suivante
Si plus de table trouvée : Fin

Qu'en pensez vous ? Cela est-il possible ?

D'avance merci pour vos réponses et aide, je reste à votre disposition pour détailler si nécessaire...

7 réponses

LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
28 sept. 2011 à 01:43
Bonsoir,

Reequete multitables..?!
Si la question est de rechercher une valeur dans différentes tables
dans des bases différentes,en quoi cela correspond au titre de ton message ?

De plus ce qu' il TE semble être la meilleure façon de procèder
est effectivement ce qu' il ME semble être la meilleure façon de procèder..
Reste à savoir dans quel ordre.
Tout dépend alors de ta priorité..

Et combien même tu arrives à lier les différentes tables (ce qui est toujours possibles)
comment veux tu que ta requete renvoie un path, ou le nom de la base source ?


[] Ce qui va sans dire. va mieux en le disant.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
28 sept. 2011 à 04:17
relexion faite,voici une tentative avec une requete union.

Soit sPath1 le chemin de la base A.
Soit sPath2 le chemin de la base B.
Soit sPath3 le chemin de la base C.

Soit Table1 une table de la base A.
Soit Table2 une table de la base B.
Soit Table3 une table de la base C.

Le principe consiste a sélectionner les lignes dont la valeur correspond
à la valeur recherchée et de génèrer un autre qui renvoie le nom de la base
dont il est issu.

Cela pourrait donner ceci:

sQuery="SELECT Table1.MonChamp, 'A' AS NomDeBase
FROM Table1 IN '" & sPath1 & "' WHERE (([Table1]![MonChamp]='" & xValeur & "')) "

sQuery=sQuery & "UNION SELECT Table2.MonChamp, 'B' AS NomDeBase
FROM Table2 IN '" & sPath2 & "' WHERE (([Table2]![MonChamp]='" & xValeur & "')) "

sQuery=sQuery & "UNION SELECT Table3.MonChamp, 'C' AS NomDeBase
FROM Table3 IN '" & sPath3 & "' WHERE (([Table3]![MonChamp]='" & xValeur & "'));"

Ainsi ton expression sQuery renvoie 2 colonnes.
Une pour la valeur du champ en question.
L' autre pour identifier sa source.
A pour la base A. B pour la base B et C pour la base C.

ça coûte rien d' essayer.
Tout au pire, ça risque de marcher..







[] Ce qui va sans dire. va mieux en le disant.
0
mgoujeon Messages postés 13 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 11 janvier 2012
28 sept. 2011 à 10:24
Bonjour et Grand Merci LIBRE_MAX pour tes réponses !

Effectivement le nom de mon topic n'était pas très approprié, ceci vient d'être corrigé par un admin (que je remercie au passage). Il s'agit d'une requête multi base de données et non multi tables.

Concernant ton code je vais faire des essais et te tiens informé avec des chemins prédéfinis.

Par contre dans mon cas, je ne connais pas à l'avance le nom des chemins1, 2, etc... L'idée est de pouvoir lancer une recherche à partir d'un répertoire racine.

Je pense qu'il faudrait définir une variable1 correspondant à la racine. Puis lancer une recherche qui irait jusqu'à 2x niveaux au dessus maximum. Car je n'ai pas besoin des résultats dans les chemins plus approfondis.

Selon l'expression 'un dessin vaut mieux qu'un long discours'... Ci joint un lien vers mon exemple à traiter. Ce lien est temporaire et n'est valable que 3x jours à partir de maintenant.

Mon exemple à télécharger.

Je pense que ça sera plus claire comme ça...

Merci encore pour votre aide précieuse !
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
28 sept. 2011 à 11:20
Bonjour,

J' ai jeté un coup d' oeil sur ton envoi, mais je n' arrive pas à ouvrir
Base.accdb. C' est pas du dbaccess ,ça ?
Mais peu importe, l' essentiel c' est que,schématiquement, j' ai compris
dans quel pétrin tu es..
Des sous-repertoires à l' infini..
Qu' à cela ne tienne !
Pour la recherche de fichier, voici un lien, que j' espère, util.
http://faq.vb.free.fr/index.php?question=169


Amicalement

[] Ce qui va sans dire. va mieux en le disant.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mgoujeon Messages postés 13 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 11 janvier 2012
28 sept. 2011 à 12:43
Bonjour LIBRE_MAX !

Normalement les bases.accdb sont des bases de données access 2007. Je ne sais pas pourquoi tu n'arrives pas à les ouvrir ?!

Je vais essayer de rassembler ces bouts de codes et te tiens informé.

Encore MERCI !
0
mgoujeon Messages postés 13 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 11 janvier 2012
2 oct. 2011 à 21:36
Salut LIBRE_MAX !

C'était juste pour te dire que je m'en suis sorti en 'pompant' un bout de code trouvé sur le net ... Avec un peu de modification, voilà le tour est joué

En faite, le code trouvé recherche les fichiers à partir d'un chemin et complète une listview.

Je récupère les données de la listview et m'en sert pour faire ma requête ligne à ligne.

C'est très rapide, que du bonheur. Merci à toi pour ton aide.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
3 oct. 2011 à 01:33
Bonsoir,

Ravi pour toi et content de t' avoir croisé..
Bonne continuation ..

PS: Au sujet de la base, je comprend alors pourquoi ça ne s' ouvrait pas:
Je suis encore avec Access 2003.

[] Ce qui va sans dire. va mieux en le disant.
0