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

Opérateur ensembliste SQL - IN

5 réponses
Avatar
pyfux
Bonjour à tous,

J'exécute une requête SQL sur une base Oracle à travers une connexion ODBC
par OLEDB qui ne me renvoi aucun enregistrement alors que je devrais en
avoir > 1000 :

SELECT * FROM SORDERQ WHERE SORDERQ.SOHNUM_0 IN ( SELECT SOHNUM_0 FROM
SORDER WHERE SORDER.CREDAT_0 > '20080801' )

La table maître est: SORDER avec comme clef primaire: SOHNUM_0
La sous-table est: SORDERQ avec comme clef externe: SOHNUM_0

Par contre cette requête fonctionne:
SELECT * FROM GROUPEDMD.SORDERQ WHERE SORDERQ.SOHNUM_0 IN (
'CVE0806GEN0877' )

Donc j'en conclue que la commande SQL est mal interprété. Non ?

Faut-il que j'achète l'accès natif à Oracle sachant que cette même requête
sous VBA fonctionne bien (ADO 2.8) ?

Merci pour vos réponses.

PyFux

5 réponses

Avatar
youpi
dajà tu ne devrais pas rajouter un "distinct" dans ta sous requete ? (sauf
si t'es certain de ramener des uniques)

ce qui m'etonne c'est le format de ta date dans ta sous-requete



"pyfux" a écrit dans le message de news:
48b7c93f$0$6913$
Bonjour à tous,

J'exécute une requête SQL sur une base Oracle à travers une connexion ODBC
par OLEDB qui ne me renvoi aucun enregistrement alors que je devrais en
avoir > 1000 :

SELECT * FROM SORDERQ WHERE SORDERQ.SOHNUM_0 IN ( SELECT SOHNUM_0 FROM
SORDER WHERE SORDER.CREDAT_0 > '20080801' )

La table maître est: SORDER avec comme clef primaire: SOHNUM_0
La sous-table est: SORDERQ avec comme clef externe: SOHNUM_0

Par contre cette requête fonctionne:
SELECT * FROM GROUPEDMD.SORDERQ WHERE SORDERQ.SOHNUM_0 IN (
'CVE0806GEN0877' )

Donc j'en conclue que la commande SQL est mal interprété. Non ?

Faut-il que j'achète l'accès natif à Oracle sachant que cette même requête
sous VBA fonctionne bien (ADO 2.8) ?

Merci pour vos réponses.

PyFux






Avatar
pyfux
"youpi" a écrit dans le message de news:
48b84b3c$0$12213$
dajà tu ne devrais pas rajouter un "distinct" dans ta sous requete ? (sauf
si t'es certain de ramener des uniques)

ce qui m'etonne c'est le format de ta date dans ta sous-requete



"pyfux" a écrit dans le message de news:
48b7c93f$0$6913$
Bonjour à tous,

J'exécute une requête SQL sur une base Oracle à travers une connexion
ODBC par OLEDB qui ne me renvoi aucun enregistrement alors que je devrais
en avoir > 1000 :

SELECT * FROM SORDERQ WHERE SORDERQ.SOHNUM_0 IN ( SELECT SOHNUM_0 FROM
SORDER WHERE SORDER.CREDAT_0 > '20080801' )

La table maître est: SORDER avec comme clef primaire: SOHNUM_0
La sous-table est: SORDERQ avec comme clef externe: SOHNUM_0

Par contre cette requête fonctionne:
SELECT * FROM GROUPEDMD.SORDERQ WHERE SORDERQ.SOHNUM_0 IN (
'CVE0806GEN0877' )

Donc j'en conclue que la commande SQL est mal interprété. Non ?

Faut-il que j'achète l'accès natif à Oracle sachant que cette même
requête sous VBA fonctionne bien (ADO 2.8) ?

Merci pour vos réponses.

PyFux







Salut youpi, bonjour à tous,

De la même façon la requête suivante ne renvoi aucun enregistrement:

SELECT * FROM GROUPEDMD.SORDERQ WHERE SORDERQ.SOHNUM_0 IN ( SELECT DISTINCT
SORDER.SOHNUM_0 FROM GROUPEDMD.SORDER WHERE SORDER.CREDAT_0 > '20080801' )


Sachant que :

( SELECT DISTINCT SORDER.SOHNUM_0 FROM GROUPEDMD.SORDER WHERE
SORDER.CREDAT_0 > '20080801' )


Renvoi bien les données attendues.

Quelqu'un a une idée ?

à part:
SELECT SORDERQ.SOHNUM_0 FROM GROUPEDMD.SORDERQ, GROUPEDMD.SORDER WHERE (
SORDERQ.SOHNUM_0 = SORDER.SOHNUM_0 ) AND SORDER.CREDAT_0 > '20080801'


PyFux
Avatar
mat
pyfux wrote on 29.08.2008 :
Bonjour à tous,

J'exécute une requête SQL sur une base Oracle à travers une connexion ODBC
par OLEDB qui ne me renvoi aucun enregistrement alors que je devrais en avoir >
1000 :

SELECT * FROM SORDERQ WHERE SORDERQ.SOHNUM_0 IN ( SELECT SOHNUM_0 FROM SORDER
WHERE SORDER.CREDAT_0 > '20080801' )




Bonsoir,

je ne connais pas Oracle, mais à priori c'est une requête assez
générique qui devrait marcher sous n'importe quel moteur. Si ce n'est
pas le cas, le problème est avec le format de la date. Deux
observations: 1) avec seulement 2 fichiers, il vaut mieux faire une
liaison qu'une sous-requête, p.ex. SELECT * FROM SORDERQ INNER JOIN
SORDER ON (SORDERQ.SOHNUM_O = SORDER.SOHNUM_O AND SORDER.CREDAT_0 >
'20080801'), 2) Le format de date d'Oracle est normalement quelque
chose comme jj-mm-aaaa, ou inverse, ou sysdate = jj-MMM-aa. En
utilisant le format Windev aaaammjj il serait peut-être mieux formater
la date dans la requête avec to_date('20080801','YYYYMMDD'). En plus,
avec HExécuteRequêteSQL ne pas oublier le paramètre
hRequeteSansCorrection afin d'éviter que Windev interprète la requête.

Salutations
Mat
Avatar
pyfux
"mat" a écrit dans le message de news:

pyfux wrote on 29.08.2008 :
Bonjour à tous,

J'exécute une requête SQL sur une base Oracle à travers une connexion
ODBC par OLEDB qui ne me renvoi aucun enregistrement alors que je devrais
en avoir > 1000 :

SELECT * FROM SORDERQ WHERE SORDERQ.SOHNUM_0 IN ( SELECT SOHNUM_0 FROM
SORDER WHERE SORDER.CREDAT_0 > '20080801' )




Bonsoir,

je ne connais pas Oracle, mais à priori c'est une requête assez générique
qui devrait marcher sous n'importe quel moteur. Si ce n'est pas le cas, le
problème est avec le format de la date. Deux observations: 1) avec
seulement 2 fichiers, il vaut mieux faire une liaison qu'une sous-requête,
p.ex. SELECT * FROM SORDERQ INNER JOIN SORDER ON (SORDERQ.SOHNUM_O =
SORDER.SOHNUM_O AND SORDER.CREDAT_0 > '20080801'), 2) Le format de date
d'Oracle est normalement quelque chose comme jj-mm-aaaa, ou inverse, ou
sysdate = jj-MMM-aa. En utilisant le format Windev aaaammjj il serait
peut-être mieux formater la date dans la requête avec
to_date('20080801','YYYYMMDD'). En plus, avec HExécuteRequêteSQL ne pas
oublier le paramètre hRequeteSansCorrection afin d'éviter que Windev
interprète la requête.

Salutations
Mat





Merci Mat pour toute ces précisions,

Je vais tester ces pistes et me répondre si je trouve une solution.

Pour la petite histoire, j'ai commandé l'accès natif à Oracle. ça devrait
résoudre tout ça.

Pyfux
Avatar
pyfux
"pyfux" a écrit dans le message de news:
48b7c93f$0$6913$
Bonjour à tous,

J'exécute une requête SQL sur une base Oracle à travers une connexion ODBC
par OLEDB qui ne me renvoi aucun enregistrement alors que je devrais en
avoir > 1000 :

SELECT * FROM SORDERQ WHERE SORDERQ.SOHNUM_0 IN ( SELECT SOHNUM_0 FROM
SORDER WHERE SORDER.CREDAT_0 > '20080801' )

La table maître est: SORDER avec comme clef primaire: SOHNUM_0
La sous-table est: SORDERQ avec comme clef externe: SOHNUM_0

Par contre cette requête fonctionne:
SELECT * FROM GROUPEDMD.SORDERQ WHERE SORDERQ.SOHNUM_0 IN (
'CVE0806GEN0877' )

Donc j'en conclue que la commande SQL est mal interprété. Non ?

Faut-il que j'achète l'accès natif à Oracle sachant que cette même requête
sous VBA fonctionne bien (ADO 2.8) ?

Merci pour vos réponses.

PyFux





Bonjour,

Grâce à la remarque de Mat concernant le paramètre hRequêteSansCorrection de
la fonction HExécuteRequêteSQL, je vous confirme que cela résoud mon
problème d'interprétation de la requête suivante:

SELECT * FROM SORDERQ WHERE SORDERQ.SOHNUM_0 IN ( SELECT SOHNUM_0 FROM
SORDER WHERE SORDER.CREDAT_0 > '20080801' )

Les tables SORDER et SORDERQ étant hébergé sur un SGBDR Oracle 9i.

L'ordre doit être:
HExécuteRequêteSQL( sdSData, MaConnexion1, hRequêteSansCorrection,sSQL)



Merci à tous.



Pyfyx