OVH Cloud OVH Cloud

HExecuteRequeteSQL et MySQL

22 réponses
Avatar
I.G.LOG
Bonjour,
Tjrs mes pb avec HExecutreRequeteSQL sur MySQL. J'ai une erreur de syntaxe
near 'ARCLEUNIK = OL.ARCLEUNIK, DOSSIER DOSSIER left outer join CL'
sur le code suivant:

select OL.OLCLEUNIK, OL.TYPEPRE, OL.INDICE, OL.DATEDEB, OL.DELAI,
OL.NUMCONTROLE, OL.NUMSOC, OL.SUSPENDU, OL.CLOTURE, OL.PRCLEUNIK,
OL.ARCLEUNIK,
DOSSIER.NUMDOS, DOSSIER.NUMSOC as SocOrigine,
CLIENT.RAISON, CLIENT.CLIENTETAT,
ARTICLES.ABRCONST, ARTICLES.REFCONST, ARTICLES.NUMFAM
from
OL OL left outer join ARTICLES ARTICLES on ARTICLES.ARCLEUNIK =
OL.ARCLEUNIK,
DOSSIER DOSSIER left outer join CLIENT CLIENT on CLIENT.CLCLEUNIK =
DOSSIER.CLCLEUNIK
where OL.TERMINE = 0
and OL.NUMSOC = 1
and OL.NUMDEP = 1
and DOSSIER.DSCLEUNIK = OL.DSCLEUNIK

cette requete fonctionne sur HF7 mais pas sur MySQL 4.0.20c !
PS: Je suis en train d'essayer de migrer une grosse appli HF7 -> MySQL et
rares sont les requetes compatibles. Je croyais que SQL etait un langage
standardisé !!!!!!!!

2 réponses

1 2 3
Avatar
Manuel Pavy
J ai les memes soucis depuis que je migre mon appli.
Ca y est, ce thread m a un peu (plus) eclairé.
Cependant, le probleme sous windev, ce sont les doubles ou triples jointures.
en MySQL, la requete de double jointure s ecrit :
SELECT *
FROM tab1
join tab2 as annucert on <condition1>
join tab3 on <condition2>

tandis qu en windev, il veut :
SELECT *
FROM tab1
join tab2 as annucert on <condition1>,
tab1 join tab3 on <condition2>

pour que ca compile sans warning.

Le probleme que j ai en ce moment : j utilise le hRequeteSansCorrection, mais
windev me sors une erreur lors de son appel, bien que le resultat soit juste et
qu il n y ait pas d incidence sur la suite (solution1).
Par contre, si je respecte la syntaxe qui fait plaisir à windev, MySQL me jette
lors de l appel de la requete (meme sans le hrequete sanscorrection).

Manu



"I.G.LOG" a écrit :

"Gégé" a écrit dans le message de
news:cc18mt$gqm$
> I.G.LOG wrote:
> > Apres essais, le probleme vient de HExecuteRequeteSQL() ! En effet, avec
> > SQLExec() je n'ai plus d'erreur MySQL:
>
> Bingo !
>

Bonjour,

Précision (p'tet importante): en utilisant HExecuteRequeteSQL avec l'option
hRequeteSansCorrection on arrive a un comportement identique a SQLExec()
(qui marche donc avec MySQL)
Mais... d'après les docs de PCSoft, SQLExec() est plus rapide que
HExecuteRequeteSQL() sur acces natif mais moins rapide (que
HExecuteRequeteSQL) sur HF ! (choisir donc en fonction de sa base); confirmé
par mes tests !


Avatar
Manu
"Manuel Pavy" a écrit dans le message news:

J ai les memes soucis depuis que je migre mon appli.
Ca y est, ce thread m a un peu (plus) eclairé.
Cependant, le probleme sous windev, ce sont les doubles ou triples


jointures.
en MySQL, la requete de double jointure s ecrit :
SELECT *
FROM tab1
join tab2 as annucert on <condition1>
join tab3 on <condition2>

tandis qu en windev, il veut :
SELECT *
FROM tab1
join tab2 as annucert on <condition1>,
tab1 join tab3 on <condition2>



Cela peut ressembler à du prosélistisme mais cela n'en est pas.

Rien de tel pour cela qu'une classe qui te génère ton code (cGestionSQL) ou
qui en fait totalement abstraction (SQLManagerX).
Dans ton cas c'est surtout la 1ère qui serait utile. Car, il te suffirait de
la récupérer sur le site de Eric, d'ajouter un mode MySQLparWindev et de
modifier la fonction Rtv_ReqSQL pour qu'elle te génère ton code comme tu
veux.
Premier avantage, tu as 1 seul code à maintenir (en plus il est simple à
relire) et il est capable de te générer la requete pour ton cas précis mais
aussi pour MySQL et Oracle (du moment que c'est une requete sans fonction).
Deuxième avantage : vous êtes plusieurs à avoir le problème! dès que tu as
fais ton évolution, tu le mets à dispo de la communauté et en moins de 1
semaine si toutes les pesronnes qui rencontrent le problèmes testent aussi
tu as fais faire un grand pas pour toute la communauté.

Pour rappel :
Voici un bout de code au final dans ton application :

MonSQL:RAZ()
MonSQL:AddSelect("OL","OLCLEUNIK")
MonSQL:AddSelect("ARTICLES","ABRCONST")
MonSQL:AddSelect("Dossier","NUMDOS")
MonSQL:AddJoin("OL.ARCLEUNIK=ARTICLES.ARCLEUNIK", "LEFT")
MonSQL:AddJoin("OL.DSCLEUNIK=DOSSIER.DSCLEUNIK", "LEFT")
MonSQL:AddWhere("OL.TERMINE = 0")

SQLExec(MonSQL:Rtv_ReqSQL(),"lReq")
1 2 3