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 04/09/2011, 09h24   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 3
Points : 1
Points : 1
Par défaut Requète multicritères avec sélection de champs spécifiques

Bonjour à tous,

Il s'agit de mon premier post sur le forum, donc tout d'abord un grand merci à toute l'équipe car c'est une vraie mine d'informations.

je réalise actuellement une base de traçabilité. Pour l'instant, j'ai réussi à me dépatouiller pour sortir un outil fonctionnel mais je suis actuellement confronté à un problème... Je m'explique...

Je suis bloqué sur une mise à jour d'un module de recherche multicritères avec la fonction "Like" permettant de rechercher par modèle de produit (ou numéro de série), compte client, ville et pays... Ce module fonctionne à la perfection mais je suis bloqué via les comptes clients car ma table clients est une extraction "passerelle" avec un logiciel ERP utilisé par ma société et certains clients finaux n'existent pas dans ce logiciel.

Dans ma table produit, j'ai le numéro de compte affecté par produit (S/N) et dans le cas où ce client n'existe pas dans l'ERP, j'ai donné la possibilité de renseigner un client final dans un module en remplaçant le compte client à 6 digits par le mot "SPECIAL" et renseigne directement le NOM + VILLE + PAYS sur l'enregistrement dudit produit. De plus, j'ai créé une seconde table CLIENTS_LIVR avec une duplication du compte client si l'adresse du client de l'ERP n'est pas la bonne adresse de livraison.

Pour conclure, lors de ma recherche d'affectation sur un produit, j'ai trois possibilités:
- Adresse émanant de la table CLIENTS_LIVR
- Adresse spéciale directement sur l'enregistrement du produit dans la table PRODUITS
- Adresse de la table CLIENTS extraite de l'ERP.

Dans un premier temps pour une recherche, je veux que la requête multicritère sélectionne le clients spécial si le compte client est "SPECIAL".
Si le compte n'est pas "SPECIAL", alors je veux vérifier si ce compte existe dans la table CLIENTS_LIVR... Et s'il n'existe pas, je veux sélectionner l'adresse par défaut de l'ERP...

Du coup, j'ai créé une requête "REQ1" avec les multicritère Like (modèle ou S/N, COMPTE, NOM, VILLE et PAYS) qui me génère une liste de produits selon la recherche avec, sur chaque enregistrement, les champs ci-dessous:
- Compte = compte client affecté au produit de la table PRODUITS
- toutes les infos du produit de la table PRODUITS
- nom_erp, ville_erp et pays_erp de la table CLIENTS "passerelle"
- nom_spe, ville_spe et pays_spe "SPECIAL" de la table PRODUITS
- nom_livr, ville_livr et pays_livr de la table CLIENTS_LIVR

Pour sélectionner les bonnes infos, j'ai créé une deuxième requête "REQ2" appelant la première et utilisé la fonction Iif. Par exemple, pour le nom du client, j'ai créé une expression "NOM_FINAL" non rattachée à une table ou requête et indiqué le critère ci-dessous:
Iif(REQ2.Compte = "SPECIAL";REQ2.nom_spe;Iif(REQ2.nom_livr="";REQ2.nom_erp;REQ2.nom_livr))

Quand je lance la deuxième requète, ça bloque "La synthaxe de l'expression NOM_FINAL " " n'est pas correcte" ou un truc du genre...

Avez-vous une idée? Est-ce que ma logique est bonne pour résoudre ce problème? Je ne suis pas contre utiliser du VB pour régler ce problème mais je ne vois vraiment pas comment m'y prendre...


Merci d'avance, koubiac.
koubiac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 13h01   #2
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 Koubiac,

Un peu touffu...

Sur un plan "1er niveau" :
Code sql :
Iif(REQ2.Compte = "SPECIAL" ; REQ2.nom_spe ; Iif(REQ2.nom_livr="" ; REQ2.nom_erp;REQ2.nom_livr))
==> n'est pas correct : avec le IIf(), il faut utiliser "," et non ";". Les ";" s'utilisent avec les VraiFaux(), donc dans l'assistant. Cela suppose que tu as écrit la requête en mode SQL et non via l'assistant. Donc,
Code sql :
Iif(REQ2.Compte = "SPECIAL" , REQ2.nom_spe , Iif(REQ2.nom_livr="" , REQ2.nom_erp , REQ2.nom_livr))
==> devrait passer. Ceci, sans analyser la pertinence de la requête.


Sur un plan "2ème niveau" :
Il me semble que tu montes une usine à gaz pour palier à un manque d'information dans l'ERP, application "métier" que je suppose fondamentale dans ta boîte.

A mon sens, il faudrait utiliser Access pour extraire les anomalies, et non pas pour développer un "ERP bis"... qui t'emmènera dans des chemins forcément périlleux.

Par exemple, il me semble très grave que tous les clients réels n'existent pas dans l'ERP. Donc, pas de compte comptable, pas de facture, pas de commande... ce n'est qu'un exemple.

Si l'application Access devient un "ERP bis", alors je suppose que les services comptable, logistique et autre administration des ventes vont exprimer d'autres "besoins bis" déjà pourvus dans l'ERP.

En final, tu vas "glisser" doucement vers une double application contenant des doublons de données...

A plus ou moins long terme, il faudra prévoir des intégrations de données de l'application Access vers l'ERP, car les utilisateurs en auront assez de synchroniser les deux bases manuellement.


Mais ce n'est que mon humble avis...
__________________
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 05/09/2011, 11h38   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 3
Points : 1
Points : 1
Bonjour Richard et merci pour ta réponse...

Je bug toujours sur cette fameuse requète avec une erreur 3125 " " n'est pas un nom valide.

Je ne comprends pas car le nom de l'expression est NOMF, donc simple.

Ci-dessous la requète en SQL modifiée:
Code :
1
2
3
 
SELECT SEARCH_CLIENTS.APPAREIL, SEARCH_CLIENTS.EXPEDITION, IIf([SEARCH_CLIENTS]![CLIENT_LIVR]="EXPORT",[SEARCH_CLIENTS]![NOM_EXPORT],IIf([SEARCH_CLIENTS]![CLIENT_DT.Nom<>Null,[SEARCH_CLIENTS]![CLIENT_DT.Nom],[SEARCH_CLIENTS]![CLIENTS]![Nom])) AS NOMF
FROM SEARCH_CLIENTS;
SEARCH_CLIENT étant la première requète (cf. explications plus haut).


En ce qui concerne tes interrogations justifiées pour le second plan, je ne cherche pas à recréer un ERP. Effectivement, le progiciel actuel répond parfaitement aux demandes des utilisateurs (compta, commercial, etc). Seul bémol, aucuns modules adaptés à la traçabilité produits.

En ce qui concerne les comptes clients non renseignés, cela concerne surtout l'export car nous travaillons avec des distributeurs ou ensemblier et non avec les clients finaux où sont affectés les produits.

Merci d'avance, koubiac.
koubiac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 11h54   #4
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
Code sql :
[.../... SEARCH_CLIENTS]![CLIENT_DT.Nom<>Null .../...
==> il manque un "]" et <>Null n'est pas valable. Donc :
Code sql :
[.../... SEARCH_CLIENTS]![CLIENT_DT.Nom] Is Not Null .../...
==> je te suggère de passer par l'assistant (ce que j'ai fait) pour résoudre ce genre de problème (erreur de saisie) : il corrige automatiquement et tu peux récupérer le code.
__________________
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 05/09/2011, 11h58   #5
Invité de passage
 
Inscription : janvier 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 3
Points : 1
Points : 1
Merci Richard, ça fonctionne à la perfection.

Une erreur bien bête qui m'a fait perdre 4h de boulot.

Encore merci.
koubiac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 12h02   #6
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
Citation:
Envoyé par Koubiac
Une erreur bien bête qui m'a fait perdre 4h de boulot.
==> via l'assistant (QBE), tu aurais perdu 4mn : il est, en partie, fait pour cela !
__________________
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
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h42.


 
 
 
 
Partenaires

Hébergement Web