Meilleure solution pour faire une recherche multi criteres
Anonyme
bonjour
j'ai une fenetre avec un 10aine de champs (saisie, combo)
quelle est la meilleur solution pour effectuer une recherche multicritere sur la base ?

j'ai par exemple :
Nom, date d'achat : Du ..... au ...., couleur, région......

merci

Contribution le : 11/04/2006 08:11
Créer un fichier PDF de la contribution Imprimer


Re: Meilleure solution pour faire une recherche multi criteres
Animateur WDF
Inscrit:
19/01/2004 13:48
De www.sigmasys.fr
Post(s): 988
Bonjour,

Vous pouvez passer par une requête SQL par exemple en saisissant le code de la requête dans une chaîne, puis l'exécuter.

Bon dév.,

Totof

Contribution le : 11/04/2006 08:37
_________________
[ Totof(Christophe LOGEL) réalise des développements spécifiques WinDev (Mon annonce wdforge), http://www.sigmasys.fr]
Créer un fichier PDF de la contribution Imprimer


Re: Meilleure solution pour faire une recherche multi criteres
Anonyme
merci de m'avoir répondu
je connais pas trop les requetes.
pouvez vous m'éclairer sur votre manipulation

bonne journée

Contribution le : 11/04/2006 12:34
Créer un fichier PDF de la contribution Imprimer


Re: Meilleure solution pour faire une recherche multi criteres
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Bonjour

Prenons par exemple une recherche sur le nom prénom dans une fiche élève...

Cela donnera :

sSQL est une chaine = "SELECT * FROM ELEVE WHERE "
// on complete alors la condition selon le remplissage des critères
SI (SAISNOMDEBUT<>"" ET SAISNOMFIN<>"") ALORS
   sSQL += " NOM BETWEEN '" + SAISNOMDEBUT + "' AND '" + SAISNOMFIN +"'"
SINON
   SI SAISNOMFIN="" ALORS 
      // QUE debut, on prends les noms contanent la chaine (voirs la clause LIKE et les %)
      sSQL += " NOM LIKE  '%" + SAISNOMDEBUT + "%'"
   FIN
FIN

on peut compléter avec le choix sur le prénom

Exécution de la requete :

sSQL est une Source de Données
SI PAS hExécuteRequêteSQL(sSQL,hRequeteDefaut,cSQL) alors
   Erreur(hErreurInfo())
SINON
   // Envois le résultat dans une table mémoire
   hLitPremier(sSQL)
   TANTQUE pas hEnDehors(sSQL)
      info(sSQL.NOM,sSQL.PRENOM)
      hLitSuivant(sSQL)
FIN
// libère la source de données
hAnnuleDéclaration(sSQL)



Voila... A vous de constituer progressivement la syntaxe de votre requête en fonction de vos critères de sélection.

un petit plus : pour ajouter les AND entre les conditions du where.
Si cSQL<>"" alors sSQL+= " AND "
cSQL+= "...condition..."

Contribution le : 11/04/2006 12:51
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Meilleure solution pour faire une recherche multi criteres
DSI WDF
Inscrit:
12/09/2004 11:07
De aude
Post(s): 279
Bonjour,
petite info supplementaire, vous avez la possibilité d'utiliser une fenetre de recherche multi-critères dans la création des fenêtres prédéfinies.
Elle permet de choisrs les résultats en fonction de critères tel que :
- "Egal à"
- "Commence par"
- "Est Null"
- ...
et suivre l'assistant.
Espérant avoir aidé, bon dev!

Contribution le : 11/04/2006 13:08
_________________
...
Créer un fichier PDF de la contribution Imprimer


Re: Meilleure solution pour faire une recherche multi criteres
Stagiaire WDF
Inscrit:
04/11/2003 13:31
De Belgique
Post(s): 42
Bonjour,

Exemple de code qui fonctionne correctement

Les critères sont repris dans des champs de saisies qui renvois NULL si vide < RNom, RAdresse .... >


LOCAL
SrcReq est une source de données
sCodeSQL est une chaîne

HAnnuleDéclaration(SrcReq)

// [< Code de la requête >]
sCodeSQL = [
SELECT [IDContact], [Nom], [Adresse], [CodePostal], [Ville], [NomContact], [Activité]
FROM Contact
WHERE [Nom] LIKE '%1%'
AND [Adresse] LIKE '%%%2%%'
AND [CodePostal] LIKE '%3%%'
AND [Ville] LIKE '%%%4%%'
AND [Activité] LIKE '%%%5%%'
AND [NomContact] LIKE '%%%6%%'
ORDER BY [Nom] ASC
]

// [< Construire requêtes >]
sCodeSQL = ChaîneConstruit(sCodeSQL, RNom, RAdresse, RCpostal, RVille, RActivité, RContact)

SI PAS HExécuteRequêteSQL(SrcReq, sCodeSQL) ALORS
Ouvre(MsgBox, " Requête", ">>> Erreur d’initialisation de la requête"+RC+HErreurInfo(), 2)
RETOUR
FIN

NbEnreg = HNbEnr(SrcReq)

SI NbEnreg > 0 ALORS

TableRecherche..FichierParcouru = "SrcReq"
TableAffiche(TableRecherche, taDébut)
EcranPremier(TableRecherche)

SINON

Ouvre(MsgBox, " Recherche", ">>> Aucun enregistrement pour cette sélection ...", 1, 1, 280, 225)
HAnnuleDéclaration(SrcReq)
ExécuteTraitement(BTAnnulCritere,trtClic)

FIN

Cordialement

Albert

Contribution le : 11/04/2006 14:13
Créer un fichier PDF de la contribution Imprimer


Re: Meilleure solution pour faire une recherche multi criteres
Anonyme
bonjour,

ca m'a beaucoup aidé...
J'avais oublié, mes champs de saisie, ils concernent 4 fichiers !!!!!
j'ai rajouter ca apres le FROM.

je bloque au niveau de l'affichage dans ma table.
de quel type doit etre la table ? Mémoire ?

car rien ne s'affiche dans ma table

bonne journée

Contribution le : 12/04/2006 13:15
Créer un fichier PDF de la contribution Imprimer


Re: Meilleure solution pour faire une recherche multi criteres
DSI WDF
Inscrit:
12/09/2004 11:07
De aude
Post(s): 279
Bonjour
Faite un tour sur le post :
Table
bon dev!

Contribution le : 12/04/2006 13:25
_________________
...
Créer un fichier PDF de la contribution Imprimer


Re: Meilleure solution pour faire une recherche multi criteres
Anonyme
je ne sais pas sur quelle base et sur quelle volume ca va tourner, mais eviter des pb de perf avec autant de like je prefererais une syntaxe du genre :

requeteSQL = " SELECT champs FROM MesTables where 1 = 1 "

et concaténer la suite uniquement avec les criteres renseignés.

Rien ne sert de faire un like "%" sur les prenoms si l'utilisateur n'a pas renseigner de prenom (donc dans le cas ou il faut tous les prendre)

Mais, ca ne concerne que des volumes significatifs.

Contribution le : 12/04/2006 17:23
Créer un fichier PDF de la contribution Imprimer


Re: Meilleure solution pour faire une recherche multi criteres
Anonyme
bonsoir,

voila ou j'en suis.
vvin est un Variant
vpays est un Variant
vregion est un Variant
vappellation est un Variant


vvin=Vin..ValeurAffichée
vpays=Pays
vregion = Région
vappellation = Appellation..ValeurAffichée

Req_recherche.param_nom=Vin..ValeurAffichée
Req_recherche.param_pays=Pays
Req_recherche.Param_région = Région
Req_recherche.Param_appellation=Appellation..ValeurAffichée

HExécuteRequête(Req_recherche,hModifieFichier)

 //On Vide la table par sécurité
TableSupprimeTout(TableRecherche)

//On rempli la table
//TableRecherche..FichierParcouru = "req_recherche"
ConstruitTableFichier(TableRecherche,Req_recherche,taAvecIdAuto+taRemplirTable)
TableAffiche(TableRecherche)


et voici le code SQL de ma requete REQ_recherche
SELECT Vin.Nom AS Nom,
Vin.Pays2 AS Pays,
Vin.région2 AS Région,
Vin.appellation2 AS Appellation
 FROM Vin
 WHERE Vin.Nom = {param_nom}
 AND Vin.Pays2 = {param_pays}
 AND Vin.région2 = {Param_région}
 AND Vin.appellation2 = {Param_appellation}


lors de l'execution sous l'éditeur de requete, je passe 1 ou plusieurs parametres et ca fonctionne
dans ma fenetre, la table se cree bien avec les bonnes colonnes mais ne se remplie pas.

quelqu'un a une idée ?
merci d'avance

Contribution le : 12/04/2006 23:14
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2