PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Select sur Source de données
Select sur Source de données
Débuté par jp.bloch, 21 mai 2008 13:04 - 9 réponses
Posté le 21 mai 2008 - 13:04
Bonjour,

Pouvez-vous me dire s'il est possible de réaliser une requête sur une Source de données ?
Mes essais sont pour le moment infructueux.

// gsdMaRequête est une Source de données globale définie par ailleurs et comportant bien des enregistrements.
// hNbEnr(gsdMaRequête) = 106

sMonCodeSql = [
SELECT DISTINCT NOM_CONTACT, ADRESSE_1, ADRESSE_2, CODE_POSTAL, COMMUNE
FROM gsdMaRequête
]
SI PAS HExécuteRequêteSQL(sdMaRequêteSql, hRequêteDéfaut, sMonCodeSql) ALORS
Erreur("Erreur d’initialisation de la requête", HErreurInfo())
FIN

Erreur d’initialisation de la requête
Erreur dans le code SQL de la requête <sdMaRequêteSql>. Initialisation de la requête impossible.
Fichier gsdMaRequête inconnu

Merci de vos suggestions.
Jean-Pierre
Posté le 21 mai 2008 - 14:25
En rajoutant "sdMaRequêteSql est une source de données" en amont de la ligne d'appel de la requetteSQL, cela devrait marcher.

Cordialement
Posté le 21 mai 2008 - 14:54
Effectivement, l'exemple est incomplet puisqu'il manque les 2 lignes de définition :

sdMaRequêteSql est une Source de Données
sMonCodeSql est une chaîne

Mais cela ne change rien au résultat.

Merci de ton aide.
Jean-Pierre
Posté le 21 mai 2008 - 15:31
Jean-Pierre Bloch a écrit :
Effectivement, l'exemple est incomplet puisqu'il manque les 2 lignes de définition :

sdMaRequêteSql est une Source de Données
sMonCodeSql est une chaîne

Mais cela ne change rien au résultat.

Merci de ton aide.
Jean-Pierre


une source de données et une variable qui contient un pointeur vers une
REQUETE, pas vers une table.

Le bon code est donc:

sdMaSource est une source de données

sMonCodeSQL est une chaine = "SELECT DISTINCT NOM_CONTACT, ADRESSE_1,
ADRESSE_2, CODE_POSTAL, COMMUNE FROM CLIENTS"

SI PAS HExécuteRequêteSQL(sdMaRequêteSql, hRequêteDéfaut, sMonCodeSql) ALORS
Erreur("Erreur d’initialisation de la requête", HErreurInfo())
FIN

ensuite tu peux accéder à sdMaSource comme si c'était un fichier, avec
des h*****

PS: j'ai imaginé que ta table s'appelait CLIENTS, il va de soit que tu
dois mettre le bon nom de table dans la requête.
Posté le 21 mai 2008 - 16:18
Tu devrais passer par une vue. avec hcreevue

Cordialement
Posté le 21 mai 2008 - 16:47
Merci de cette réponse détaillée.

Malheureusement, tu as simplifié le problème et le résultat n'est plus en phase avec mon besoin :
Il s'agit bien de faire une requête sur une source de données créée dans une autre partie de l'application, que l'on ne souhaite pas enregistrer sous forme de fichier mais imméditament réexploiter dans une requête.

Cela est possible avec plusieurs requêtes créées sous l'éditeur ou avec du code SQL, mais il semble y avoir une incompatibilité avec une source de données.

Bien à toi.
Jean-Pierre
Posté le 21 mai 2008 - 17:13
Bravo et merci.

Effectivement, mon problème tout particulier (supprimer les doublons dans une source de données) peut être résolu par une vue (je croyais que c'était une fonctionnalité en voie de disparition et je ne l'avais jamais utilisé).

Néanmois subsiste le besoin de pouvoir exploiter une source de données via une requête SQL plutôt que par de la programmation plus complexe.

Et comme je vais toujours au bout des choses, je transmets au ST ce qui me semble être un dysfonctionnement (ou une amélioration ?)

Bon dev.
Jean-Pierre
Posté le 21 mai 2008 - 18:08
Jean-Pierre Bloch a écrit :
Bravo et merci.

Effectivement, mon problème tout particulier (supprimer les doublons dans une source de données) peut être résolu par une vue (je croyais que c'était une fonctionnalité en voie de disparition et je ne l'avais jamais utilisé).

Néanmois subsiste le besoin de pouvoir exploiter une source de données via une requête SQL plutôt que par de la programmation plus complexe.

Et comme je vais toujours au bout des choses, je transmets au ST ce qui me semble être un dysfonctionnement (ou une amélioration ?)

Bon dev.
Jean-Pierre

Dans un projet je fais des requêtes sur des requêtes en n'utilisant que
des sources de données (comme dans ton exemple) et cela fonctionne bien.

Je présume qu'il y a un problème de porté des variables source de
données dans ton cas.

Pour tester, essaie de mettre tes deux requetes dans un meme et seul
traitement pour voir ce que cela donne.

eric l.
Posté le 21 mai 2008 - 18:17
Ca me parrait plus complexe de faire une requete sur un source de donnée que de faire cela sur une vue. :)

mais chacun voit comme il veut :)

mais as tu essayer cette option : hDistinct dans hlitsuivant ?

hDistinct
Si des doublons sont présents, ce paramètre permet de lire un seul enregistrement parmi les doublons. Ce paramètre est pris en compte uniquement si le parcours est réalisé sur une rubrique clé.
Posté le 21 mai 2008 - 19:14
La solution m'est parvenue de Erick Bavut (Fiduciaire Informatique à St Etienne) :

sMonCodeSql = ChaîneConstruit([
SELECT DISTINCT NOM_CONTACT, ..., LIB_PAYS
FROM %1
],sd1..Nom)

Bravo à lui et merci à tous !
Jean-Pierre