PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Erreur "Aucun parcours n'a été amorcé pour la rubrique <ID_OBJ> sur le fichier <TBL_OBJET>"
Erreur "Aucun parcours n'a été amorcé pour la rubrique <ID_OBJ> sur le fichier <TBL_OBJET>"
Débuté par Guillaume, 05 déc. 2017 17:38 - 34 réponses
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 05 décembre 2017 - 17:38
Bonjour,

Je suis déséspéré... 48h que je tourne en rond avec des erreurs incompréhensibles... cherché dans les forums, tenté des contournements...

Je suis en WD22. Base HFSQL C/S (avant en classique TOUT CA FONCTIONNAIT !)
Je développe cette appli en interne depuis 5 ans, d'abord en VBA puis depuis WD20 je l'ai réécrite sous Windev.

Maintenant quand j'exécute quelques unes de ces mêmes requêtes, je récolte des erreurs, et celle là ne me parle vraiment pas.
Voici un exemple de requête problématique. Pourtant la requête REQ_Factu5_RecapParResp fonctionne très bien... Mais dès que je mets une jointure... j'ai cet horrible "Aucun parcours n'a été amorcé pour la rubrique <ID_ELEVE> sur le fichier <TBL_ELEVES>"

SELECT
REQ_Factu5_RecapParResp.ID_RESP,
REQ_Factu5_RecapParResp.NOM_RESP + ' ' + REQ_Factu5_RecapParResp.PRENOM_RESP AS Responsable,
REQ_Factu5_RecapParResp.ADRESSE_RESP AS Adresse,
REQ_Factu5_RecapParResp.CP_RESP + ' ' + REQ_Factu5_RecapParResp.COMM_RESP AS Commune,
REQ_Factu5_RecapParResp.HORSCCK AS HORSCCK,
REQ_Factu5_RecapParResp.TotalEleves AS NbEleves,
REQ_Factu5_RecapParResp.AbattementTx,
REQ_Factu5_RecapParResp.TotalTrim AS MontantTrim,
20+((REQ_Factu5_RecapParResp.TotalEleves-1)*10) AS FraisAnnuels,
(REQ_Factu5_RecapParResp.TotalTrim) + (20+((REQ_Factu5_RecapParResp.TotalEleves-1)*10)) AS TotalFA,
TBL_ELEVES.PRENOM AS PRENOM
FROM REQ_Factu5_RecapParResp,TBL_ELEVES
WHERE REQ_Factu5_RecapParResp.ID_RESP = TBL_ELEVES.ID_RESP
ORDER BY REQ_Factu5_RecapParResp.NOM_RESP + ' ' + REQ_Factu5_RecapParResp.PRENOM_RESP


Merci !
Membre enregistré
326 messages
Popularité : +15 (19 votes)
Posté le 05 décembre 2017 - 17:49
Bonjour.
Déjà je mettrais order by Reponsable
Sinon le reste de la requête paraît correct !

Question : pour débugger as-tu exécuter directement le code en SQL via Windev ?

Michel.

PS : comme quoi, il y une différence d’interprétation SQL en HF/CS et HF classic !
Bon courage pour tester toutes les requêtes !
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 05 décembre 2017 - 18:06
Bonjour Michel :)

J'ai aussi l'impression qu'il y a une différence classic VS CS mais aucune doc ne le spécifie :/
Alors le ORDER en effet c'est un vestige du dev sous WD20 en classic, car de mémoire la requête ne fonctionnait pas avec l'alias.

Quant au debug :
Alors le 1er problème, c'est que les requêtes complexes comme celle-ci, quand je les teste avec GO, la fenêtre apparait puis se referme, sans erreur. Donc pour voir le contenu, je suis obligé de monter une fenêtre avec une table et de lier cette table à la requête pour voir quelque chose.
Sinon je debug en pas à pas (pour visualiser le bon déroulement des requêtes qui s'enchainent) ou je mets des tests du genre SI PAS ... ErreurInfo().

Parfois j'ai d'autres erreurs incompréhensibles comme fichier introuvable (mais je crois que vous avez déjà répondu sur mon post précédent...)

Parfois Windev c'est top, mais des fois c'est vraiment laborieux. J'en suis à me demander si je ne vais pas rétrograder en classique :((
Posté le 06 décembre 2017 - 09:08
Bjr,

mlion avait écrit le 05/12/2017 :
PS : comme quoi, il y une différence d’interprétation SQL en HF/CS et HF
classic ! Bon courage pour tester toutes les requêtes !


je ne pense pas que les problemes de requetes viennent du passage en
C/S
il n'y a que l'acces qui est changé.
Si des données etaient inaccessible, ok, mais la ?

je pense plutot a un fchier corrompu. que donne le WOptimiseur ?

a plus

--
-------------------------------------------------------------
www.ctc-soft.com
Gestion biblo-documentaire (free-share)
Comptabilité shareware
Logiciels de Gestion de saisie terrain
Spécialisé Tournées de boulangers
-------------------------------------------------------------
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 06 décembre 2017 - 10:10
Bonjour Dc,

Merci pour la piste :)

mais... je me trompe ou WDOptimiseur n'est que pour HFSQL Classic ?

J'ai regardé le fichier REP ("vérif impossible car en C/S") Mais tous les fichiers sont stockés à .\ (je suppose que ça correspond à la racine de la base spécifiée par la connexion (srv:4900\Bases\NOM_DE_LA_BASE)

En CS j'ai tenté les opérations de maintenance de base depuis le centre de contrôle, je n'ai rien trouvé.

Je me suis lancé ce matin dans une réécriture des requêtes, je vais voir où ça me mène...

++
Membre enregistré
1 923 messages
Popularité : +53 (65 votes)
Posté le 06 décembre 2017 - 10:45
Bonjour,

1. Il n'y a aucune raison "logique" pour laquelle une requête fonctionnerait en Local et pas en C/S, sauf si le moteur C/S est plus stricte et refuserait une requête sur une requête : à voir avec le ST mais cela n'a jamais posé de problème.
2. WDOptimiseur ne marche que sur du HFSQL mais dans les 2 modes.
3. Vous ne donnez pas le code et c'est dommage...
4. Je vous suggère de soumettre votre problème au ST avant de réécrire vos requêtes ;(.

--
Bon dev,
Jean-Pierre
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 06 décembre 2017 - 10:57
Bonjour,
Guillaume a écrit :

mais... je me trompe ou WDOptimiseur n'est que pour HFSQL Classic ?


Non, non, tu ne te trompes pas.

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 06 décembre 2017 - 11:24
(re)Bonjour

Pour répondre à Jean-Pierre :
1. Oui c'est bien ce que je me dis
2. Euh, vous êtes contradictoires les amis (cf votre post et celui de voroltinquo). Après oui il y a les outils d'optimisation du CCHFSQL.
3. Je ne donne que le nécessaire... Mais voici un complément puisque je réécris :
--> Cette requête basique, quand je fais un GO, me prompte avec la fenêtre de correction de requête et me demande le nom de la connexion... où est-ce que les ordres sont spécifiques à un type de serveur ???
SELECT ID_RESP,SUM(MTT_ELTARIF) AS SOMME MTT_ELTARIF
FROM TBL_ELTARIF
WHERE ((MTT_ELTARIF<=90) AND (ID_TARIF=14))
GROUP BY ID_RESP



EDIT : PAREIL (Prompt ordres spécifiques) sur
SELECT * FROM TBL_ELTARIF


J'ai tenté toutes les optimisations sur la table TBL_ELTARIF (RàS)


Pour info, les 4 requetes précédentes fonctionnent
//REQ_ Factu1_SommesEleves
SELECT TBL_ELTARIF.ID_ELEVE, TBL_ELTARIF.ID_RESP, COUNT(TBL_ELTARIF.ID_ELEVE) AS CompteDeID_ELEVE, SUM(TBL_ELTARIF.MTT_ELTARIF) AS SommeDeMTT_ELTARIF, TBL_ELTARIF.AN_ELTARIF, TBL_ELTARIF.HORSCCK
FROM TBL_ELTARIF
GROUP BY TBL_ELTARIF.ID_ELEVE, TBL_ELTARIF.ID_RESP, TBL_ELTARIF.AN_ELTARIF, TBL_ELTARIF.HORSCCK;

//REQ_ Factu2_SommesResponsables

SELECT REQ_Factu1_SommesEleves.ID_RESP AS ID_RESP, COUNT(REQ_Factu1_SommesEleves.ID_ELEVE) AS CompteDeID_ELEVE1, TBL_RESPONSABLES_V2.TITRE_RESP, TBL_RESPONSABLES_V2.NOM_RESP,
TBL_RESPONSABLES_V2.PRENOM_RESP, TBL_RESPONSABLES_V2.ADRESSE_RESP, TBL_RESPONSABLES_V2.CP_RESP, TBL_RESPONSABLES_V2.COMM_RESP,
SUM(REQ_Factu1_SommesEleves.SommeDeMTT_ELTARIF) AS SommeDeSommeDeMTT_ELTARIF, REQ_Factu1_SommesEleves.AN_ELTARIF, REQ_Factu1_SommesEleves.HORSCCK
FROM REQ_Factu1_SommesEleves INNER JOIN TBL_RESPONSABLES_V2 ON REQ_Factu1_SommesEleves.ID_RESP = TBL_RESPONSABLES_V2.ID_RESP
GROUP BY REQ_Factu1_SommesEleves.ID_RESP, TBL_RESPONSABLES_V2.TITRE_RESP, TBL_RESPONSABLES_V2.NOM_RESP, TBL_RESPONSABLES_V2.PRENOM_RESP,
TBL_RESPONSABLES_V2.ADRESSE_RESP, TBL_RESPONSABLES_V2.CP_RESP, TBL_RESPONSABLES_V2.COMM_RESP, REQ_Factu1_SommesEleves.AN_ELTARIF, REQ_Factu1_SommesEleves.HORSCCK;

//REQ_Factu3_CptElevesInstrParResp

SELECT REQ_Factu1_SommesEleves.ID_RESP, COUNT(REQ_Factu1_SommesEleves.ID_ELEVE) AS CompteDeID_ELEVE1
FROM REQ_Factu1_SommesEleves
WHERE (((REQ_Factu1_SommesEleves.SommeDeMTT_ELTARIF)>90))
GROUP BY REQ_Factu1_SommesEleves.ID_RESP

//REQ_Factu4_CptEleveTotalParResp

SELECT REQ_Factu1_SommesEleves.ID_RESP, COUNT(REQ_Factu1_SommesEleves.CompteDeID_ELEVE) AS CompteDeCompteDeID_ELEVE
FROM REQ_Factu1_SommesEleves
GROUP BY REQ_Factu1_SommesEleves.ID_RESP


4. Oui, ça va finir peut-être au ST...
Message modifié, 06 décembre 2017 - 11:28
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 06 décembre 2017 - 11:44
(Rhaa je peux plus éditer, message modéré ???)

Bon, une partie du message précédent est caduc : en exécutant ces requêtes simples EN DECOCAHNT "Exécuter avec hRequeteSansCorrection en mode test", plus de prompt... Erreur de débutant ?

Enfin je continue ma réécriture, à suivre jusqu'à résolution ;)
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 06 décembre 2017 - 12:12
Bon courage

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
1 923 messages
Popularité : +53 (65 votes)
Posté le 06 décembre 2017 - 12:58
Rebonjour,

Si je comprends bien, vous êtes en mode GO.
Et vous voulez exécuter une requête qui contient une jointure avec une autre requête exécutée en mode GO.
Personnellement, bravo à WinDev s'il a gardé en mémoire la première requête et qu'il peut faire le lien entre les 2 !
Donc, OK si vous exécutez les 2 via un code sinon : bonne chance !

--
Bon dev,
Jean-Pierre
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 06 décembre 2017 - 14:29
Rebonjour Jean-Pierre,

Ce qui est sur c'est que ça eut fonctionné, et bien sur au final c'est dans mon code que j'exécute toutes les requêtes préalables en mode exe/prod.
Allez je continue mes pérégrinations. "je l'aurai un jour, je l'aurai" comme dirait l'autre ;)

Bon dev à vous tous, je repasserai vous dire ce qu'il en est quand j'aurai avancé :)

G.
Posté le 07 décembre 2017 - 09:03
Bjr,

Voroltinquo avait soumis l'idée :
Bonjour,
Guillaume a écrit :

mais... je me trompe ou WDOptimiseur n'est que pour HFSQL Classic ?


Non, non, tu ne te trompes pas.


A un moment, il va falloir que vous vous rendiez compte que les
fichiers en C/S ou pas en C/S sont EXACTEMENT les memes...

Alors il (celui qui a les problemes) rpend ses fichiers, il mes met LA
OU IL VEUT et il fait tourner l'Optimizer dessus.
Une fois les index refaits, ca marchera peut etre mieux...

a plus

--
-------------------------------------------------------------
www.ctc-soft.com
Gestion biblo-documentaire (free-share)
Comptabilité shareware
Logiciels de Gestion de saisie terrain
Spécialisé Tournées de boulangers
-------------------------------------------------------------
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 07 décembre 2017 - 21:54
@Voroltinquo : la devise en signature --> c'est exactement ça :D (je vous épargne une requête de 60 lignes pour illustrer, elle rentrera pas dans le post lol)

@DC, Les fichiers sont les mêmes, mais la manière de les gérer et de les attaquer pas tout à fait. S'il faut "sortir" les fichiers du serveur pour les optimiser avec des outils orientés "classic"... De même qu'il est curieux que toutes mes requêtes un peu lourdes avec des WHEN... CASE, des NVL, des CONCAT et des imbriquées à coup de IN (particulièrement tatillon) qui passaient en classic ont décidé de me lâcher en passant sur C/S (où j'ai encore très peu d'expérience...)

Fin bref, moi je suis toujours bloqué avec mon truc, J'ai réécrit les requêtes mais ce n'est pas concluant, donc au final j'ai une fois de plus pris un chemin détourné pour arriver à mes fins : mes enregistrements sont copiés dans un .FIC, que je peux ensuite requêter de manière un peu complexe. Pour un récap édité 3 fois par an, ça ira bien.

Faute de doc, j'ai l'impression sans pouvoir l'assurer qu'au bout d'un certain nombre de sous-requêtes, ça devient compliqué à tester dans l'environnement de test avec l'éditeur de requêtes et qu'il vaut mieux tout coder, comme le laisse paraitre ces requêtes qui se lancent, dont la fenêtre de visualisation s'ouvre et se ferme, sans la moindre trace d'erreur cependant.

++

G.
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 08 décembre 2017 - 08:32
Bonjour,

Il manque tout de même le code d'appel de la requête. Que donne le retour de la fonction HExécuteRequête() ? En général lorsqu'il y a ce genre de message c'est qu'il y a un problème à l'exécution de la requête.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 08 décembre 2017 - 11:54
Bonjour Philippe,

J'ai refais un test dans une fenêtre de test (simple bouton pour exécuter le code suivant) :
SI PAS HExécuteRequête(REQ_RFA_1) ALORS
Erreur(HErreurInfo())
FIN
SI PAS HExécuteRequête(REQ_RFA_2) ALORS
Erreur(HErreurInfo())
FIN
SI PAS HExécuteRequête(REQ_RFA_3) ALORS
Erreur(HErreurInfo())
FIN
SI PAS HExécuteRequête(REQ_RFA_4) ALORS
Erreur(HErreurInfo())
FIN
SI PAS HExécuteRequête(REQ_RFA_41) ALORS
Erreur(HErreurInfo())
FIN
SI PAS HExécuteRequête(REQ_RFA_5) ALORS
Erreur(HErreurInfo())
FIN

sdSource est une Source dede Données
sSql est une chaîne = "SELECT R.ID_RESP, T.ADRESSE_RESP FROM REQ_RFA_5 R, TBL_RESPONSABLES_V2 T WHERE R.ID_RESP = T.ID_RESP"
SI PAS HExécuteRequêteSQL(sdSource,hRequêteDéfaut,sSql) ALORS
Erreur(HErreurInfo())
SINON
HLitPremier(sdSource)
Info(sdSource.ID_RESP + sdSource.NOM_RESP + sdSource.PRENOM_RESP)
FIN


et je récupère cette erreur :





Si je remplace le sSql par un truc tout simple comme "SELECT * FROM REQ_RFA_5", ça passe et il n'y a pas d'erreur.

Côté éditeur de requête :
- si j'éxécute en go la REQ_RFA_5, ça s'affiche
- si je fais une requête test "SELECT * FROM REQ_RFA_5", une fenêtre s'ouvre et se referme aussitôt, pas d'erreur
- si je fais une requête test "SELECT R.ID_RESP, T.ADRESSE_RESP FROM REQ_RFA_5 R, TBL_RESPONSABLES_V2 T WHERE R.ID_RESP = T.ID_RESP", ça s'ouvre et ça se referme aussitôt également, sans erreur.

Pour info le code de toutes ces requêtes (il s'agit d'une procédure de facturation qui permet de calculer des abattements de différentes nature...) :
//RFA 1
SELECT TBL_ELTARIF.ID_ELEVE, TBL_ELTARIF.ID_RESP, COUNT(TBL_ELTARIF.ID_ELEVE) AS COMPTE_ID_ELEVE, SUM(TBL_ELTARIF.MTT_ELTARIF) AS SOMME_MTT_ELTARIF, TBL_ELTARIF.AN_ELTARIF, TBL_ELTARIF.HORSCCK
FROM TBL_ELTARIF GROUP BY TBL_ELTARIF.ID_ELEVE, TBL_ELTARIF.ID_RESP, TBL_ELTARIF.AN_ELTARIF, TBL_ELTARIF.HORSCCK

//RFA2
SELECT REQ_RFA_1.ID_RESP AS ID_RESP, COUNT(REQ_RFA_1.ID_ELEVE) AS COMPTE_ID_ELEVE_RESP, TBL_RESPONSABLES_V2.TITRE_RESP, TBL_RESPONSABLES_V2.NOM_RESP,
TBL_RESPONSABLES_V2.PRENOM_RESP, TBL_RESPONSABLES_V2.ADRESSE_RESP, TBL_RESPONSABLES_V2.CP_RESP, TBL_RESPONSABLES_V2.COMM_RESP,
SUM(REQ_RFA_1.SOMME_MTT_ELTARIF) AS SOMME_MTT_ELTARIF_RESP, REQ_RFA_1.AN_ELTARIF, REQ_RFA_1.HORSCCK
FROM REQ_RFA_1 INNER JOIN TBL_RESPONSABLES_V2 ON REQ_RFA_1.ID_RESP = TBL_RESPONSABLES_V2.ID_RESP
GROUP BY REQ_RFA_1.ID_RESP, TBL_RESPONSABLES_V2.TITRE_RESP, TBL_RESPONSABLES_V2.NOM_RESP, TBL_RESPONSABLES_V2.PRENOM_RESP,
TBL_RESPONSABLES_V2.ADRESSE_RESP, TBL_RESPONSABLES_V2.CP_RESP, TBL_RESPONSABLES_V2.COMM_RESP, REQ_RFA_1.AN_ELTARIF, REQ_RFA_1.HORSCCK;

//RFA3
SELECT REQ_RFA_1.ID_RESP, COUNT(REQ_RFA_1.ID_ELEVE) AS COMPTE_ID_ELEVE_INSTR
FROM REQ_RFA_1
WHERE (((REQ_RFA_1.SOMME_MTT_ELTARIF)>90))
GROUP BY REQ_RFA_1.ID_RESP

//RFA4
SELECT REQ_RFA_1.ID_RESP, COUNT(REQ_RFA_1.COMPTE_ID_ELEVE) AS COMPTE_T_ID_ELEVE_RESP
FROM REQ_RFA_1
GROUP BY REQ_RFA_1.ID_RESP
ORDER BY REQ_RFA_1.ID_RESP

//RFA41
SELECT TBL_ELTARIF.ID_RESP, SUM(TBL_ELTARIF.MTT_ELTARIF) AS SOMME_MTT_ELTARIF_NA
FROM TBL_ELTARIF
WHERE (((TBL_ELTARIF.MTT_ELTARIF)<=90) AND ((TBL_ELTARIF.ID_TARIF)=14))
GROUP BY TBL_ELTARIF.ID_RESP

//RFA5
SELECT REQ_RFA_2.ID_RESP, REQ_RFA_2.NOM_RESP, REQ_RFA_2.PRENOM_RESP, REQ_RFA_2.ADRESSE_RESP,
REQ_RFA_2.CP_RESP, REQ_RFA_2.COMM_RESP, REQ_RFA_2.AN_ELTARIF, REQ_RFA_2.HORSCCK,
REQ_RFA_2.COMPTE_ID_ELEVE_RESP AS TotalEleves,
NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0) AS NbInstru,
REQ_RFA_2.SOMME_MTT_ELTARIF_RESP,
(REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0)) AS test,
CASE WHEN ((NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))>1 AND HORSCCK = 0) THEN 1 ELSE 0 END AS ABATT,
CASE WHEN (CASE WHEN ((NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))>1 AND HORSCCK = 0) THEN 1 ELSE 0 END) = 1
THEN CASE WHEN (NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))<5
THEN 1.1 - (NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))*0.1 ELSE 0.5 END ELSE 1 END AS AbattementTx,
CASE HORSCCK WHEN 0 THEN ((REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0)))*70
ELSE ((REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))) * 90 END AS PartNonAbatt,
SOMME_MTT_ELTARIF_RESP-(CASE HORSCCK WHEN 0 THEN ((REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0)))*70
ELSE ((REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))) * 90 END)-(CASE SOMME_MTT_ELTARIF_NA WHEN NULL THEN 0 ELSE SOMME_MTT_ELTARIF_NA END) AS AbattBase,
CASE WHEN (NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0)) < 5 THEN (SOMME_MTT_ELTARIF_RESP-(CASE HORSCCK WHEN 0 THEN ((REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0)))*70
ELSE ((REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))) * 90 END)-(CASE SOMME_MTT_ELTARIF_NA WHEN NULL THEN 0 ELSE SOMME_MTT_ELTARIF_NA END))*(CASE WHEN (CASE WHEN ((NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))>1 AND HORSCCK = 0) THEN 1 ELSE 0 END) = 1
THEN CASE WHEN (NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))<5
THEN 1.1 - (NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))*0.1 ELSE 0.5 END ELSE 1 END) ELSE (SOMME_MTT_ELTARIF_RESP-(CASE HORSCCK WHEN 0 THEN ((REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0)))*70
ELSE ((REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))) * 90 END)-(CASE SOMME_MTT_ELTARIF_NA WHEN NULL THEN 0 ELSE SOMME_MTT_ELTARIF_NA END)) * 0.5 END AS MttAbattu,
(CASE HORSCCK WHEN 0 THEN ((REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0)))*70
ELSE ((REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))) * 90 END)+(CASE WHEN (NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0)) < 5 THEN (SOMME_MTT_ELTARIF_RESP-(CASE HORSCCK WHEN 0 THEN ((REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0)))*70
ELSE ((REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))) * 90 END)-(CASE SOMME_MTT_ELTARIF_NA WHEN NULL THEN 0 ELSE SOMME_MTT_ELTARIF_NA END))*(CASE WHEN (CASE WHEN ((NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))>1 AND HORSCCK = 0) THEN 1 ELSE 0 END) = 1
THEN CASE WHEN (NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))<5
THEN 1.1 - (NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))*0.1 ELSE 0.5 END ELSE 1 END) ELSE (SOMME_MTT_ELTARIF_RESP-(CASE HORSCCK WHEN 0 THEN ((REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0)))*70
ELSE ((REQ_RFA_2.COMPTE_ID_ELEVE_RESP)-(NVL(REQ_RFA_3.COMPTE_ID_ELEVE_INSTR,0))) * 90 END)-(CASE SOMME_MTT_ELTARIF_NA WHEN NULL THEN 0 ELSE SOMME_MTT_ELTARIF_NA END)) * 0.5 END)+(CASE SOMME_MTT_ELTARIF_NA WHEN NULL THEN 0 ELSE SOMME_MTT_ELTARIF_NA END) AS TotalTrim,
REQ_RFA_41.SOMME_MTT_ELTARIF_NA,
CASE SOMME_MTT_ELTARIF_NA WHEN NULL THEN 0 ELSE SOMME_MTT_ELTARIF_NA END AS ReplaceSum
FROM ((REQ_RFA_2 LEFT JOIN REQ_RFA_4 ON REQ_RFA_2.ID_RESP = REQ_RFA_4.ID_RESP)
LEFT JOIN REQ_RFA_3 ON REQ_RFA_2.ID_RESP = REQ_RFA_3.ID_RESP) LEFT JOIN
REQ_RFA_41 ON REQ_RFA_2.ID_RESP = REQ_RFA_41.ID_RESP;


Voilà, il y a à peu près tout.

G.
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 08 décembre 2017 - 13:50
Bonjour,

Ce que tu cherches a faire n'est ni plus ni moins qu'une vue. Tu devrais regarder de ce côté là tu te simplifierai grandement la tâche.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 08 décembre 2017 - 14:04
Re,

J'ai fait des vues pour un autre problème sur la même appli (cf. ce récent post, début de mes soucis post migration : https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/212350-requete-qui-fonctionne-plus-apres-migration-vers-hfsql-212368/read.awp), et ça roule... Mais faire des vues à partir de requêtes ; j'ai essayé pour le présent problème mais j'ai le même échec... Peut être devrais-je m'intéresser aux requêtes stockées ?
Message modifié, 08 décembre 2017 - 14:06
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 08 décembre 2017 - 16:04
Une vue est un objet représentant le résultat d'une requête. Ca correspond tout à fait à ce que tu recherches. Regarde dans l'aide les vues SQL et les vues matérialisées tu y trouveras ton bonheur

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 08 décembre 2017 - 17:00
Philippe, comme dit au dessus j'ai essayé de refaire cette routine avec des vues (1ère fois avec les vues sql, et mon dernier espoir était avec les vues matérialisées...), je récoltais les mêmes erreurs, celle du titre du post et cette incompréhensible :






...où CCKA_EMK est ma base contenant tous les autres fichiers...

Bref, je sèche et ne sais plus trop quoi faire (à part contourner ou revenir en classic mais c'est pas le but)... Est-ce que je devrais vérifier quelque chose au niveau des GUID des tables ? de la chaîne de connexion au serveur ?

Ah, et question : est- ce que le fait que je ne fasse pas mes liaisons dans l'analyse peut jouer ? J'en doute mais comme je fais toutes mes jointures dans le SQL...
Message modifié, 08 décembre 2017 - 17:06
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 08 décembre 2017 - 18:25
Peux-tu afficher le code de connexion au serveur HFSQL ?

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 09 décembre 2017 - 10:35
Bonjour Philippe,

Chaine de connexion dans le code d'init du projet :
HDécritConnexion("CnxEmkHfs","admin","","SRV-JVS3:4900","CCKA_EMK",hAccèsHFClientServeur)
HChangeConnexion("*","CnxEmkHfs")
HCréationSiInexistant("*")


Sinon dans l'analyse (tous les fichiers sont bien associés)





D’ailleurs c'est un peu ambigu de mon point de vue de nouvel utilisateur de C/S, cette double déclaration (analyse/projet)

Bonne journée :)
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 09 décembre 2017 - 17:58
Bonjour,

En fait la connexion définie dans l'analyse est prise par défaut s'il n'y a pas de connexion décrite par programmation.

Je suppose qu'il y a un HOuvreConnexion qui n'apparait pas ici. En tout état de cause, je pense qu'il y a un soucis avec le seveur HFCS lui même qui ne doit pas accepter la requête.

Je te conseille de prendre contact avec le ST pour leur remonter le problème. Le SQL de HFSQL étant bien plus pauvre que sur d'autre SGBD type SQL Server ou PostgreSQL.

Tiens nous au courant du retour du ST.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 11 décembre 2017 - 10:14
Merci Philippe pour tes éclaircissements :)

En relisant la doc, je me rends compte que la connexion déclarée dans le code d'init du projet ne doit pas avoir le même nom que celle décrite dans l'analyse. Je vais retester...

Sinon ça finira en effet au ST (ce sera ma première requête...)

Bonne journée,

G.
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 11 décembre 2017 - 12:08
Bon le changement de nom de la connexion n'a rien changé.

J'ai envoyé une demande au ST.

++

G.
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 13 décembre 2017 - 10:14
Bonjour,

pas encore de réponse du ST quant à mon problème, mais j'ai de plus en plus l'impression qu'il y a une limitation avec les requêtes de requête (quand celles-ci sont au delà de 2 ou 3 niveaux, le C/S semble moins permissif). Or il n'y a nulle part dans la doc la moindre info qui confirmerait cette hypothèse.

J'attends encore pour faire un retour.

bon dev'
Posté le 13 décembre 2017 - 16:33
Bjr,

Guillaume avait prétendu :
Bonjour,

le C/S semble moins permissif). Or
il n'y a nulle part dans la doc la moindre info qui confirmerait cette
hypothèse.


Et si y a rien, c 'est peut etre que y a rien a y avoir ...
Le C/S ou le HFSQL n'ont de different que les acces qui y sont faits.
Franchement, ca m'etonnerait que Pcsoft ait fait deux moteurs SQL.
As tu testé tes fichiers, au niveau integrité et index ?

a plus


--
-------------------------------------------------------------
www.ctc-soft.com
Gestion biblo-documentaire (free-share)
Comptabilité shareware
Logiciels de Gestion de saisie terrain
Spécialisé Tournées de boulangers
-------------------------------------------------------------
Membre enregistré
135 messages
Popularité : +8 (8 votes)
Posté le 14 décembre 2017 - 08:40
Bonjour,

+1 => la connexion définie dans l'analyse est prise par défaut s'il n'y a pas de connexion décrite par programmation.
Elle permet également d'afficher les données dans l'éditeur windev en développement en ayant une source de données à dispo.

Dans votre programme utilisez la 'nouvelle' façon de déclarer une connexion. Plus sympa....appréciation perso :-)

ConnexionProd est une Connexion
ConnexionProd..Provider = hAccèsHFClientServeur
ConnexionProd..Serveur = xxxx
ConnexionProd..Utilisateur = xxxx
ConnexionProd..MotDePasse = xxxx


*****> Ouvrez ensuite cette connexion
Si HouvreConnexion(ConnexionProd) ALORS....

*****> Changez la connexion de vos fichiers
SI HChangeConnexion("*",ConnexionProd) ALORS...

Il n'y a effectivement pas de raison qu'une requête qui fonctionne en mode Classic ne fonctionne pas en C/S car je pense également que c'est le même moteur (+1 DC).
Une chose peut faire la différence à mon sens.. Votre version du serveur HyperFile est dans une version inférieure à la version de votre environnement de développement (vous utiliser un serveur HFSQL 17 avec un projet Windev 20 ! )

--
Dominique DAUSSY
http://www.serviceinfo76.com
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 14 décembre 2017 - 09:31
Bonjour DC et Dominique,

Merci pour vos apports :)
Oui je suis plutôt de votre avis : il n'y a en effet aucune raison logique qu'il y ait des différences de moteur. J'ai d'ailleurs d'autres séries de requêtes de requêtes... (...de requête) qui ne posent pas de problème (mais elles sont moins alambiquées). L'appli en question a été adaptée depuis ce que j'avais déjà développé il y a quelques années en Access/VBA.

Je pourrai en effet tester cette manière alternative de déclarer la connexion. Peut être aussi que je pourrai tenter de passer par des halias pour optimiser les contextes. Le fait que je sois néophyte dans l'utilisation du C/S peut aussi me jouer des tours même si en dehors de ces soucis particuliers, tout est opérationnel (accès aux données, requetes de l'éditeur ou dans le code...)

De mon côté, les fichiers ont été checkés, rien à signaler.
Je suis sur un serveur en V22 à jour (il y'eut un 17 sur la même machine en effet)

J'ai lu par contre en parcourant les forums qu'il était recommandé de laisser l'analyse en classic et de faire la connexion avec le C/S dans le code.
Et c'est vrai que rien que pour les tests je préférai travailler en classic, je trouvais ça plus souple de passer d'une base à l'autre.

Et un autre topic où je n'ai jamais eu ou trouvé de réponse, c'est le fait que des requêtes de requêtes conçues dans l'éditeur, à partir d'un certain nombre de niveaux, ne s'affichent plus dans une fenêtre de prévisualisation (la fenêtre disparait instantanément, sans erreur, mais je peux confirmer que les requêtes fonctionnent en les manipulant ensuite dans le code...). J'ai constaté ça dès mes débuts sur WD avec la version 20, et n'ai jamais rencontré quelqu'un dans le même cas.

A suivre quand j'ai du nouveau, pour l'instant je contourne et je m'en sors à coup de bidouilles.

Bonne journée,

G.
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 18 décembre 2017 - 10:41
Bonjour,

Retour du ST pas concluant, je n'ai pas joint l'analyse (seulement les fichiers). Ben oui première requête ça peut pas être parfait :(

Mais j'aimerai bien obtenir une réponse de votre part concernant une question posée plus haut :
est- ce que le fait que je ne fasse pas mes liaisons dans l'analyse peut jouer ? 
J'en doute mais comme je fais toutes mes jointures dans le SQL...

En d'autres termes, établir les liaisons dans l'analyse est il un impératif ?

Et 2nde question : qu'"en est il du conseil croisé dans les forums de laisser l'analyse en HF Classic et de gérer la partie c/s uniquement via le code de connexion ?

Merci !
Message modifié, 18 décembre 2017 - 10:43
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 18 décembre 2017 - 11:11
Bonjour,

1- Il n'est absolument pas obligatoire d'avoir des liaisons entre les différents fichiers dans l'analyse.

2- Le conseil est judicieux tout simplement car c'est plus rapide pour le développement et que tu n'es lié à aucun serveur.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Posté le 20 décembre 2017 - 09:05
Philippe SB a émis l'idée suivante :
Bonjour,

1- Il n'est absolument pas obligatoire d'avoir des liaisons entre les
différents fichiers dans l'analyse.

2- Le conseil est judicieux tout simplement car c'est plus rapide pour le
développement et que tu n'es lié à aucun serveur.


+1 pour les 2 paragraphes

--
-------------------------------------------------------------
www.ctc-soft.com
Gestion biblo-documentaire (free-share)
Comptabilité shareware
Logiciels de Gestion de saisie terrain
Spécialisé Tournées de boulangers
-------------------------------------------------------------
Membre enregistré
1 304 messages
Popularité : +47 (51 votes)
Posté le 20 décembre 2017 - 17:37
Salut Guillaume,

Quand tu vas dans le Centre de Contre HFSQL est-ce que tu vois ta base CCKA_EMK ?
Est-ce que les droits sont bien mis en place ?

A+
Daryl

--
http://www.concept4u2.com
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 21 décembre 2017 - 09:05
Bonjour,

Oui, merci Philippe SB, Thumb up pour ces réponses dont je tiendrai compte (surtout la 2eme, puisque la 1ere est ma manière habituelle de travailler, héritage des autres environnements dans lesquels je travaille ou eu travaillé).

D'ailleurs je pense que l'application de ce 2nd conseil va même me faciliter la tâche pour switcher sur un environnement de test en classic/local.

@Daryl,
Oui, j'ai cette arborescence dans le CC (il y a d'autres bases en dessous...). Niveau droit, étant en interne (et aux balbutiements sur la base C/S), je me permet pour le moment de n'avoir qu'un user admin pour tout gérer.





En dehors de ces longues requêtes successives, je n'ai par ailleurs aucun souci d'accès aux données. Ce sont seulement quelques briques un peu complexes qui me posent souci.

Je n'ai toujours pas de soluce (ma 1ere requête au ST s'étant avérée incomplète lors du 1er jet), comme là j'ai au moins pu facturer, je me laisse un peu de répit car d'autres dossiers en attente (mais je ne lâche pas l'affaire, juste une question de priorité ;)).

++

G.
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 03 janvier 2018 - 10:03
Bonjour et meilleurs voeux à toutes et tous !

Voici enfin la réponse du ST sur mon souci... Eh bien c'était vraiment pas bien compliqué, mais...

Le blocage "fichier spécifié introuvable" est lié à la localisation des données dans le cas d'une connexion HFSQL client/serveur, et d'une requête (REQ__PrepReinscAttente_Solf_Resp) utilisant une autre requête (REQ__prep_ReinscAttente_Solf ).
Dans ce cas précis la connexion de la requête réutilisée par la suite dans une autre requête doit être précisée.  Sans cela lors de l'exécution de la seconde requête le moteur HFSQL client/serveur ne sait pas localiser toutes les données.
Afin d'avoir le résultat attendu, il suffit donc d'avoir les exécutions des requêtes associées à la même connexion que les données. Votre code : 
HExécuteRequête ( REQ__prep_ReinscAttente_Solf ) 
HExécuteRequête ( REQ__prep_ReinscAttente_Instr )

doit être remplacé par : 
HExécuteRequête ( REQ__prep_ReinscAttente_Solf , "CnxEmkHfsW" ) 
HExécuteRequête ( REQ__prep_ReinscAttente_Instr , "CnxEmkHfsW" ) 

Afin de simplifier ce type de traitement, une demande a été transmise à notre équipe Développement afin de voir s'il est possible d'utiliser automatiquement la connexion courante des tables, pour les requêtes. J'espère que les implémentations nécessaires pourront être planifiées rapidement.


Bonne journée :)

G.