|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Chargé de missions Inscription : novembre 2011 Messages : 18 ![]() |
Bonjour,
Ci-après le code de la bête : Code :
Chercher dans une table (TAXREF) les enregistrements dont le champ NOM_COMPLET contiennent la valeur du champ d'une autre table (aucune jointure possible ; c'est l'objectif final de la manip) : la variable GE. "GE" est une chaîne de deux mots qui existent bien dans le champ NOM_COMPLET, toujours en début de string et suivant la même casse. Problème(s) : L'utilisation du Like *... Les valeurs à trouver dans le champ NOM_COMPLET seront toujours de type "GE"* ; d'où l'écriture du SQL ci-avant. Or, cette syntaxe ne me retourne jamais rien. En revanche, si je double avec un "*" devant GE, là il me sort une kyrielle de valeurs...forcément très éloignées de ma recherche initiale ! ![]() Accessoirement, bien que je soupçonne que ce soit là l'origine du problème, à chaque lancement de la commande j'ai la fenêtre de paramètre qui s'ouvre... Plus surprenant (enfin, pour un débutant comme moi ! ^^), je n'arrive à rien non plus en passant par InStr...bien qu'il ne soit pas exclu que je ne construise pas bien la requête ! Si une bonne âme voulait bien m'éclairer....
|
||
|
|
00
|
|
|
#2 | ||
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 206 ![]() |
Bonjour
Déjà, il ne faut pas entouré le nom du champ de quotes ('), mais uniquement le '*' : Code sql :
Ensuite, il faut mentionner dans la clause From le nom de la table "PLANTAE_LRR_UNMATCHED_TOTAL_GE"... A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
||
|
00
|
|
|
#3 |
|
Invité de passage
![]() Chargé de missions Inscription : novembre 2011 Messages : 18 ![]() |
Merci pour cette réponse : je vous attendais comme le Messie !!
![]() Malheureusement, le quote du seul * ne lui convient pas... Ci-après le code tel que modifié : Code :
SQL2 = "SELECT TAXREFv40.NOM_COMPLET, " & GE & " INTO PLANTAE_LRR_UNMATCHED_TOTAL_SPLIT_VERIF_1 FROM TAXREFv40, PLANTAE_LRR_UNMATCHED_TOTAL_GE WHERE TAXREFv40.NOM_COMPLET Like " & GE & " & '*' ;" Est-ce que, au moins, la syntaxe ci-dessus est bonne ? EDIT : j'ai vu l'ajout du petit "&" entre le champ et l'astérisque quoté. je ne sais pas si c'est bon signe, mais avec cette syntaxe là Access plante...
|
|
|
00
|
|
|
#4 | ||
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 206 ![]() |
Re,
Il faut mettre le & dans l'expression chaîne, du style : Code :
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
||
|
00
|
|
|
#5 |
|
Invité de passage
![]() Chargé de missions Inscription : novembre 2011 Messages : 18 ![]() |
Rien à faire, ça freeze toujours !
Le plus surprenant c'est que j'aboutis au même résultat (freez) lorsque je tente de passer par une requête dans Access directement... je recolle la ligne, par acquis de conscience : Code :
SQL2 = "SELECT TAXREFv40.NOM_COMPLET, " & GE & " INTO PLANTAE_LRR_UNMATCHED_TOTAL_SPLIT_VERIF_1 FROM TAXREFv40, PLANTAE_LRR_UNMATCHED_TOTAL_GE WHERE TAXREFv40.NOM_COMPLET Like " & GE & " & '*' ;" |
|
|
00
|
|
|
#6 |
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 206 ![]() |
Salut,
et si tu tapes, dans l'éditeur SQL ce code : Code sql :
SELECT TAXREFv40.NOM_COMPLET, [PLANTAE_LRR_UNMATCHED_TOTAL_GE].[GenreEspece] FROM TAXREFv40, PLANTAE_LRR_UNMATCHED_TOTAL_GE WHERE TAXREFv40.NOM_COMPLET LIKE [PLANTAE_LRR_UNMATCHED_TOTAL_GE].[GenreEspece] & '*' ; Tu as quoi à l'exécution... A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
|
00
|
|
|
#7 |
|
Invité de passage
![]() Chargé de missions Inscription : novembre 2011 Messages : 18 ![]() |
Toujours le même freez malheureusement...
Ce que je ne m'explique pas ! |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Chargé de missions Inscription : novembre 2011 Messages : 18 ![]() |
La table taxref est costaude : 140 000 lignes de 20 champs majoritairement à string, assez longs...
Peut-être une autre solution est-elle envisageable ? J'explique ce que je cherche à faire ; j'ai : - Ma table TAXREF qui contient une nomenclature et une codification dont j'ai besoin ; - une table contenant des noms "voisins" de certains champs de la table TAXREF. Je veux : - trouver la correspondance (un code numérique en fait) entre les noms "pas catholiques" de ma seconde table, et donc établir une jointure OU récupérer le code d'identification, qui fera office de jointure. J'ai fait : - split (artisanal) de mon champ "noms pas catholiques", qui me donne (chacun dans un champ) : motA ; motB ; mot C etc. NB : il existe dans ma table TAXREF au moins un enregistrement qui contient l'enchaînement des "mots". Il me reste à faire : - Trouver quel est l'enregistrement de TAXREF qui contient le plus de mots de chaque ligne... Un beau merd*ier, hein ? ![]() Surtout considérant que j'en suis à la première comparaison : mot A & mot B... dont l'enchaînement existe en X (nombreux) exemplaires dans la table parcourue... bref (difficile à croire après un tel roman), c'est mal engagé si je ne peux déjà pas rechercher l'enchaînement des 2 premiers mots !! ![]() Une alternative vous apparaît-elle possible ? |
|
|
00
|
|
|
#9 |
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 206 ![]() |
Re,
Pas évident comme cela, Tu peux joindre ta base avec juste l'essentiel, avec un minimum de données et la convertir au format 2000. Je verrai certainement les choses plus clair comme cela... A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
|
00
|
|
|
#10 |
|
Invité de passage
![]() Chargé de missions Inscription : novembre 2011 Messages : 18 ![]() |
Merci encore de prêter tant de cas à...mon triste cas, justement !
je t'ai envoyé la db, récupérable ici : http://dl.free.fr/u3lWHHgI2 tu y retrouveras : - la table TAXREFv40 (mon référentiel dans lequel chercher mes entrées), - PLANTAE_LRR_UNMATCHED : les noms de ma liste à comparer qui n'ont pas trouvé de correspondant "direct" dans TAXREF; - PLANTAE_LRR_171 : exemple du résultat auquel je souhaite parvenir (un nom = 1 code); en l'occurrence 171 noms qui ont trouvé une correspondance directe dans TAXREF (sur NOM_VALIDE, OU sur NOM_COMPLET, OU sur LB_NOM); - PLANTAE_LRR_UNMATCHED_TOTAL_GE : mes "sans correspondance directe", que j'ai pris soin de décortiquer en "mot A", motB, motC, etc... Qui inclue par ailleurs un champ GenreEspece qui correspond à "motA motB" : chaque entrée de la table TAXREF fonctionnant nécessairement sur cette base (genre espèce, nomenclature binomiale selon Karl Von Linné pour la petite histoire ! ).D'un certain côté j'espère que le qry fonctionne chez toi ; mais d'un autre pas du tout : parce que comment savoir ce qui cloche chez moi, dans cette éventualité ?!? |
|
|
00
|
|
|
#11 |
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 206 ![]() |
ok, je regarderai ca dans la soirée...
A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
|
00
|
|
|
#12 |
|
Invité de passage
![]() Chargé de missions Inscription : novembre 2011 Messages : 18 ![]() |
C'est déjà bien aimable à toi de t'y pencher, alors ne va pas non plus te mettre la pression sur un quelconque délais !!
|
|
|
00
|
|
|
#13 | ||
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 206 ![]() |
Bonjour,
Il y a plusieurs problèmes: 1) le volume de donnée dans la table "TAXREFv40" qui rend le temps d'exécution des requêtes à base de jointure hyper long. 2)Plusieurs CD_REF pour un même "Nom Complet". 3)On doit pouvoir contourner le problème du plantage (ou de l'extrême lenteur) uniquement dans le cas : premiers mots du champ Taxon identiques à premiers mots du champ "Nom Complet" de la table "TAXREFv40". Une idée à explorer: Ajouter un champ "CD_REF" à la table "PLANTAE_LRR_UNMATCHED" Trier la table "PLANTAE_LRR_UNMATCHED" par ordre croissant du champ "Taxon". Trier la table "TAXREFv40" par ordre croissant du champ "Nom Complet". Pour chaque expression du champ "Taxon" la splitter dans un tableau Puis Parcourir pour une chaine de 2,3 ou 4 mots , si elle se retrouve en début du champ "Nom Complet" et ceci jusqu'à ce que le "Nom Complet" soit supérieur ou égal à la chaine de mots. Si la chaine est contenu dans le nom complet alors mettre à jour le "CD_REF" de la table "PLANTAE_LRR_UNMATCHED". Outils pour mettre en place cet algo en VBA: les recordset. Un exemple de code sur le même principe: Code :
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
||
|
00
|
|
|
#14 |
|
Invité de passage
![]() Chargé de missions Inscription : novembre 2011 Messages : 18 ![]() |
un peu tardif, mais encore merci de votre aide !
En fait, je m'en suis sorti en toilettant les chaînes à comparer de la même façon. Ce qui fait qu'au terme de la démarche il ne me restait plus qu'à comparer si chaîne A = chaîne B. Merci. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com