PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Requêtes SQL imbriquées
Requêtes SQL imbriquées
Started by guen, Mar., 30 2006 8:59 PM - 4 replies
Posted on March, 30 2006 - 8:59 PM
Bonjour

Dans le cadre de la construction d'un filtre dynamique multi-critère, je construis au fur et à mesure une chaîne SQL de filtre et souhaite ensuite l'appliquer à une requête déjà pré-enregistrée (qui comprend les différentes jointures...) mais cela ne semble pas marcher alors que cette même méthode de construction fonctionne sur une requête select directement sur un fichier...Est-ce que l'on peut faire des requêtes imbriquées sous WD10 (ce qui est possible sous ACCESS...)
mon exemple (peut être plus parlant...) :

SQL_complet= "SELECT * FROM REQ_SelectionFiltre WHERE " + SQL_filtre

Req_filtre_str est une Source de Données
HExécuteRequêteSQL(Req_filtre_str,hRequêteDéfaut,SQL_complet)
FichierVersTableMémoire(TABLE_choix,Req_filtre_str)

où REQ_SelectionFiltre est ma requête enregistrée grâce à l'éditeur de requête et SQL-filtre le filtre construit de façon dynamiqe

merci de votre aide (comme vous le voyez peut être...je suis débutant en WD !)
Posted on April, 03 2006 - 9:38 AM
Bonjour,

Préalablement au code cité, avez-vous exécuté la première requête avec un :
HExecuteRequete(REQ_SelectionFiltre,hRequeteDéfaut)

car il ne suffit pas qu'elle soit décrite sous l'éditeur de requête, il faut
aussi qu'elle soit exécutée...

Bon courage.


"guen" <glemerrer@cdf-raa.coop> a écrit dans le message de
news:442d5826$1@news.pcsoft.fr...

Bonjour

Dans le cadre de la construction d'un filtre dynamique multi-critère, je

construis au fur et à mesure une chaîne SQL de filtre et souhaite ensuite
l'appliquer à une requête déjà pré-enregistrée (qui comprend les différentes
jointures...) mais cela ne semble pas marcher alors que cette même méthode
de construction fonctionne sur une requête select directement sur un
fichier...Est-ce que l'on peut faire des requêtes imbriquées sous WD10 (ce
qui est possible sous ACCESS...)
mon exemple (peut être plus parlant...) :

SQL_complet= "SELECT * FROM REQ_SelectionFiltre WHERE " + SQL_filtre

Req_filtre_str est une Source de Données
HExécuteRequêteSQL(Req_filtre_str,hRequêteDéfaut,SQL_complet)
FichierVersTableMémoire(TABLE_choix,Req_filtre_str)

où REQ_SelectionFiltre est ma requête enregistrée grâce à l'éditeur de

requête et SQL-filtre le filtre construit de façon dynamiqe

merci de votre aide (comme vous le voyez peut être...je suis débutant en

WD !)

Posted on April, 03 2006 - 6:10 PM
Bonjour,

Voici un code pour une recherche multi-critères qui fonctionne correctement :

SrcReq est une Source de Données
sCodeSQL est une chaine

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

// [< Construire requêtes >]
SELON SEL_Enregistrement
CAS 1 : sEnrg = "1"
CAS 2 : sEnrg = "2"
FIN

sCodeSQL = ChaîneConstruit(sCodeSQL, sEnrg, SAI_RNom, SAI_RAdresse, SAI_RCpostal, SAI_RVille, SAI_RActivité, SAI_RContact)

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

TABLE_Cherche..FichierParcouru = ""
SAI_NbEnreg = HNbEnr(SrcReq)

SI SAI_NbEnreg > 0 ALORS

TABLE_Cherche..FichierParcouru = "SrcReq"
TableAffiche(TABLE_Cherche)
EcranPremier(MoiMême)

SINON

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

FIN

Les critères de recherche étant saisis dans des champs de saisie qui retourne NULL si vide

En espérant avoir pu vous aider

Cordialement

Albert
Posted on April, 04 2006 - 7:56 AM
Merci pour cet exemple de code de recherche multicritère...je vais essayer mais la difficulté repose aussi sur la possibilité de transmettre des critères de tri multiples à travers des listes de valeurs à choix multiple.
J'ai pour finir réussi à faire quelques chose mais je trouve que c'est lourd....(plus qu'avec de l'ACCESS !)
Je vais essayer avec votre méthode.
Merci
Posted on April, 04 2006 - 1:34 PM
Bonjour,

Vous avez également la possibilité de rechercher dans une liste

// [< Code requête >]
sCodeSQL = [
SELECT [Montant]
FROM Situation
WHERE [Exercice] = '%1'
AND [IDCompte] IN ('X01','X02','X03','X04','X05','X06','X07','X08','X09','X10','X11','X12','X13','X14','X15','X16','X17','X18','X19','X20' )
]

// [< Construire requête >]
sCodeSQL = ChaîneConstruit(sCodeSQL, sExerc)

Cordialement

Albert