Re: requete impossible avec l'éditeur Windev ?

Posté par drcharly93 le 10/9/2004 11:59:12
Bonjour cualex,

Si vous utilisé une base de données autre que Hyper File suivez les conseilles de Veronica.

Ce type de Sql même si la syntaxe change en WinDev n'est pas impossible, en théorie
Je dis en Théorie car c'est du ressort des alias.
Comme WinDev gère les Alias cela devrait être possible, Encore faut-il créer l?Halias

Tu veux récupérer à partir du fichier Match les adversaires avec les nom des utilisateurs.
Mais tu veux récupérer les de adversaire1 et aussi de adversaire2 ce qui sous entend que tu veux faire deux recherches par ligne.

Je vais donc te conseiller une méthode manuelle.
Citation :

match avec differents champs dont
num --> clef primaire
nom_match
adversaire1 (int) --> utilisateur 1
adversaire2 (int) --> utilisateur 2
date_match

utilisateur avec différents champs dont
num --> clef primaire
nom --> nom utilisateur

Requête à traduire :
Citation :

select m.date_match,m.nom_match,u1.nom,u2.nom from match as m,utilisateur as u1,utilisateur as u2 where m.adversaire1=u1.num and m.adversaire2=u2.num order by m.date_match desc

Nous allons commencer par créer un alias sur la table Utilisateur
Pour le moment une méthode un peu rude
U2 est une Source de Données
Rsl est une Source de Données
Sql est une Chaine

Si pas HALias(Utilisateur,U2) = Vrai Alors    //Création de l?alias
  Erreur(HErreurInfo())
  Retour
Fin
//On copie le fichier pour créer l?alias
SI PAS fCopieFichier(<Fichier source>,<Répertoire Destination>+ "\U2.FIC") Alors
  Erreur(ErreurInfo())
  Retour
Fin
Sql = 
[
SELECT match.date_match as DateDuMatch, match.nom_match As NomDuMatch, 
            Utilisateur.nom as Adversaire1, U2.nom as Adversaire2
            FROM match, utilisateur, U2
            WHERE match.adversaire1=utilisateur.num
	  AND macth.Adversaire2=U2.num
	  ORDER BY match.date_match desc  
]
Si pas HexecuteRequeteSql(Rsl,HrequeteDefaut,Sql) Alors
  Erreur(HErreurInfo())
  Retour
Fin

Code saisi à la volée, des erreurs peuvent exister.
Ce code peut être optimisé en remplacent l?Alias par le résultat d?une requête ou peut-être même du vue sur le fichier Utilisateur exemple :
Si pas HexecuteRequêteSql(U2,HRequêteDefaut, "SELECT * FROM utilisateur") Alors
  Erreur(HErreurInfo())
  Retour
Fin

Ceci reste dans son ensemble théorique et à tester.
Nous tenir au courant.


Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=12&topic_id=1279&post_id=5231