Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/10/2011, 14h44   #1
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut Relation entre deux requêtes pour rechercher une valeur de champs commune

Bonjour,

je bloque un peu et mon résultat n'est pas ce que j'attends car il y a une petite suptilité ou astuce: je retrouve pas les valeurs comme une rechercheV.


J'ai deux requêtes différentes avec 1 er requête champs CBE et une autre requête avec un champs OVE, mais toutes les 2 ont un point commun le résultat mais dans le désordre, je voudrais faire comme une recherche v simplement mais cela marche pas quand les valeurs des champs sont dans le désordre. pourquoi pas une sorte de contient...

mon cas :

champs
CBE : contient les données suivante B522 etc... incrémentation sur 600 lignes.
OVE : contient les mêmes données suivante mais dans le désordre 522 B 3 avec un chiffre en plus et des espaces.

je voudrais trouver l 'astuce qui me permettre de dire dans la liaison entre c deux champs si OVE contient exemple les 4 1 er caractères de CBE alors recopie le champ identiques comme une recherche v

merci pour votre aide
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2011, 14h58   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 623
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 623
Points : 30 954
Points : 30 954
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Il faut que dans une des requêtes que tu crées un champ où grâce à des fonctions de gestions de chaines tu remets cela dans l'ordre comme dans la deuxième requête, et ensuite tu fais la liaison sur ce champ.

Pour les fonctions, il s'agit de concaténation avec Left, Right et Mid pour extraire les données.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2011, 15h08   #3
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 756
Points : 1 756
Bonjour,
Cela pourrait se traduire par
Code :
1
2
 
UPDATE Table1, Table2 SET Table1.ove = [cbe] WHERE (((InStr(1,[cbe],Mid$([ove],2,3)))>0) AND ((InStr(1,[cbe],Mid$([ove],1,1)))>0));
les parties de chaines à chercher sont définies par les Mid$
obe est copié dans ove si les conditions sont vérifiées
helas est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/10/2011, 23h49   #4
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Tout d'abord Merci Helas pour votre vision, je trouve que c pas trop mal,

cependant voici le sql que j'ai adapté suite à votre aide mais je bloque toujours :

table 1 = Base
table 2 = INDC

Code :
1
2
3
SELECT INDC.ove, InStr(1,[cbe],Mid$([ove],2,3)) AS Expr1, InStr(1,[cbe],Mid$([ove],1,1)) AS Expr2
FROM INDC INNER JOIN Base ON INDC.OVE = Base.CBE
WHERE (((InStr(1,[cbe],Mid$([ove],2,3)))>0) AND ((InStr(1,[cbe],Mid$([ove],1,1)))>0));
j'ai liée les 2 requêtes, mais n'arrive pas à recopier les mêmes données suivante dans OVE si présente dans CBE même si dans le désordre.
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 22h39   #5
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Bonjour,


Code :
UPDATE Table1, Table2 SET Table1.ove = [cbe] WHERE (((InStr(1,[cbe],Mid$([ove],2,3)))>0) AND ((InStr(1,[cbe],Mid$([ove],1,1)))>0));
est-il possible de le faire sans update ? car j 'arrive pas à faire tourner la requête..
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 18h18   #6
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 756
Points : 1 756
et avec ?
Code :
1
2
 
UPDATE INDC, Base SET INDC.ove = [cbe] WHERE (((InStr(1,[cbe],Mid$([ove],2,3)))>0) AND ((InStr(1,[cbe],Mid$([ove],1,1)))>0));
helas est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/10/2011, 22h52   #7
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Bonjour toujours impossible

J'ai testé mais n 'arrive pas le faire fonctionner, je suis arrivé à faire la requête mais aucune recopie n'est faite

voici mon fichier pour exemple, comment le faire marcher ?

Code :
UPDATE INDC, Base SET INDC.ove = [cbe] WHERE (((InStr(1,[cbe],Mid$([ove],2,3)))>0) AND ((InStr(1,[cbe],Mid$([ove],1,1)))>0));
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2011, 16h04   #8
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 756
Points : 1 756
Bonsoir,
cette requête fonctionne
Code :
1
2
 
UPDATE Base, INDC SET Base.CBE = [INDC]![ove] WHERE (((InStr(1,[ove],Left$([cbe],1)))>0) AND ((InStr(1,[ove],Mid$([cbe],2,3)))>0));
elle remplace le contenu du champ CBE par la valeur du champ OVE si les critères sont vérifiés.
helas est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/10/2011, 23h43   #9
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Merci Helas pour votre aide ! mais cependant je viens de m'aperçevoir d un truc je dispose en + d une nlle table :

Dans cette nlle table "alte" uniquement J'ai besoin de mettre dans l'ordre les résultats de mon champs nommé "INDT" de cette manière ci-dessous

Exemple : ma nouvelle table "alte" contient un champ "INDT"

Dans mon champs "INDT" :

221 A 5
651 B 5
211 6 5
299 4 5
789 8 5

comment faire pour : mettre dans l'ordre suivant la lettre en 1er et garder les 3 premier chiffre uniquement. Comme ce-ci Resultat A221 ensuite B651 etc.... pour tous mon champ "INDT" et la même chose pour ts les résultats .


j'ai pensé à faire gauche 3 droite 1 et concaténer mais cela fait du bricolage pas très pratique y -a-t-il une solution requête màj ? pour faire cela automatiquement je bloque un peu car gauche et droite me sort un resultat pas top

Merci pour votre éclairage
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2011, 11h22   #10
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Bonjour Debutant10, Helas et Philippe,

Je me permets de m'immiscer...

Debutant10, ce que tu demandes :
Code :
1
2
3
221 A 5 ==> A221
651 B 5 ==> B651
...
ne présente aucune difficulté : tout est dans les réponses de Hélas.

Il faudrait que tu potasses les fonctions de traitement de chaînes de caractères (voir l'assistant, c'est très clair) : Gauche, Droite, DansChaîne, etc...

La solution qui consiste à te donner des requêtes SQL toutes faites, à chaque fois, sans que tu les étudies, ne me semble pas être très efficace pour que ton pseudo évolue...
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/10/2011, 21h07   #11
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Bonjour

Voici un petit Récapitulatif :

Suite à l'aide d'Helas mais la résolution du pb n'est pas OK :

1-/ la requête dessous d'Hélas me recopie uniquement la valeur 122 B3 3 fois de suite dans la table base champs --> OVE or donc pas bon
ce que j 'essai de mettre en forme c remettre dans l'orde le résultat simplement comme ci-dessous
le but :
Code :
1
2
3
4
 
122 B 3 ==> B122
652 B 5 ==> B652
...
Requête non fonctionnelle :

Code :
UPDATE Base, INDC SET Base.CBE = [INDC]![ove] WHERE (((InStr(1,[ove],Left$([cbe],1)))>0) AND ((InStr(1,[ove],Mid$([cbe],2,3)))>0));
mon idée extraire la lettre à chaque fois puis concaténer un peu (pas très top mais bon...)

Code :
1
2
3
SELECT INDC.OVE, Right([OVE],4) AS Expr1
FROM INDC
GROUP BY INDC.OVE;
J'essai d'extraire seulement la lettre puis faire concaténer je cherche actuellement...
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 23h10   #12
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Crées, d'abord, une requête qui transforme
Code :
1
2
3
122 B 3 ==> B122
652 B 5 ==> B652
...
dans un champ calculé.
Es-tu, dans un premier temps, parvenu à ce résultat ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2011, 00h25   #13
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Code :
1
2
Crées, d'abord, une requête qui transforme dans un champ calculé.
Es-tu, dans un premier temps, parvenu à ce résultat ?
Je c pas transformer justement j'ai essayé de mettre cela dans un champs calculé mais pas terrible j 'ai testé gauche droite j 'arrive pas à le mettre comme ci-dessous...

trouver une requête qui puisse remettre ts cela dans ma table

Code :
1
2
3
4
 
122 B 3 ==> B122
652 B 5 ==> B652
...
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2011, 11h00   #14
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Bonjour Debutant10,

Je t'invite à étudier les fonctions, via l'assistant (click droit dans "champ", "Créer", "fonctions intégrées") :
  • Gauche(champ ; longueur) ;
  • Droite(champ ; longueur) ;
  • ExtracChaîne(champ ; position début ; longueur).
Code :
1
2
122 B 3 ==> B122
652 B 5 ==> B652
==> nous constatons que :
  • "B" est à la 5ème position sur 1 caractère ;
  • "122" et "652" sont les 3 premiers caractères de gauche.
Tu possèdes toutes les données : à toi de jouer !...
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/11/2011, 14h25   #15
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Merci pour votre aide

J'ai trouvé la solution :

Code :
1
2
3
SELECT INDC.OVE, Mid([OVE],5,1) AS lettre, Left([OVE],3) AS nbr, Mid([OVE],5,1) & "" & Left([OVE],3) AS Total
FROM INDC
GROUP BY INDC.OVE, Left([OVE],3), Mid([OVE],5,1) & "" & Left([OVE],3);
une expression pour extraire la lettre
une expression pour les 3 premier chiffres puis j 'ai concaténé
je vais mettre cela en forme
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h21.


 
 
 
 
Partenaires

Hébergement Web