Erreur requête
Stagiaire WDF
Inscrit:
19/01/2006 11:29
Post(s): 9
Bonjour,

je reprends une application Windev tournant sur une base de données Hyperfile pour la migrer vers une base de données SQL Server 2000.

La migration en elle-même a été effectué, mais des erreurs dans le code sont survenues dues à celle-ci, je suis en train de les corriger.
L'une de celles-ci concerne cette requête, qui fonctionne sur les tables Hyperfile mais pas sous SQL Server (en éxecution directe indépendemment du code, la reqûete retourne des valeurs NULL dans tous les champs ; par le programme, il me dit que "INITIAL_INVENTORY" est un nom correspondant à 2 tables ou fonctions différentes - ce qui n'est pas le cas) :

SELECT INITIAL_INVENTORY.ID AS ID, SYSTEM_CODE.HSS_Code AS HSS_Code, INITIAL_INVENTORY.HasQualityImpact AS HasQualityImpact,
INITIAL_INVENTORY.SEQ AS SEQ, INITIAL_INVENTORY.System AS System, INITIAL_INVENTORY.Description AS Description,
INITIAL_INVENTORY.Platform AS Platform, INITIAL_INVENTORY.Soft AS Soft, INITIAL_INVENTORY.InHouseDevelopment AS InHouseDevelopment,
INITIAL_INVENTORY.Location AS Location, CONTROLLING_FUNCTION.Designation AS ControllingFunction, INITIAL_INVENTORY.QSR AS QSR,
INITIAL_INVENTORY.LinkedToSystem AS LinkedToSystem, INITIAL_INVENTORY.LinkedToHardwareComponent AS LinkedToHardwareComponent,
INITIAL_INVENTORY.LinkedToSoftwareComponent AS LinkedToSoftwareComponent,
INITIAL_INVENTORY.LinkedToDatabaseComponent AS LinkedToDatabaseComponent,
INITIAL_INVENTORY.NotApplicableForDRP AS NotApplicableForDRP, PROVIDER.ProviderName AS ProviderName,
INITIAL_INVENTORY.HasERESImpact AS HasERESImpact
FROM SYSTEM_CODE INNER JOIN
INITIAL_INVENTORY ON SYSTEM_CODE.ID = INITIAL_INVENTORY.SystemCodeID CROSS JOIN
CONTROLLING_FUNCTION INNER JOIN
INITIAL_INVENTORY INITIAL_INVENTORY_1 ON CONTROLLING_FUNCTION.ID = INITIAL_INVENTORY.ControllingFunctionID CROSS JOIN
PROVIDER LEFT OUTER JOIN
INITIAL_INVENTORY INITIAL_INVENTORY_2 ON PROVIDER.ID = INITIAL_INVENTORY.ProviderID
ORDER BY SYSTEM_CODE.HSS_Code, INITIAL_INVENTORY.HasQualityImpact DESC, INITIAL_INVENTORY.SEQ

(oui, la requête est assez longue)
Cette requête se trouve dans un report, mais comme indiqué plus haut, même retaper la requête dans SQL Server donne des valeurs NULL.

Quelqu'un saurait a quoi est dû mon problème et comment le régler ?
Merci d'avance.

Contribution le : 19/01/2006 11:39
Créer un fichier PDF de la contribution Imprimer


Re: Erreur requête
Stagiaire WDF
Inscrit:
19/01/2006 11:29
Post(s): 9
J'ai adapté la requête pour qu'elle fonctionne sous SQL Server 2000 :

SELECT I.ID AS ID, S.HSS_Code AS HSS_Code, I.HasQualityImpact AS HasQualityImpact, I.SEQ AS SEQ, I.System AS System, I.Description AS Description,
I.Platform AS Platform, I.Soft AS Soft, I.InHouseDevelopment AS InHouseDevelopment, I.Location AS Location, C.Designation AS ControllingFunction,
I.QSR AS QSR, I.LinkedToSystem AS LinkedToSystem, I.LinkedToHardwareComponent AS LinkedToHardwareComponent,
I.LinkedToSoftwareComponent AS LinkedToSoftwareComponent, I.LinkedToDatabaseComponent AS LinkedToDatabaseComponent,
I.NotApplicableForDRP AS NotApplicableForDRP, P.ProviderName AS ProviderName, I.HasERESImpact AS HasERESImpact
FROM SYSTEM_CODE S INNER JOIN
INITIAL_INVENTORY I ON S.ID = I.SystemCodeID LEFT OUTER JOIN
CONTROLLING_FUNCTION C ON I.ControllingFunctionID = C.ID LEFT OUTER JOIN
PROVIDER P ON I.ProviderID = P.ID
ORDER BY S.HSS_Code, I.HasQualityImpact DESC, I.SEQ


Donne de bons résultats directement sous SQL Server mais Windev8 semble ne pas accepter des OUTER JOIN (unexpected word : LEFT, ... même chose avec des RIGHT OUTER JOIN, d'ailleurs).

Je me retrouve complètement bloqué, puisque la requête qui fonctionnait sous Windev portait sur des fichiers Hyperfile et SQL Server ne l'accepte pas et la syntaxe adaptée à SQL Server n'est pas viable sous Windev8 ... le problème subsiste, donc.

Contribution le : 19/01/2006 13:04
Créer un fichier PDF de la contribution Imprimer


Re: Erreur requête
Stagiaire WDF
Inscrit:
19/01/2006 11:29
Post(s): 9
Tant que j'y suis ... je préçise : exécuter la requête sous Windev donne de bons résultats, mais lorsque je lance l'application (après avoir ajouté le .wdr au projet et avoir redirigé la requête du report vers celui-ci), il plante, annonçant "unexpected word:LEFT" comme source de l'erreur.

En effet, il me le met en warning en compilation, mais la requête retourne quand même des résultats corrects en exécution directe.

Existe-t-il un équivalent pour les OUTER JOIN (spécifiquement les LEFT OUTER JOIN) dans Windev ?

S'il est utile de le préçiser, j'utilise un accès OLE DB sur la base de données SQL Server, mais je compte changer pour un accès natif (question de performances) pour une question de performance, donc si le problème est solvable par accès natif, je suis preneur.

Contribution le : 19/01/2006 14:45
Créer un fichier PDF de la contribution Imprimer


Re: Erreur requête
Animateur WDF
Inscrit:
17/05/2004 14:21
Post(s): 382
Essayez

SELECT I.ID AS ID, S.HSS_Code AS HSS_Code, I.HasQualityImpact AS HasQualityImpact, I.SEQ AS SEQ, I.System AS System, I.Description AS Description,
I.Platform AS Platform, I.Soft AS Soft, I.InHouseDevelopment AS InHouseDevelopment, I.Location AS Location, C.Designation AS ControllingFunction,
I.QSR AS QSR, I.LinkedToSystem AS LinkedToSystem, I.LinkedToHardwareComponent AS LinkedToHardwareComponent,
I.LinkedToSoftwareComponent AS LinkedToSoftwareComponent, I.LinkedToDatabaseComponent AS LinkedToDatabaseComponent,
I.NotApplicableForDRP AS NotApplicableForDRP, P.ProviderName AS ProviderName, I.HasERESImpact AS HasERESImpact
FROM SYSTEM_CODE S, INITIAL_INVENTORY I, CONTROLLING_FUNCTION C, PROVIDER P
WHERE S.ID = I.SystemCodeID
AND I.ControllingFunctionID = C.ID LEFT
AND .ProviderID = P.ID
ORDER BY S.HSS_Code, I.HasQualityImpact DESC, I.SEQ

Si je ne me suis pas trompé.

Contribution le : 19/01/2006 16:24
_________________
Mbsl
Créer un fichier PDF de la contribution Imprimer


Re: Erreur requête
Stagiaire WDF
Inscrit:
19/01/2006 11:29
Post(s): 9
En fait, j'avais déjà essayé cette requête (SQL Server la transforme automatiquement en

SELECT I.ID AS ID, S.HSS_Code AS HSS_Code, I.HasQualityImpact AS HasQualityImpact, I.SEQ AS SEQ, I.System AS System, I.Description AS Description,
I.Platform AS Platform, I.Soft AS Soft, I.InHouseDevelopment AS InHouseDevelopment, I.Location AS Location, C.Designation AS ControllingFunction,
I.QSR AS QSR, I.LinkedToSystem AS LinkedToSystem, I.LinkedToHardwareComponent AS LinkedToHardwareComponent,
I.LinkedToSoftwareComponent AS LinkedToSoftwareComponent, I.LinkedToDatabaseComponent AS LinkedToDatabaseComponent,
I.NotApplicableForDRP AS NotApplicableForDRP, P.ProviderName AS ProviderName, I.HasERESImpact AS HasERESImpact
FROM SYSTEM_CODE S INNER JOIN
INITIAL_INVENTORY I ON S.ID = I.SystemCodeID INNER JOIN
CONTROLLING_FUNCTION C ON I.ControllingFunctionID = C.ID INNER JOIN
PROVIDER P ON I.ProviderID = P.ID
ORDER BY S.HSS_Code, I.HasQualityImpact DESC, I.SEQ), mais sans le mot "LEFT", qui n'est de toutes façons pas accepté par Windev.

Le problème est qu'en fait, elle n'est pas équivalente à la requête initiale, en effet elle ne retourne aucun résultat ... et j'ai remarqué que la 2è requête que j'ai posté ne l'est pas non plus, en fait.

La requête initiale, non adaptée par SQL Server (la première que j'ai posté l'était) est :

SELECT INITIAL_INVENTORY.ID AS ID,
SYSTEM_CODE.HSS_Code AS HSS_Code,
INITIAL_INVENTORY.HasQualityImpact AS HasQualityImpact,
INITIAL_INVENTORY.SEQ AS SEQ,
INITIAL_INVENTORY.System AS System,
INITIAL_INVENTORY.Description AS Description,
INITIAL_INVENTORY.Platform AS Platform,
INITIAL_INVENTORY.Soft AS Soft,
INITIAL_INVENTORY.InHouseDevelopment AS InHouseDevelopment,
INITIAL_INVENTORY.Location AS Location,
CONTROLLING_FUNCTION.Designation AS ControllingFunction,
INITIAL_INVENTORY.QSR AS QSR,
INITIAL_INVENTORY.LinkedToSystem AS LinkedToSystem,
INITIAL_INVENTORY.LinkedToHardwareComponent AS LinkedToHardwareComponent,
INITIAL_INVENTORY.LinkedToSoftwareComponent AS LinkedToSoftwareComponent,
INITIAL_INVENTORY.LinkedToDatabaseComponent AS LinkedToDatabaseComponent,
INITIAL_INVENTORY.NotApplicableForDRP AS NotApplicableForDRP,
PROVIDER.ProviderName AS ProviderName,
INITIAL_INVENTORY.HasERESImpact AS HasERESImpact
FROM SYSTEM_CODE INNER JOIN INITIAL_INVENTORY ON SYSTEM_CODE.ID = INITIAL_INVENTORY.SystemCodeID,
CONTROLLING_FUNCTION INNER JOIN INITIAL_INVENTORY ON CONTROLLING_FUNCTION.ID = INITIAL_INVENTORY.ControllingFunctionID,
PROVIDER RIGHT OUTER JOIN INITIAL_INVENTORY ON PROVIDER.ID = INITIAL_INVENTORY.ProviderID
ORDER BY HSS_Code ASC, HasQualityImpact DESC, SEQ ASC

En gros, SQL Server remplace les virgules par des CROSS JOIN dans ce cas... ce qui est probablement la cause des résultats érronés, mais j'ai essayé beaucoup de possibilités sans savoir recréer les résultats de la requête initiale (tordue, je sais).

Contribution le : 20/01/2006 08:37
Créer un fichier PDF de la contribution Imprimer


Re: Erreur requête
Stagiaire WDF
Inscrit:
19/01/2006 11:29
Post(s): 9
J'ai peut-être la solution, mais il faudrait que je puisse utiliser le paramètre "hrequetesanscorrection" pour une query inscrite dans un report (pas seulement en mode test), est-ce possible ?

Contribution le : 23/01/2006 14:27
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