Pb avec une requete dans Excel ...

Le
SuperGolgoth
Bonjour a tous, voici le pb :
J'ai une classeur excel alimenté par une macro contenant une requete
SQL ataquant une base SQL2000
Voici la macro/requete :
' Mise a jour du tableau - Requete SQL !!!
SQLString = "SELECT"
SQLString = SQLString + " opheadm.region AS 'ITC', "
SQLString = SQLString + " opheadm.transaction_anals3 AS 'REGION', "
SQLString = SQLString + " opdetm.product_group_a AS 'FAMILLE',
"
SQLString = SQLString + " opdetm.product_group_b AS 'SOUS
FAMILLE', "
SQLString = SQLString + " opdetm.product AS 'CODE
PRODUIT', "
SQLString = SQLString + " opdetm.long_description AS 'LIBELLE
PRODUIT', "
SQLString = SQLString + " opdetm.despatched_qty AS 'QUANTITE',
"
SQLString = SQLString + " opdetm.val AS 'VALEUR', "
SQLString = SQLString + " opdetm.cost_of_sale AS 'COUT', "
SQLString = SQLString + " opheadm.invoice_date AS 'DATE
FACT', "
SQLString = SQLString + " opheadm.invoice_customer AS 'CLIENT
FAC', "
SQLString = SQLString + " opheadm.customer AS 'CLIENT
LIV', "
SQLString = SQLString + " opheadm.invoice_no AS 'N° FACT',
"
SQLString = SQLString + " opheadm.alpha AS 'NOM
REDUIT', "
SQLString = SQLString + " opheadm.address1 AS 'TITRE', "
SQLString = SQLString + " opheadm.address2 AS 'ADRESSE2',
"
SQLString = SQLString + " opheadm.address3 AS 'ADRESSE3',
"
SQLString = SQLString + " opheadm.address4 AS 'ADRESSE4',
"
SQLString = SQLString + " opheadm.address5 AS 'ADRESSE5',
"
SQLString = SQLString + " opdetm.order_no AS 'N° ORDER'
"
SQLString = SQLString + "FROM "
SQLString = SQLString + " scheme.opdetm opdetm, "
SQLString = SQLString + " scheme.opheadm opheadm "
SQLString = SQLString + "WHERE "
SQLString = SQLString + " opdetm.order_no = opheadm.order_no"
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2").FormulaR1C1 + " AND " + Range("E3").FormulaR1C1
SQLString = SQLString + " AND opdetm.product <> ''"

' Execution de la requete
With ActiveSheet.QueryTables.Add _
(Connection:="ODBC;DSN=[DSn utilisateur];UID=sa;PWD=;", _
Destination:=Range("A5"), Sql:=SQLString)
.Refresh (False)
End With

E2 et E3 sont bien entendu des dates
Le truc c'est que quand E2 et E3 sont (par exemple) = 02/02/2004
je ne recupere RIEN de ma base, alors qu'avec un requeteur tout bete
genre WinSql j'ai une trentaine d'enrs
Quand E2 = 15/03/2004, les enrs recupérés commencent au 17/03/2004
Quand E2 = 16/03/2004, les enrs commencent au 18/03/2004
j'ai comme l'impression qu'il interprete mal mes dates mais
comment en etre sur et comment resoudre ce pb
Merci

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Life is simple :
Eat, sleep, and surf the net
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
SuperGolgoth
Le #11720361
J'ai des nouvelles ...
Quand je laisse tel quel, j'obtiens un resultat comme suit :
AND opheadm.invoice_date BETWEEN 38079 AND 38079
(fatalement, la zone SQL2000 est au format date, donc incompatible !)
et quand je mets en E2 et E3 une date sous la forme texte
E2 = ''02/04/2004'
E3 = ''02/04/2004'
ca donne ca :
AND opheadm.invoice_date BETWEEN '02/04/2004' AND '02/04/2004'
ET CA MARCHE ...
Alors, comment faire en sorte que le fait de taper la date sous la
forme 02/04/2004 (sans les ') me donne bien une date dans la requete et
non pas son equivalent numerique ...?
Merci a tous de votre aide



SuperGolgoth vient de nous annoncer :
Bonjour a tous, voici le pb :
J'ai une classeur excel alimenté par une macro contenant une requete SQL
ataquant une base SQL2000 ...
Voici la macro/requete :
' Mise a jour du tableau - Requete SQL !!!
SQLString = "SELECT"
SQLString = SQLString + " opheadm.region AS 'ITC', "
SQLString = SQLString + " opheadm.transaction_anals3 AS 'REGION', "
SQLString = SQLString + " opdetm.product_group_a AS 'FAMILLE', "
SQLString = SQLString + " opdetm.product_group_b AS 'SOUS FAMILLE', "
SQLString = SQLString + " opdetm.product AS 'CODE PRODUIT', "
SQLString = SQLString + " opdetm.long_description AS 'LIBELLE
PRODUIT', "
SQLString = SQLString + " opdetm.despatched_qty AS 'QUANTITE', "
SQLString = SQLString + " opdetm.val AS 'VALEUR', "
SQLString = SQLString + " opdetm.cost_of_sale AS 'COUT', "
SQLString = SQLString + " opheadm.invoice_date AS 'DATE FACT', "
SQLString = SQLString + " opheadm.invoice_customer AS 'CLIENT FAC', "
SQLString = SQLString + " opheadm.customer AS 'CLIENT LIV', "
SQLString = SQLString + " opheadm.invoice_no AS 'N° FACT', "
SQLString = SQLString + " opheadm.alpha AS 'NOM REDUIT', "
SQLString = SQLString + " opheadm.address1 AS 'TITRE', "
SQLString = SQLString + " opheadm.address2 AS 'ADRESSE2', "
SQLString = SQLString + " opheadm.address3 AS 'ADRESSE3', "
SQLString = SQLString + " opheadm.address4 AS 'ADRESSE4', "
SQLString = SQLString + " opheadm.address5 AS 'ADRESSE5', "
SQLString = SQLString + " opdetm.order_no AS 'N° ORDER' "
SQLString = SQLString + "FROM "
SQLString = SQLString + " scheme.opdetm opdetm, "
SQLString = SQLString + " scheme.opheadm opheadm "
SQLString = SQLString + "WHERE "
SQLString = SQLString + " opdetm.order_no = opheadm.order_no"
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2").FormulaR1C1 + " AND " + Range("E3").FormulaR1C1
SQLString = SQLString + " AND opdetm.product <> ''"

' Execution de la requete
With ActiveSheet.QueryTables.Add _
(Connection:="ODBC;DSN=[DSn utilisateur];UID=sa;PWD=;", _
Destination:=Range("A5"), Sql:=SQLString)
.Refresh (False)
End With

E2 et E3 sont bien entendu des dates ...
Le truc c'est que quand E2 et E3 sont (par exemple) = 02/02/2004
je ne recupere RIEN de ma base, alors qu'avec un requeteur tout bete genre
WinSql j'ai une trentaine d'enrs ...
Quand E2 = 15/03/2004, les enrs recupérés commencent au 17/03/2004
Quand E2 = 16/03/2004, les enrs commencent au 18/03/2004
... j'ai comme l'impression qu'il interprete mal mes dates ... mais comment
en etre sur et comment resoudre ce pb ...
Merci



--
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Life is simple :
Eat, sleep, and surf the net
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Michel Pierron
Le #11720351
Bonjour SuperGolgoth;
As- tu simplement essayé:
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2") + " AND " + Range("E3")

Sinon, tu peux également essayer:
Range("E2").Text + " AND " + Range("E3").Text

MP

"SuperGolgoth" news:
J'ai des nouvelles ...
Quand je laisse tel quel, j'obtiens un resultat comme suit :
AND opheadm.invoice_date BETWEEN 38079 AND 38079
(fatalement, la zone SQL2000 est au format date, donc incompatible !)
et quand je mets en E2 et E3 une date sous la forme texte
E2 = ''02/04/2004'
E3 = ''02/04/2004'
ca donne ca :
AND opheadm.invoice_date BETWEEN '02/04/2004' AND '02/04/2004'
ET CA MARCHE ...
Alors, comment faire en sorte que le fait de taper la date sous la
forme 02/04/2004 (sans les ') me donne bien une date dans la requete et
non pas son equivalent numerique ...?
Merci a tous de votre aide



SuperGolgoth vient de nous annoncer :
> Bonjour a tous, voici le pb :
> J'ai une classeur excel alimenté par une macro contenant une requete SQL
> ataquant une base SQL2000 ...
> Voici la macro/requete :
> ' Mise a jour du tableau - Requete SQL !!!
> SQLString = "SELECT"
> SQLString = SQLString + " opheadm.region AS 'ITC', "
> SQLString = SQLString + " opheadm.transaction_anals3 AS 'REGION', "
> SQLString = SQLString + " opdetm.product_group_a AS 'FAMILLE', "
> SQLString = SQLString + " opdetm.product_group_b AS 'SOUS FAMILLE', "
> SQLString = SQLString + " opdetm.product AS 'CODE PRODUIT', "
> SQLString = SQLString + " opdetm.long_description AS 'LIBELLE
> PRODUIT', "
> SQLString = SQLString + " opdetm.despatched_qty AS 'QUANTITE', "
> SQLString = SQLString + " opdetm.val AS 'VALEUR', "
> SQLString = SQLString + " opdetm.cost_of_sale AS 'COUT', "
> SQLString = SQLString + " opheadm.invoice_date AS 'DATE FACT', "
> SQLString = SQLString + " opheadm.invoice_customer AS 'CLIENT FAC', "
> SQLString = SQLString + " opheadm.customer AS 'CLIENT LIV', "
> SQLString = SQLString + " opheadm.invoice_no AS 'N° FACT', "
> SQLString = SQLString + " opheadm.alpha AS 'NOM REDUIT', "
> SQLString = SQLString + " opheadm.address1 AS 'TITRE', "
> SQLString = SQLString + " opheadm.address2 AS 'ADRESSE2', "
> SQLString = SQLString + " opheadm.address3 AS 'ADRESSE3', "
> SQLString = SQLString + " opheadm.address4 AS 'ADRESSE4', "
> SQLString = SQLString + " opheadm.address5 AS 'ADRESSE5', "
> SQLString = SQLString + " opdetm.order_no AS 'N° ORDER' "
> SQLString = SQLString + "FROM "
> SQLString = SQLString + " scheme.opdetm opdetm, "
> SQLString = SQLString + " scheme.opheadm opheadm "
> SQLString = SQLString + "WHERE "
> SQLString = SQLString + " opdetm.order_no = opheadm.order_no"
> SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
> Range("E2").FormulaR1C1 + " AND " + Range("E3").FormulaR1C1
> SQLString = SQLString + " AND opdetm.product <> ''"
>
> ' Execution de la requete
> With ActiveSheet.QueryTables.Add _
> (Connection:="ODBC;DSN=[DSn utilisateur];UID=sa;PWD=;", _
> Destination:=Range("A5"), Sql:=SQLString)
> .Refresh (False)
> End With
>
> E2 et E3 sont bien entendu des dates ...
> Le truc c'est que quand E2 et E3 sont (par exemple) = 02/02/2004
> je ne recupere RIEN de ma base, alors qu'avec un requeteur tout bete genre
> WinSql j'ai une trentaine d'enrs ...
> Quand E2 = 15/03/2004, les enrs recupérés commencent au 17/03/2004
> Quand E2 = 16/03/2004, les enrs commencent au 18/03/2004
> ... j'ai comme l'impression qu'il interprete mal mes dates ... mais comment
> en etre sur et comment resoudre ce pb ...
> Merci

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Life is simple :
Eat, sleep, and surf the net
~~~~~~~~~~~~~~~~~~~~~~~~~~~



SuperGolgoth
Le #11720331
Excellent ... la reponse etait :
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN '" +
Range("E2").Text + "' AND '" + Range("E3").Text + "'"
Il faut rajouter les '
Merci encore


Michel Pierron a émis l'idée suivante :
Bonjour SuperGolgoth;
As- tu simplement essayé:
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2") + " AND " + Range("E3")

Sinon, tu peux également essayer:
Range("E2").Text + " AND " + Range("E3").Text

MP

"SuperGolgoth" news:
J'ai des nouvelles ...
Quand je laisse tel quel, j'obtiens un resultat comme suit :
AND opheadm.invoice_date BETWEEN 38079 AND 38079
(fatalement, la zone SQL2000 est au format date, donc incompatible !)
et quand je mets en E2 et E3 une date sous la forme texte
E2 = ''02/04/2004'
E3 = ''02/04/2004'
ca donne ca :
AND opheadm.invoice_date BETWEEN '02/04/2004' AND '02/04/2004'
ET CA MARCHE ...
Alors, comment faire en sorte que le fait de taper la date sous la
forme 02/04/2004 (sans les ') me donne bien une date dans la requete et
non pas son equivalent numerique ...?
Merci a tous de votre aide



SuperGolgoth vient de nous annoncer :
Bonjour a tous, voici le pb :
J'ai une classeur excel alimenté par une macro contenant une requete SQL
ataquant une base SQL2000 ...
Voici la macro/requete :
' Mise a jour du tableau - Requete SQL !!!
SQLString = "SELECT"
SQLString = SQLString + " opheadm.region AS 'ITC', "
SQLString = SQLString + " opheadm.transaction_anals3 AS 'REGION', "
SQLString = SQLString + " opdetm.product_group_a AS 'FAMILLE', "
SQLString = SQLString + " opdetm.product_group_b AS 'SOUS FAMILLE',
" SQLString = SQLString + " opdetm.product AS 'CODE
PRODUIT', " SQLString = SQLString + " opdetm.long_description AS
'LIBELLE PRODUIT', "
SQLString = SQLString + " opdetm.despatched_qty AS 'QUANTITE', "
SQLString = SQLString + " opdetm.val AS 'VALEUR', "
SQLString = SQLString + " opdetm.cost_of_sale AS 'COUT', "
SQLString = SQLString + " opheadm.invoice_date AS 'DATE FACT', "
SQLString = SQLString + " opheadm.invoice_customer AS 'CLIENT FAC', "
SQLString = SQLString + " opheadm.customer AS 'CLIENT LIV', "
SQLString = SQLString + " opheadm.invoice_no AS 'N° FACT', "
SQLString = SQLString + " opheadm.alpha AS 'NOM REDUIT', "
SQLString = SQLString + " opheadm.address1 AS 'TITRE', "
SQLString = SQLString + " opheadm.address2 AS 'ADRESSE2', "
SQLString = SQLString + " opheadm.address3 AS 'ADRESSE3', "
SQLString = SQLString + " opheadm.address4 AS 'ADRESSE4', "
SQLString = SQLString + " opheadm.address5 AS 'ADRESSE5', "
SQLString = SQLString + " opdetm.order_no AS 'N° ORDER' "
SQLString = SQLString + "FROM "
SQLString = SQLString + " scheme.opdetm opdetm, "
SQLString = SQLString + " scheme.opheadm opheadm "
SQLString = SQLString + "WHERE "
SQLString = SQLString + " opdetm.order_no = opheadm.order_no"
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2").FormulaR1C1 + " AND " + Range("E3").FormulaR1C1
SQLString = SQLString + " AND opdetm.product <> ''"

' Execution de la requete
With ActiveSheet.QueryTables.Add _
(Connection:="ODBC;DSN=[DSn utilisateur];UID=sa;PWD=;", _
Destination:=Range("A5"), Sql:=SQLString)
.Refresh (False)
End With

E2 et E3 sont bien entendu des dates ...
Le truc c'est que quand E2 et E3 sont (par exemple) = 02/02/2004
je ne recupere RIEN de ma base, alors qu'avec un requeteur tout bete genre
WinSql j'ai une trentaine d'enrs ...
Quand E2 = 15/03/2004, les enrs recupérés commencent au 17/03/2004
Quand E2 = 16/03/2004, les enrs commencent au 18/03/2004
... j'ai comme l'impression qu'il interprete mal mes dates ... mais comment
en etre sur et comment resoudre ce pb ...
Merci



--
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Life is simple :
Eat, sleep, and surf the net
~~~~~~~~~~~~~~~~~~~~~~~~~~~





--
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Life is simple :
Eat, sleep, and surf the net
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Paul V.
Le #11720321
Bonjour,

Les ' sont indispensable dans ton string d'instruction sql et ne peuvent pas
provenir de la valeur des cellules.
cela devrait marcher si tu utilises :

SQLString = SQLString + " AND opheadm.invoice_date BETWEEN '" +
Range("E2") + "' AND '" + Range("E3") & "'"

remarque les signes ' après between, devant et derrière and et à la fin.
Cela devrait marcher.

Si tu utilises "FormulaR1C1", tu dois ensuite retranférer en date comme
ci-dessous :

CDate(Range("E2").FormulaR1C1)
mais dans tous les cas ne pas oublier de mettre les signes '.

HTH

Paul V

SuperGolgoth wrote:
J'ai des nouvelles ...
Quand je laisse tel quel, j'obtiens un resultat comme suit :
AND opheadm.invoice_date BETWEEN 38079 AND 38079
(fatalement, la zone SQL2000 est au format date, donc incompatible !)
et quand je mets en E2 et E3 une date sous la forme texte
E2 = ''02/04/2004'
E3 = ''02/04/2004'
ca donne ca :
AND opheadm.invoice_date BETWEEN '02/04/2004' AND '02/04/2004'
ET CA MARCHE ...
Alors, comment faire en sorte que le fait de taper la date sous la
forme 02/04/2004 (sans les ') me donne bien une date dans la requete
et non pas son equivalent numerique ...?
Merci a tous de votre aide



SuperGolgoth vient de nous annoncer :
Bonjour a tous, voici le pb :
J'ai une classeur excel alimenté par une macro contenant une requete
SQL ataquant une base SQL2000 ...
Voici la macro/requete :
' Mise a jour du tableau - Requete SQL !!!
SQLString = "SELECT"
SQLString = SQLString + " opheadm.region AS 'ITC', "
SQLString = SQLString + " opheadm.transaction_anals3 AS
'REGION', " SQLString = SQLString + " opdetm.product_group_a
AS 'FAMILLE', " SQLString = SQLString + " opdetm.product_group_b
AS 'SOUS FAMILLE', " SQLString = SQLString + " opdetm.product
AS 'CODE PRODUIT', " SQLString = SQLString + "
opdetm.long_description AS 'LIBELLE
PRODUIT', "
SQLString = SQLString + " opdetm.despatched_qty AS
'QUANTITE', " SQLString = SQLString + " opdetm.val
AS 'VALEUR', " SQLString = SQLString + " opdetm.cost_of_sale
AS 'COUT', " SQLString = SQLString + " opheadm.invoice_date
AS 'DATE FACT', " SQLString = SQLString + "
opheadm.invoice_customer AS 'CLIENT FAC', " SQLString >> SQLString + " opheadm.customer AS 'CLIENT LIV', "
SQLString = SQLString + " opheadm.invoice_no AS 'N°
FACT', " SQLString = SQLString + " opheadm.alpha AS
'NOM REDUIT', " SQLString = SQLString + " opheadm.address1
AS 'TITRE', " SQLString = SQLString + " opheadm.address2
AS 'ADRESSE2', " SQLString = SQLString + " opheadm.address3
AS 'ADRESSE3', " SQLString = SQLString + " opheadm.address4
AS 'ADRESSE4', " SQLString = SQLString + " opheadm.address5
AS 'ADRESSE5', " SQLString = SQLString + " opdetm.order_no
AS 'N° ORDER' " SQLString = SQLString + "FROM " SQLString >> SQLString + " scheme.opdetm opdetm, " SQLString = SQLString + "
scheme.opheadm opheadm " SQLString = SQLString + "WHERE "
SQLString = SQLString + " opdetm.order_no = opheadm.order_no"
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2").FormulaR1C1 + " AND " + Range("E3").FormulaR1C1
SQLString = SQLString + " AND opdetm.product <> ''"

' Execution de la requete
With ActiveSheet.QueryTables.Add _
(Connection:="ODBC;DSN=[DSn utilisateur];UID=sa;PWD=;", _
Destination:=Range("A5"), Sql:=SQLString)
.Refresh (False)
End With

E2 et E3 sont bien entendu des dates ...
Le truc c'est que quand E2 et E3 sont (par exemple) = 02/02/2004
je ne recupere RIEN de ma base, alors qu'avec un requeteur tout bete
genre WinSql j'ai une trentaine d'enrs ...
Quand E2 = 15/03/2004, les enrs recupérés commencent au 17/03/2004
Quand E2 = 16/03/2004, les enrs commencent au 18/03/2004
... j'ai comme l'impression qu'il interprete mal mes dates ... mais
comment en etre sur et comment resoudre ce pb ...
Merci




SuperGolgoth
Le #11720311
Thank's


Paul V. a formulé la demande :
Bonjour,

Les ' sont indispensable dans ton string d'instruction sql et ne peuvent pas
provenir de la valeur des cellules.
cela devrait marcher si tu utilises :

SQLString = SQLString + " AND opheadm.invoice_date BETWEEN '" +
Range("E2") + "' AND '" + Range("E3") & "'"

remarque les signes ' après between, devant et derrière and et à la fin.
Cela devrait marcher.

Si tu utilises "FormulaR1C1", tu dois ensuite retranférer en date comme
ci-dessous :

CDate(Range("E2").FormulaR1C1)
mais dans tous les cas ne pas oublier de mettre les signes '.

HTH

Paul V

SuperGolgoth wrote:
J'ai des nouvelles ...
Quand je laisse tel quel, j'obtiens un resultat comme suit :
AND opheadm.invoice_date BETWEEN 38079 AND 38079
(fatalement, la zone SQL2000 est au format date, donc incompatible !)
et quand je mets en E2 et E3 une date sous la forme texte
E2 = ''02/04/2004'
E3 = ''02/04/2004'
ca donne ca :
AND opheadm.invoice_date BETWEEN '02/04/2004' AND '02/04/2004'
ET CA MARCHE ...
Alors, comment faire en sorte que le fait de taper la date sous la
forme 02/04/2004 (sans les ') me donne bien une date dans la requete
et non pas son equivalent numerique ...?
Merci a tous de votre aide



SuperGolgoth vient de nous annoncer :
Bonjour a tous, voici le pb :
J'ai une classeur excel alimenté par une macro contenant une requete
SQL ataquant une base SQL2000 ...
Voici la macro/requete :
' Mise a jour du tableau - Requete SQL !!!
SQLString = "SELECT"
SQLString = SQLString + " opheadm.region AS 'ITC', "
SQLString = SQLString + " opheadm.transaction_anals3 AS
'REGION', " SQLString = SQLString + " opdetm.product_group_a
AS 'FAMILLE', " SQLString = SQLString + " opdetm.product_group_b
AS 'SOUS FAMILLE', " SQLString = SQLString + " opdetm.product
AS 'CODE PRODUIT', " SQLString = SQLString + "
opdetm.long_description AS 'LIBELLE
PRODUIT', "
SQLString = SQLString + " opdetm.despatched_qty AS
'QUANTITE', " SQLString = SQLString + " opdetm.val
AS 'VALEUR', " SQLString = SQLString + " opdetm.cost_of_sale
AS 'COUT', " SQLString = SQLString + " opheadm.invoice_date
AS 'DATE FACT', " SQLString = SQLString + "
opheadm.invoice_customer AS 'CLIENT FAC', " SQLString >>> SQLString + " opheadm.customer AS 'CLIENT LIV', "
SQLString = SQLString + " opheadm.invoice_no AS 'N°
FACT', " SQLString = SQLString + " opheadm.alpha AS
'NOM REDUIT', " SQLString = SQLString + " opheadm.address1
AS 'TITRE', " SQLString = SQLString + " opheadm.address2
AS 'ADRESSE2', " SQLString = SQLString + " opheadm.address3
AS 'ADRESSE3', " SQLString = SQLString + " opheadm.address4
AS 'ADRESSE4', " SQLString = SQLString + " opheadm.address5
AS 'ADRESSE5', " SQLString = SQLString + " opdetm.order_no
AS 'N° ORDER' " SQLString = SQLString + "FROM " SQLString >>> SQLString + " scheme.opdetm opdetm, " SQLString = SQLString + "
scheme.opheadm opheadm " SQLString = SQLString + "WHERE "
SQLString = SQLString + " opdetm.order_no = opheadm.order_no"
SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
Range("E2").FormulaR1C1 + " AND " + Range("E3").FormulaR1C1
SQLString = SQLString + " AND opdetm.product <> ''"

' Execution de la requete
With ActiveSheet.QueryTables.Add _
(Connection:="ODBC;DSN=[DSn utilisateur];UID=sa;PWD=;", _
Destination:=Range("A5"), Sql:=SQLString)
.Refresh (False)
End With

E2 et E3 sont bien entendu des dates ...
Le truc c'est que quand E2 et E3 sont (par exemple) = 02/02/2004
je ne recupere RIEN de ma base, alors qu'avec un requeteur tout bete
genre WinSql j'ai une trentaine d'enrs ...
Quand E2 = 15/03/2004, les enrs recupérés commencent au 17/03/2004
Quand E2 = 16/03/2004, les enrs commencent au 18/03/2004
... j'ai comme l'impression qu'il interprete mal mes dates ... mais
comment en etre sur et comment resoudre ce pb ...
Merci







--
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Life is simple :
Eat, sleep, and surf the net
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Michel Pierron
Le #11720291
Salut Paul;
ça bas de soie comme dirait JPS.
MP

"Paul V." news:
Bonjour,

Les ' sont indispensable dans ton string d'instruction sql et ne peuvent pas
provenir de la valeur des cellules.
cela devrait marcher si tu utilises :

SQLString = SQLString + " AND opheadm.invoice_date BETWEEN '" +
Range("E2") + "' AND '" + Range("E3") & "'"

remarque les signes ' après between, devant et derrière and et à la fin.
Cela devrait marcher.

Si tu utilises "FormulaR1C1", tu dois ensuite retranférer en date comme
ci-dessous :

CDate(Range("E2").FormulaR1C1)
mais dans tous les cas ne pas oublier de mettre les signes '.

HTH

Paul V

SuperGolgoth wrote:
> J'ai des nouvelles ...
> Quand je laisse tel quel, j'obtiens un resultat comme suit :
> AND opheadm.invoice_date BETWEEN 38079 AND 38079
> (fatalement, la zone SQL2000 est au format date, donc incompatible !)
> et quand je mets en E2 et E3 une date sous la forme texte
> E2 = ''02/04/2004'
> E3 = ''02/04/2004'
> ca donne ca :
> AND opheadm.invoice_date BETWEEN '02/04/2004' AND '02/04/2004'
> ET CA MARCHE ...
> Alors, comment faire en sorte que le fait de taper la date sous la
> forme 02/04/2004 (sans les ') me donne bien une date dans la requete
> et non pas son equivalent numerique ...?
> Merci a tous de votre aide
>
>
>
> SuperGolgoth vient de nous annoncer :
>> Bonjour a tous, voici le pb :
>> J'ai une classeur excel alimenté par une macro contenant une requete
>> SQL ataquant une base SQL2000 ...
>> Voici la macro/requete :
>> ' Mise a jour du tableau - Requete SQL !!!
>> SQLString = "SELECT"
>> SQLString = SQLString + " opheadm.region AS 'ITC', "
>> SQLString = SQLString + " opheadm.transaction_anals3 AS
>> 'REGION', " SQLString = SQLString + " opdetm.product_group_a
>> AS 'FAMILLE', " SQLString = SQLString + " opdetm.product_group_b
>> AS 'SOUS FAMILLE', " SQLString = SQLString + " opdetm.product
>> AS 'CODE PRODUIT', " SQLString = SQLString + "
>> opdetm.long_description AS 'LIBELLE
>> PRODUIT', "
>> SQLString = SQLString + " opdetm.despatched_qty AS
>> 'QUANTITE', " SQLString = SQLString + " opdetm.val
>> AS 'VALEUR', " SQLString = SQLString + " opdetm.cost_of_sale
>> AS 'COUT', " SQLString = SQLString + " opheadm.invoice_date
>> AS 'DATE FACT', " SQLString = SQLString + "
>> opheadm.invoice_customer AS 'CLIENT FAC', " SQLString > >> SQLString + " opheadm.customer AS 'CLIENT LIV', "
>> SQLString = SQLString + " opheadm.invoice_no AS 'N°
>> FACT', " SQLString = SQLString + " opheadm.alpha AS
>> 'NOM REDUIT', " SQLString = SQLString + " opheadm.address1
>> AS 'TITRE', " SQLString = SQLString + " opheadm.address2
>> AS 'ADRESSE2', " SQLString = SQLString + " opheadm.address3
>> AS 'ADRESSE3', " SQLString = SQLString + " opheadm.address4
>> AS 'ADRESSE4', " SQLString = SQLString + " opheadm.address5
>> AS 'ADRESSE5', " SQLString = SQLString + " opdetm.order_no
>> AS 'N° ORDER' " SQLString = SQLString + "FROM " SQLString > >> SQLString + " scheme.opdetm opdetm, " SQLString = SQLString + "
>> scheme.opheadm opheadm " SQLString = SQLString + "WHERE "
>> SQLString = SQLString + " opdetm.order_no = opheadm.order_no"
>> SQLString = SQLString + " AND opheadm.invoice_date BETWEEN " +
>> Range("E2").FormulaR1C1 + " AND " + Range("E3").FormulaR1C1
>> SQLString = SQLString + " AND opdetm.product <> ''"
>>
>> ' Execution de la requete
>> With ActiveSheet.QueryTables.Add _
>> (Connection:="ODBC;DSN=[DSn utilisateur];UID=sa;PWD=;", _
>> Destination:=Range("A5"), Sql:=SQLString)
>> .Refresh (False)
>> End With
>>
>> E2 et E3 sont bien entendu des dates ...
>> Le truc c'est que quand E2 et E3 sont (par exemple) = 02/02/2004
>> je ne recupere RIEN de ma base, alors qu'avec un requeteur tout bete
>> genre WinSql j'ai une trentaine d'enrs ...
>> Quand E2 = 15/03/2004, les enrs recupérés commencent au 17/03/2004
>> Quand E2 = 16/03/2004, les enrs commencent au 18/03/2004
>> ... j'ai comme l'impression qu'il interprete mal mes dates ... mais
>> comment en etre sur et comment resoudre ce pb ...
>> Merci




Publicité
Poster une réponse
Anonyme