[Résolu] Récupérer une valeur null d'une requête
Stagiaire WDF
Inscrit:
08/01/2009 15:34
Post(s): 10
Bonjour, décidément je vais me faire remarquer à toujours crier au loup ! Mais bon j'ai vraiment cherché partout, sur pleins de forums et je n'y arrive vraiment pas!

En fait je dois pouvoir dire sue

Si MaRequête EST VIDE alors
je fais une autre requête
Fin

Mais je ne sais vraiment pas comment faire pour dire dans windev que la requête est null. Je ne peux pas utiliser le 0 non plus car je l'utilise déjà. Je vous montre ce code :

PROCEDURE RequêteCoef(AR_Ref)

reqCoef est une chaîne

//Première requête affichant les prix de vente de la table F_ARTCLIENT
HExécuteRequêteSQL(reqCoef,hRequêteSansCorrection, "SELECT AC_PrixVen FROM F_ARTCLIENT")
//Si ce dernier est égal a 0 alors
SI reqCoef=0 ALORS
//Une deuxième requête effectue le calcul entre le coef de la table F_ARTCLIENT et le prix d'achat de la table F_ARTICLE
HExécuteRequêteSQL(reqCoef,hRequêteSansCorrection, "SELECT AC_Coef * AR_PrixAch FROM F_ARTICLE, F_ARTCLIENT WHERE F_ARTICLE.AR_Ref=F_ARTCLIENT.AR_Ref")
SINON
//Sinon, si la première requête toujours, renvoie cette fois ci un résultat VIDE alors
SI HExécuteRequêteSQL(reqCoef,hRequêteSansCorrection, "SELECT AC_PrixVen FROM F_ARTCLIENT WHERE AC_PrixVen ") = null ALORS
//Une troisième requête affiche le prix de vente de la table F_ARTICLE
HExécuteRequêteSQL(reqCoef,hRequêteSansCorrection, "SELECT AR_PrixVen FROM F_ARTICLE")
FIN
FIN
RENVOYER reqCoef

Contribution le : 13/01/2009 11:22

Edité par drcharly93 sur 15/1/2009 17:02:07
_________________
Onizuka Eikichi, 22 ans, célibataire et libre comme l'air !
Pour vous servir, GREAT
Créer un fichier PDF de la contribution Imprimer


Re: Récupérer une valeur null d'une requête
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour,

Pour savoir si une requête ne renvoie aucune ligne il vous faut modifier votre code de la facon suivante:
De plus il semblerait que vous chercher le tarif d'un article, donc vous pouvez limiter vos recherche sur cet article seulement ce qui accéllera fortement votre traitement
PROCEDURE RequêteCoef(in_AR_Ref, inOut_reqCof est une source de donnees, out_NbEnr est un entier)

//Première requête affichant les prix de vente de la table F_ARTCLIENT pour l'article AR_REF
HExécuteRequêteSQL(inOut_reqCoef,hRequêteSansCorrection, "SELECT AC_PrixVen, AR_Ref FROM F_ARTCLIENT WHERE AR_Ref ='" + in_AR_Ref + "'")
//On vérifie que la requête contient des enregistrements
HLitPremier( inOut_reqCoef )  //Charge la requête
SI HNbEnr( inOut_reqCoef ) > 0 Alors
 //Une deuxième requête effectue le calcul entre le coef de la table F_ARTCLIENT et le prix d'achat de la table F_ARTICLE
 HExécuteRequêteSQL(inOut_reqCoef,hRequêteSansCorrection, "SELECT AC_Coef * AR_PrixAch FROM F_ARTICLE, F_ARTCLIENT WHERE F_ARTICLE.AR_Ref='" + inOut_reqCoef.AR_Ref + "'")
SINON
 //Sinon, si la première requête toujours, renvoie cette fois ci un résultat VIDE alors
 HExécuteRequêteSQL(inOut_reqCoef,hRequêteSansCorrection, "SELECT AC_PrixVen FROM F_ARTCLIENT WHERE AC_PrixVen ") //Requête dont le WHERE n'a pas d'égalité (ERREUR)
 HLitPremier( inOut_reqCoef )
 SI HNbEnr( in_Out_reqCoef ) > 0 Alors
  //Une troisième requête affiche le prix de vente de la table F_ARTICLE
  HExécuteRequêteSQL(inOut_reqCoef,hRequêteSansCorrection, "SELECT AR_PrixVen FROM F_ARTICLE WHERE AR_REF='" + in_AR_REF + "'")
 FIN
FIN
HLitPremier( inOut_reqCoef )
out_NbEnr = HNbEnr( inOut_reqCoef )
RENVOYER Vrai


J'ai changé les paramètres de la procédure ou il vous faudra passer en paramètre :
- 1 : la référence de l'article dont vous cherchez le prix
- 2 : une variable de source de données qui une fois sortie de la procédure contiendra l'enregistrement trouvé si il y a
- 3 : une variable de type entier qui renverra 0 si pas d'enregistrement trouvé ou 1 si l'enregistrement à été trouvé.

ATTENTION, une requête est erronée, non complète clause WHERE sans égalité

en espérant que cela vous permette d'avancer

Contribution le : 13/01/2009 15:21
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Récupérer une valeur null d'une requête
Stagiaire WDF
Inscrit:
08/01/2009 15:34
Post(s): 10
Re bonjour drcharly93, j'ai corrigé le code et crée les différents paramètres comme vous me l'avez conseillé, mais voilà, lors du clic dans ma liste article, une erreur subvient. Windev me met l'erreur suivante :

Erreur à la ligne 20 du traitement Procédure locale RequêteCoef.
Vous avez appelé la fonction HLitPremier.
Fichier <InOut_reqCof> inconnu dans l'analyse <C:\Mes Projets\E_COMMERCE_SAGE\STAGE_E_COMMERCE\STAGE_E_COMMERCE.wdd>, ou requête ou vue non initialisée.

Informations techniques

Projet : STAGE_E_COMMERCE

Dump de l'erreur du module <WD110HF.DLL> <11.00Hah>.

- Appel WL :
Traitement de <FEN_ARTICLE.PROCEDURE.RequêteCoef>, ligne <20>, thread <0>
Fonction <HLitPremier>, n° de syntaxe <3>

- Niveau : erreur fatale (EL_FATAL)

- Code erreur : 70018

- Code erreur WD55 : 18

- Pas de code d'erreur système

- Pas de message d'erreur système

- Que s'est-il passé ?
Fichier <InOut_reqCof> inconnu dans l'analyse <C:\Mes Projets\E_COMMERCE_SAGE\STAGE_E_COMMERCE\STAGE_E_COMMERCE.wdd>, ou requête ou vue non initialisée.

- Infos de debug :
iehf=1001
Fonction (7,10)

- Infos attachées :
EIT_PATHWDD : <C:\Mes Projets\E_COMMERCE_SAGE\STAGE_E_COMMERCE\STAGE_E_COMMERCE.wdd>
EIT_LOGICALTABLENAME : <InOut_reqCof>
EIT_DATEHEURE : 13/01/2009 17:33:12
EIT_PILEWL :
Procédure locale RequêteCoef (FEN_ARTICLE.PROCEDURE.RequêteCoef), ligne 20
Sélection d'une ligne de COMBO_LISTE_SOMMEIL (FEN_ARTICLE.COMBO_LISTE_SOMMEIL), ligne 64

- Identifiant dans le .err : 70116


Assistance

- Vérifiez que le fichier est bien décrit dans l'analyse en cours
- S'il s'agit d'un fichier décrit en dynamique, vérifiez que ce
fichier a bien été déclaré avant par HDéclare, HDéclareExterne
ou HDécritFichier
- S'il s'agit d'une requête du projet ou d'une requête SQL, vérifiez
que cette requête a été déclarée avant par HExécuteRequête pour une
requête du projet ou par HExécuteRequêteSQL pour une requête SQL.

Je ne comprend pas pourquoi il tient a tout prix que InOut_reqCof - qui d'après ce que j'ai compris est le résultat de ma requête - soit dans l'analyse ! J'ai pourtant a peu près là même syntaxe pour un autre cas et il ne me met rien de tel ! Je commence a avoir le cerveau en miettes...

Contribution le : 13/01/2009 17:39
_________________
Onizuka Eikichi, 22 ans, célibataire et libre comme l'air !
Pour vous servir, GREAT
Créer un fichier PDF de la contribution Imprimer


Re: Récupérer une valeur null d'une requête
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour Onizuka,

A l'aide du déboguer suivez l'exécution du programme dans la procédure
Ajouter une variable de contre rendu sur les fonction HExécuteRequête pour vous assurer qu'elles fonctionnent correctement.
nRet est un entier

nRet = HEXecureRequeteSQL(...)

Si la requête s'est exécutée nRet vaut 1 ou Vrai
L'erreur stipulé fait paraître que la requête n'a pas été initialisée donc pas été exécutée.

Même si la requête ne renvoie pas de données l'orsqu'elle arrive a s'exécuter se trouve tout de même initialisée.

Contribution le : 14/01/2009 09:51
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Récupérer une valeur null d'une requête
Stagiaire WDF
Inscrit:
08/01/2009 15:34
Post(s): 10
Re bonjour, voilà j'ai réussi et ton code ma vraiment bien éclairé :

PROCEDURE RequêteCoef(in_AR_Ref, sdInOut_reqCof est une Source de Données, out_NbEnr est un entier, cnxCnx est une Connexion)

//Première requête affichant les prix de vente de la table F_ARTCLIENT pour l'article AR_REF
HExécuteRequêteSQL(sdInOut_reqCof,cnxCnx,hRequêteSansCorrection, "SELECT AC_PrixVen FROM F_ARTCLIENT")
//Charge la requête
HLitPremier(sdInOut_reqCof)
//Compte le le nombre d'enregistrements
SI HNbEnr(sdInOut_reqCof) < 0 ALORS
HExécuteRequêteSQL(sdInOut_reqCof,cnxCnx,hRequêteSansCorrection, "SELECT  AC_Coef * AR_PrixAch AS Prix_Vente FROM F_ARTICLE, F_ARTCLIENT WHERE F_ARTICLE.AR_Ref=F_ARTCLIENT.AR_Ref AND F_ARTCLIENT.AR_Ref ='" + in_AR_Ref + "'") SINON
HExécuteRequêteSQL(sdInOut_reqCof,cnxCnx,hRequêteSansCorrection, "SELECT  AC_Coef * AR_PrixAch AS AR_PrixVen FROM F_ARTICLE, F_ARTCLIENT WHERE F_ARTICLE.AR_Ref=F_ARTCLIENT.AR_Ref AND F_ARTCLIENT.AR_Ref ='" + in_AR_Ref + "'")
//Charge la requête 			HLitPremier(sdInOut_reqCof)
//Compte le le nombre d'enregistrements
SI HNbEnr(sdInOut_reqCof) = 0 ALORS
//Une deuxième requête effectue le calcul entre le coef de la table F_ARTCLIENT et le prix d'achat de la table F_ARTICLE
HExécuteRequêteSQL(sdInOut_reqCof,cnxCnx,hRequêteSansCorrection, "SELECT AR_PrixVen FROM F_ARTICLE")
FIN
FIN

HLitPremier( sdInOut_reqCof )
RENVOYER sdInOut_reqCof.AR_PrixVen



Encore merci pour l'aide ! Je sens que programmer sous Windev m'intéresse de plus en plus

Contribution le : 14/01/2009 16:31
_________________
Onizuka Eikichi, 22 ans, célibataire et libre comme l'air !
Pour vous servir, GREAT
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