Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD16] Probleme OUTER JOIN

1 réponse
Avatar
Pascal F
Bonjour,
Avec les versions précédentes, j'utilisais des HExecuteRequeteSQL avec
des OUTER JOIN afin de récupérer les enregistrements meme si le fichier
relié ne comportait pas d'enregistrement et le résultat correspondait à
ce que j'attendais. Depuis le passage à la version 16, tout se passe
comme si les OUTER JOIN fonctionnaient comme les INNER JOIN, à savoir
si pas d'enregistrement correspondant dans le fichier relié, meme si un
enregistrement existe dans le fichier de base, aucun résultat n'est
retourné. exemple de requete ne fonctionnant plus:

// Création de la requete
cRequete="SELECT DISTINCT BILRES_005.IDBILRES_005 AS IDBILRES_005,"+...
"BILRES_DETAIL.Montant_N AS Montant_N, "+...
"BILRES_DETAIL.Montant_NMoins1 AS Montant_NMoins1, "+...
"BILRES_DETAIL.IDVERSION_PREVISIONNEL AS IDVERSION_PREVISIONNEL,
"+...
"BILRES_DETAIL.Montant_N_AMO AS Montant_N_AMO, "+...
"BILRES_DETAIL.Montant_NMoins1_AMO AS Montant_NMoins1_AMO, "+...
"BILRES_005.Designation AS Designation, "+...
"BILRES_005.Code_Liasse_Brut AS Code_Liasse_Brut, "+...
"BILRES_005.Formule_Liasse_Brut AS Formule_Liasse_Brut, "+...
"BILRES_005.Code_liasse_Amo AS Code_liasse_Amo, "+...
"BILRES_005.Formule_Liasse_Amo AS Formule_Liasse_Amo, "+...
"BILRES_005.Formule_Liasse_Net AS Formule_Liasse_Net, "+...
"BILRES_005.Type_Donnee AS Type_Donnee, "+...
"BILRES_005.Est_Total AS Est_Total "+...
"FROM BILRES_DETAIL RIGHT OUTER JOIN BILRES_005 ON
BILRES_005.IDBILRES_005=BILRES_DETAIL.IDBILRES_005 "+...
"WHERE BILRES_005.Type_Donnee=1 AND
BILRES_DETAIL.IDVERSION_PREVISIONNEL="+IDVERSION_PREVI+" ORDER BY
IDBILRES_005"

// IDVERSION_PREVI est une variable globale à la fenetre qui contient
l'id de la version du prévisionnel sur laquelle on travaille
// Il faut l'initialiser avec la plus grande valeur de l'exercice sur
lequel on travaille, ou bien si on est dans le prévisionnel
// avec la version à partir de laquelle on veut repartir (les suivantes
étant supprimées lors de la validation du prévisionnel.

// Initialise la requête
SI PAS HExécuteRequêteSQL(ReqActifBilan,hRequêteDéfaut,cRequete) ALORS
Erreur ( "Erreur d' initialisation de la requête" + RC + HErreurInfo
())
RETOUR
FIN


Lors de la 1ère utilisation de la requete, le fichier BILRES_DETAIL est
vide. Le fichier BILRES_005 contient des enregistrements définissant
chaque ligne du BILAN ACTIF devant être affichée. les valeurs des
bilans N et N-1 seront stockées dans les enregistrements de
BILRES_DETAIL.
Mais comme plus d'enregistrements retournés par la requete, je ne peux
plus saisir :-@

Avez-vous le même comportement ou bien est-ce que je construit mal mes
requetes?
Merci.

--
Pascal
N0.pascal.SPAM@efpe.biz
Ne garder que le prénom pour me joindre

1 réponse

Avatar
Pascal F
Je me réponds à moi-meme si cela peut aider d'autres.
Il faut passer par une sous requete pour que cela fonctionne à nouveau.

/ Création de la requete
cRequete=[
SELECT DISTINCT BILRES_005.IDBILRES_005 AS IDBILRES_005,
BD.Montant_N AS Montant_N,
BD.Montant_NMoins1 AS Montant_NMoins1,
BD.IDVERSION_PREVISIONNEL AS IDVERSION_PREVISIONNEL,
BD.Montant_N_AMO AS Montant_N_AMO,
BD.Montant_NMoins1_AMO AS Montant_NMoins1_AMO,
BILRES_005.Designation AS Designation,
BILRES_005.Code_Liasse_Brut AS Code_Liasse_Brut,
BILRES_005.Formule_Liasse_Brut AS Formule_Liasse_Brut,
BILRES_005.Code_liasse_Amo AS Code_liasse_Amo,
BILRES_005.Formule_Liasse_Amo AS Formule_Liasse_Amo,
BILRES_005.Formule_Liasse_Net AS Formule_Liasse_Net,
BILRES_005.Type_Donnee AS Type_Donnee,
BILRES_005.Est_Total AS Est_Total
FROM BILRES_005 LEFT OUTER JOIN (SELECT
BILRES_DETAIL.Montant_N AS Montant_N,
BILRES_DETAIL.Montant_NMoins1 AS Montant_NMoins1,
BILRES_DETAIL.IDVERSION_PREVISIONNEL AS IDVERSION_PREVISIONNEL,
BILRES_DETAIL.Montant_N_AMO AS Montant_N_AMO,
BILRES_DETAIL.Montant_NMoins1_AMO AS Montant_NMoins1_AMO,
BILRES_DETAIL.IDBILRES_005
FROM BILRES_DETAIL WHERE BILRES_DETAIL.IDVERSION_PREVISIONNEL=%1
)BD ON BILRES_005.IDBILRES_005½.IDBILRES_005
WHERE BILRES_005.Type_Donnee=1
ORDER BY IDBILRES_005
]

// IDVERSION_PREVI est une variable globale à la fenetre qui contient
l'id de la version du prévisionnel sur laquelle on travaille
// Il faut l'initialiser avec la plus grande valeur de l'exercice sur
lequel on travaille, ou bien si on est dans le prévisionnel
// avec la version à partir de laquelle on veut repartir (les suivantes
étant supprimées lors de la validation du prévisionnel.

// Initialise la requête
SI PAS
HExécuteRequêteSQL(ReqActifBilan,hRequêteDéfaut,chaineconstruit(cRequete,IDVERSION_PREVI))
ALORS
Erreur ( "Erreur d' initialisation de la requête" + RC + HErreurInfo
())
RETOUR
FIN

--
Pascal

Ne garder que le prénom pour me joindre