PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WEBDEV 2024 → Probleme avec une requete SQL
Probleme avec une requete SQL
Iniciado por Pierre O., ago., 20 2004 12:15 AM - 3 respostas
Publicado em agosto, 20 2004 - 12:15 AM
Experts Webdev, c'est l'heure de vous exprimer !

J'ai une requete qui fonctionne parfaitement dans l'analyseur de requete
SQL serveur.

Dans Webdev, j'ai l'erreur suivante :

Erreur d'initialisation de la requete
Erreur de l'accès OLE DB
Numéro d'erreur = 170129

Echec de l'ouverture du fichier.

Détail de l'erreur systeme :
Description = Multi-step OLE DB operation generated errors. Check each OLE
DB status value, if available. No work was done.
Source = Microsoft OLE DB Provider for SQL Server
Error number = -2147217887

Voici la requete en question ( elle fonctionne bie directement dans SQL )

SELECT DETCMD.DETCMD_REF,
Right([pro_date],8) AS [date prod],
COMMANDE.CMD_NO,
DETCMD.DETCMD_QTEORD,
DETCMD.DETCMD_DATELIV,
Right(CHARGE_DATE,8) AS [date charge],
DETCMD.PRD_NO,
DETCMD.DETCMD_SEQ,
COMMANDE.CMD_COMMENT1,
COMMANDE.CMD_COMMENT2,
CUSTOMER.CST_NOM
FROM ((WOTRANSIT RIGHT JOIN ((PRODUCTION RIGHT JOIN (STOCK INNER JOIN (DETCMD
INNER JOIN WO
ON (DETCMD.PRD_NO = WO.PRD_NO) AND (DETCMD.DETCMD_REF = WO.DETCMD_REF))
ON STOCK.DETCMD_REF = WO.DETCMD_REF) ON PRODUCTION.STOCK_FROMREF = STOCK.STOCK_REF)

INNER JOIN COMMANDE ON DETCMD.CMD_NO = COMMANDE.CMD_NO) ON WOTRANSIT.WO_REF
= WO.WO_REF)
LEFT JOIN CHARGE ON WOTRANSIT.CHARGE_REF = CHARGE.CHARGE_REF) INNER JOIN
CUSTOMER
ON COMMANDE.CST_NO = CUSTOMER.CST_NO
WHERE (((DETCMD.DETCMD_COMPLETE)=0) AND ((COMMANDE.CST_NO)={param1})
AND ((WO.WO_FROMDET)=-1))
GROUP BY DETCMD.DETCMD_REF,
Right([pro_date],8),
COMMANDE.CMD_NO,
DETCMD.DETCMD_QTEORD,
DETCMD.DETCMD_DATELIV,
Right(CHARGE_DATE,8),
DETCMD.PRD_NO,
DETCMD.DETCMD_SEQ,
COMMANDE.CMD_COMMENT1,
COMMANDE.CMD_COMMENT2,
CUSTOMER.CST_NOM
HAVING (((Right([pro_date],8)) Is Not Null))
ORDER BY COMMANDE.CMD_NO

Merci de votre aide précieuse

Pierre O.
Publicado em agosto, 20 2004 - 10:24 AM
Salut, il faut que tu exécute cette requête par la commande HExécuteRequête()
avec le paramètre hRequêtesanscorrection.

Antoine

"Pierre O." <pierreo@fenplast.com> wrote:


Experts Webdev, c'est l'heure de vous exprimer !

J'ai une requete qui fonctionne parfaitement dans l'analyseur de requete
SQL serveur.

Dans Webdev, j'ai l'erreur suivante :

Erreur d'initialisation de la requete
Erreur de l'accès OLE DB
Numéro d'erreur = 170129

Echec de l'ouverture du fichier.

Détail de l'erreur systeme :
Description = Multi-step OLE DB operation generated errors. Check each OLE
DB status value, if available. No work was done.
Source = Microsoft OLE DB Provider for SQL Server
Error number = -2147217887

Voici la requete en question ( elle fonctionne bie directement dans SQL

)

SELECT DETCMD.DETCMD_REF,
Right([pro_date],8) AS [date prod],
COMMANDE.CMD_NO,
DETCMD.DETCMD_QTEORD,
DETCMD.DETCMD_DATELIV,
Right(CHARGE_DATE,8) AS [date charge],
DETCMD.PRD_NO,
DETCMD.DETCMD_SEQ,
COMMANDE.CMD_COMMENT1,
COMMANDE.CMD_COMMENT2,
CUSTOMER.CST_NOM
FROM ((WOTRANSIT RIGHT JOIN ((PRODUCTION RIGHT JOIN (STOCK INNER JOIN (DETCMD
INNER JOIN WO
ON (DETCMD.PRD_NO = WO.PRD_NO) AND (DETCMD.DETCMD_REF = WO.DETCMD_REF))


ON STOCK.DETCMD_REF = WO.DETCMD_REF) ON PRODUCTION.STOCK_FROMREF = STOCK.STOCK_REF)

INNER JOIN COMMANDE ON DETCMD.CMD_NO = COMMANDE.CMD_NO) ON WOTRANSIT.WO_REF
= WO.WO_REF)
LEFT JOIN CHARGE ON WOTRANSIT.CHARGE_REF = CHARGE.CHARGE_REF) INNER JOIN
CUSTOMER
ON COMMANDE.CST_NO = CUSTOMER.CST_NO
WHERE (((DETCMD.DETCMD_COMPLETE)=0) AND ((COMMANDE.CST_NO)={param1})
AND ((WO.WO_FROMDET)=-1))
GROUP BY DETCMD.DETCMD_REF,
Right([pro_date],8),
COMMANDE.CMD_NO,
DETCMD.DETCMD_QTEORD,
DETCMD.DETCMD_DATELIV,
Right(CHARGE_DATE,8),
DETCMD.PRD_NO,
DETCMD.DETCMD_SEQ,
COMMANDE.CMD_COMMENT1,
COMMANDE.CMD_COMMENT2,
CUSTOMER.CST_NOM
HAVING (((Right([pro_date],8)) Is Not Null))
ORDER BY COMMANDE.CMD_NO

Merci de votre aide précieuse

Pierre O.
Publicado em agosto, 20 2004 - 4:46 PM
Merci pour la réponse.

Je n'ai pas le choix de toute facon d'utiliser le parametre hRequêtesanscorrection
sinon Webdev ne me permet pas de l'exécuter car il tente d'interpréter la
requete. Comme la requete contient des ordres spécifiques au langage SQL,
je doit absolument utiliser hRequêtesanscorrection.

L'erreur se produit un peu plus loin, probablement dans le moteur "Microsoft
OLE DB Provider for SQL Server" tel que le message d'erreur le mentionne.

C'est que le message d'erreur n'est pas très clair :

Description = Multi-step OLE DB operation generated errors. Check each OLE
DB status value, if available. No work was done.
Source = Microsoft OLE DB Provider for SQL Server
Error number = -2147217887

Ca veut dire quoi ce message ?

"Antoine" <antoine.info.dev@free.fr> wrote:


Salut, il faut que tu exécute cette requête par la commande HExécuteRequête()
avec le paramètre hRequêtesanscorrection.

Antoine

"Pierre O." <pierreo@fenplast.com> wrote:


Experts Webdev, c'est l'heure de vous exprimer !

J'ai une requete qui fonctionne parfaitement dans l'analyseur de requete
SQL serveur.

Dans Webdev, j'ai l'erreur suivante :

Erreur d'initialisation de la requete
Erreur de l'accès OLE DB
Numéro d'erreur = 170129

Echec de l'ouverture du fichier.

Détail de l'erreur systeme :
Description = Multi-step OLE DB operation generated errors. Check each

OLE
DB status value, if available. No work was done.
Source = Microsoft OLE DB Provider for SQL Server
Error number = -2147217887

Voici la requete en question ( elle fonctionne bie directement dans SQL
)


SELECT DETCMD.DETCMD_REF,
Right([pro_date],8) AS [date prod],
COMMANDE.CMD_NO,
DETCMD.DETCMD_QTEORD,
DETCMD.DETCMD_DATELIV,
Right(CHARGE_DATE,8) AS [date charge],
DETCMD.PRD_NO,
DETCMD.DETCMD_SEQ,
COMMANDE.CMD_COMMENT1,
COMMANDE.CMD_COMMENT2,
CUSTOMER.CST_NOM
FROM ((WOTRANSIT RIGHT JOIN ((PRODUCTION RIGHT JOIN (STOCK INNER JOIN (DETCMD
INNER JOIN WO
ON (DETCMD.PRD_NO = WO.PRD_NO) AND (DETCMD.DETCMD_REF = WO.DETCMD_REF))

ON STOCK.DETCMD_REF = WO.DETCMD_REF) ON PRODUCTION.STOCK_FROMREF = STOCK.STOCK_REF)

INNER JOIN COMMANDE ON DETCMD.CMD_NO = COMMANDE.CMD_NO) ON WOTRANSIT.WO_REF
= WO.WO_REF)
LEFT JOIN CHARGE ON WOTRANSIT.CHARGE_REF = CHARGE.CHARGE_REF) INNER JOIN
CUSTOMER
ON COMMANDE.CST_NO = CUSTOMER.CST_NO
WHERE (((DETCMD.DETCMD_COMPLETE)=0) AND ((COMMANDE.CST_NO)={param1})
AND ((WO.WO_FROMDET)=-1))
GROUP BY DETCMD.DETCMD_REF,
Right([pro_date],8),
COMMANDE.CMD_NO,
DETCMD.DETCMD_QTEORD,
DETCMD.DETCMD_DATELIV,
Right(CHARGE_DATE,8),
DETCMD.PRD_NO,
DETCMD.DETCMD_SEQ,
COMMANDE.CMD_COMMENT1,
COMMANDE.CMD_COMMENT2,
CUSTOMER.CST_NOM
HAVING (((Right([pro_date],8)) Is Not Null))
ORDER BY COMMANDE.CMD_NO

Merci de votre aide précieuse

Pierre O.

Publicado em agosto, 20 2004 - 7:52 PM
Pour ceux que ca intéresse,

J'ai finalement réussi a contourner le problème en utilisant une connection
par MSDASQL (Accès ODBC par OLEDB) plutot que par SQLOLEDB (Microsoft OLE
DB Provider for SQL Server)

Bien que je n'aime pas utiliser ODBC (configuration supplémentaire), il s'avère
que mon problème à été résolu de cette facon.

Si quelqu'un est en mesure de m'expliquer pourquoi ca fonctionne de cette
facon(MSDASQL) et non de l'autre(SQLOLEDB), ce serait grandement apprécié.

J'espère que mon problème en aidera d'autres

Merci

Pierre O.




"Pierre O." <pierreo@fenplast.com> wrote:


Experts Webdev, c'est l'heure de vous exprimer !

J'ai une requete qui fonctionne parfaitement dans l'analyseur de requete
SQL serveur.

Dans Webdev, j'ai l'erreur suivante :

Erreur d'initialisation de la requete
Erreur de l'accès OLE DB
Numéro d'erreur = 170129

Echec de l'ouverture du fichier.

Détail de l'erreur systeme :
Description = Multi-step OLE DB operation generated errors. Check each OLE
DB status value, if available. No work was done.
Source = Microsoft OLE DB Provider for SQL Server
Error number = -2147217887

Voici la requete en question ( elle fonctionne bie directement dans SQL

)

SELECT DETCMD.DETCMD_REF,
Right([pro_date],8) AS [date prod],
COMMANDE.CMD_NO,
DETCMD.DETCMD_QTEORD,
DETCMD.DETCMD_DATELIV,
Right(CHARGE_DATE,8) AS [date charge],
DETCMD.PRD_NO,
DETCMD.DETCMD_SEQ,
COMMANDE.CMD_COMMENT1,
COMMANDE.CMD_COMMENT2,
CUSTOMER.CST_NOM
FROM ((WOTRANSIT RIGHT JOIN ((PRODUCTION RIGHT JOIN (STOCK INNER JOIN (DETCMD
INNER JOIN WO
ON (DETCMD.PRD_NO = WO.PRD_NO) AND (DETCMD.DETCMD_REF = WO.DETCMD_REF))


ON STOCK.DETCMD_REF = WO.DETCMD_REF) ON PRODUCTION.STOCK_FROMREF = STOCK.STOCK_REF)

INNER JOIN COMMANDE ON DETCMD.CMD_NO = COMMANDE.CMD_NO) ON WOTRANSIT.WO_REF
= WO.WO_REF)
LEFT JOIN CHARGE ON WOTRANSIT.CHARGE_REF = CHARGE.CHARGE_REF) INNER JOIN
CUSTOMER
ON COMMANDE.CST_NO = CUSTOMER.CST_NO
WHERE (((DETCMD.DETCMD_COMPLETE)=0) AND ((COMMANDE.CST_NO)={param1})
AND ((WO.WO_FROMDET)=-1))
GROUP BY DETCMD.DETCMD_REF,
Right([pro_date],8),
COMMANDE.CMD_NO,
DETCMD.DETCMD_QTEORD,
DETCMD.DETCMD_DATELIV,
Right(CHARGE_DATE,8),
DETCMD.PRD_NO,
DETCMD.DETCMD_SEQ,
COMMANDE.CMD_COMMENT1,
COMMANDE.CMD_COMMENT2,
CUSTOMER.CST_NOM
HAVING (((Right([pro_date],8)) Is Not Null))
ORDER BY COMMANDE.CMD_NO

Merci de votre aide précieuse

Pierre O.