PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → lecture de requete programmée
lecture de requete programmée
Iniciado por whischmaster, 09,nov. 2004 12:14 - 7 respuestas
Publicado el 09,noviembre 2004 - 12:14
bonjour,
dans un module de récupération de donnée, je dois apres récupération remplir d'autres fichiers par requetage en faisant des cumuls.

voici un exemple de requete(simplifiée)
select couple_centre_art, sum(Qte_CDE), No_Article, Centrale
from ligne_gms
group by couple_centre_art;

j'ai essayer diverses méthodes de programmation sans succes :
hexecuterequetesql(req, sql) //req source de données et sql chaine contenant la requete
ici je ne peux pas lire dans req (pas reconnu dans l'analyse meme erreur si j'utilise externe)

j'ai essayer de créer ma requete avec l'assistant et de l'appeler dans le code avec :
hexecuterequete(requete1)
hlitpremier(requete1)
tantque pas hendehors
fichier1.centrale=requete1.centrale
...
fichier1.qte_cde=requete1.expr1
hajoute(fichier1)

toutes ces methodes me donnent des erreurs
J'aimerais une methode pour arriver a mes fins ;)
merci d'avance
Wis
Publicado el 09,noviembre 2004 - 12:47
Logiquement la syntaxe suivante marche:

il faut créer ta requête avec le créateur de requête intégré et lui donner un nom....

Ensuite voici le code:

HExecuteRequete(MaRequete,HRequeteDefaut)
HLitPremier(MaRequete,MaCleDeParcours)
TantQue PAS HEnDehors(MaRequete)
// Je fais mon traitement en utilisant le nom de la requete comme une table....
MaRequete.MonChamp1
...
...
HLitSuivant(MaRequete,MaCleDeParcours)
FIN

Bon dev, et tiens moi au courant.
Publicado el 09,noviembre 2004 - 13:22
je fais le meme traitement

HExécuteRequête(Requête1,hRequêteDéfaut)
HLitPremier(Requête1)
TANTQUE PAS HEnDehors(Requête1)
Lignecentre_gms.Facturation_de=Requête1.Facturation_de
Lignecentre_gms.Année=Requête1.Année
Lignecentre_gms.CENTRALE_GMS=Requête1.CENTRALE_GMS
Lignecentre_gms.Qte_CDE=Requête1.Expr1
...
Lignecentre_gms.frais_transport=Requête1.Expr9
Lignecentre_gms.autres_frais=Requête1.Expr10
Lignecentre_gms.ca_net=Requête1.Expr11
Lignecentre_gms.no_article=Requête1.No_Article
HAjoute(Lignecentre_gms)
HLitSuivant (requete1)
FIN

toutes les expr sont des sum(xxx)
je n'ai pas de clé de parcours (optionnelle)
a la fin de ce traitement mon fichier lignecentre_gms est vide et c'est la que je ne comprend pas
merci
Publicado el 09,noviembre 2004 - 15:06
Fais un test sur l'ajout de tes enregistrements...

Si pas HAjoute(MonFichier) Alors
Erreur("Erreur sur l'ajout:" + RC + RC + ErreurInfo(errcomplet))
FIN

Là tu devrais savoir si déjà ton enregistrement est fait oui ou non
Publicado el 09,noviembre 2004 - 15:34
alors j'ai une erreur systeme qui si elle se produit a chaque fois je dois consulter le support technique ...
Publicado el 09,noviembre 2004 - 15:48
ben surement car comme ton code esté crit, cela devrait marcher logiquement....

Regarde je te fais passer quelque chose qui marche pour remplir une table mémoire: il y a du code qui conerne l'info sur l'avancement de la requete pour le client mais ton moteur de remplissage est le même normalement....

//************* On supprime les données de la table ****************************
TableSupprimeTout(Table_WDJOBS)
//********On exécute la requête **********
HExécuteRequête(Req_Select_Table_WdJobs,hRequêteDéfaut)
//***************On lit le premier enregistrement de la requête *****************
//HLitRecherchePremier(Req_Select_Table_WdJobs,jbcode,"*")
HLitPremier(Req_Select_Table_WdJobs,JBCODE)
//** On paramètre le nombre d'enregistrements pour l'avancement de la jauge ****
NbEnr = HNbEnr(Req_Select_Table_WdJobs)
//***********On fait une boucle parcourant le fichier pour afficher les lignes *********
TANTQUE PAS HEnDehors(Req_Select_Table_WdJobs)
//****************** On ajoute la ligne ***************************
TableAjouteLigne(Table_WDJOBS,Req_Select_Table_WdJobs.JBCODE,Req_Select_Table_WdJobs.JREFERENCE,Req_Select_Table_WdJobs.USID, + ...
Req_Select_Table_WdJobs.JCODEFACTURE,Req_Select_Table_WdJobs.CLCode,Req_Select_Table_WdJobs.CLFacNom, + ...
Req_Select_Table_WdJobs.JDTDossier,Req_Select_Table_WdJobs.JTOTALHTNET,Req_Select_Table_WdJobs.JBAVOIR, + ...
Req_Select_Table_WdJobs.AVCODE,Req_Select_Table_WdJobs.JDTCDE,Req_Select_Table_WdJobs.JBDATERELANCE)
//***************O n passe à l'enregistrement suivant ****************
HLitSuivant(Req_Select_Table_WdJobs,JBCODE,hDistinct)
//************* On affecte les variables à la jauge ********************
CptEnr++
Jauge(CptEnr,NbEnr,"Il reste " + NumériqueVersChaine((NbEnr - CptEnr) * 100 / NbEnr,"3dS") + " % à effectuer...",iRougeClair)
FIN
//***************On efface la jauge *****************
Jauge()
//******************* On renseigne le nombre de lignes trouvée ****************
LblNbEnr..Libellé = "Nb Enr: " + TableOccurrence(Table_WDJOBS,toTotal)
//********************* On trie la table ***********************
TableTrie(Table_WDJOBS,"JREFERENCE")
//************* On sélectionne par défaut la ligne N°1 ***************
SI TableOccurrence(Table_WDJOBS,toTotal) > 0 ALORS
TableSelectPlus(Table_WDJOBS,1)
ExécuteTraitement(Table_WDJOBS,trtSélection)
SINON
//********* Message d'erreur si aucunes lignes trouvées ****************
SI TableOccurrence(Table_WDJOBS,toTotal) = 0 ALORS
Erreur("Aucun enregistrements corespondant aux critères, n'a été trouvé !!!!")
FIN
FIN
//******************* On modifie le nombre de lignes de la table **************
ALaFin:
LblArchives..Libellé = LeTexteAffiche
IndiceLigneEnCours = 0
Publicado el 09,noviembre 2004 - 16:03
j'utilise une table fichier sinon le code est le meme en effet

l'erreur se produit sur la fontion Hexecuterequete()
j'utilise la version Windev 8 telle qu'elle est apres installation depuis le CD (aucun patch)
je ne comprend pas pourquoi cette fonction me fait une erreur

merci
Wis
Publicado el 09,noviembre 2004 - 16:12
a priori le probleme venait de ma requete...
on ne peut pas utiliser de clé composé décrit dans l'analyse pour le requetage???

bref j'ai reussi a obtenir un petit truc qui a l'air de marcher

demain je fais toutes mes requetes avec l'editeur et je fait un test "grande echelle"
merci de ton aide
je te tiens au courant

++
wis