mgoujeon
Messages postés13Date d'inscriptionjeudi 5 novembre 2009StatutMembreDernière intervention11 janvier 2012
-
27 sept. 2011 à 20:49
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDerniè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...
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 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 ?
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 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..
mgoujeon
Messages postés13Date d'inscriptionjeudi 5 novembre 2009StatutMembreDernière intervention11 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.
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
mgoujeon
Messages postés13Date d'inscriptionjeudi 5 novembre 2009StatutMembreDernière intervention11 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.