La première chose à faire serait d'afficher le résultat sSQL dans u ne boîte
de dialogue ou dans la fenêtre de debuggage avec Debug.Print et de la
comparer ensuite avec l'autre.
--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web:http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.
"pascal58" wrote in message
news:
Bonjour,
En VBA je construit une chaine contenant du SQL. Le recordset ne
renvoie rien. Par contre si je colle la chaine dans l'éditeur de
requête dans Access, il retourne bien les 21 lignes attendues.
Quelqu'un a t'il une idée ?
Grand merci !
Code VBA (les paramètres/critères sont des contrôles du formulaire)
Dim sSql As String
Dim Rst As New ADODB.Recordset
Dim CN As ADODB.Connection
Set CN = CurrentProject.Connection
Dim j1 As Integer, j2 As Integer
Dim I As Integer, L As Integer, C As Integer
j1 = (Val(TxtS1) - 1) * 7
j2 = Val(TxtS2) * 7
sSql = "SELECT DatePart('w',[quot_date],2,2) AS J,
Count(DatePart('w',[quot_date],2,2)) AS nJ,
Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ, Sum(Tbl_D_Hebdo.Heb_Qtite) AS
QS, Tbl_D_Implementations.Cnl_Id" _
& " FROM ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id" _
& " WHERE (DatePart('ww',[Quot_Date],2,2)=[heb_sem])" _
& " AND (Tbl_D_Quotidien.Quot_Type<>3)" _
& " AND (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+" & j1 & ")" _
& " AND (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+" & j2 & ")" _
& " AND (Year([Quot_Date])>=" & Txt_An & ")" _
& " AND (Tbl_D_Actions.Act_Cnl_Dif Like '" & Lst_Diff & "')" _
& " AND (Tbl_D_Actions.Act_Saison Like '" & Lst_Sais & "')" _
& " GROUP BY Tbl_D_Canaux.Cnl_Desc, DatePart('w',[quot_date],2,2) ,
Tbl_D_Implementations.Cnl_Id" _
& " ORDER BY Tbl_D_Implementations.Cnl_Id, DatePart('w',
[quot_date],2,2);"
Rst.Open sSql, CN, adOpenStatic
...
le SQL :
SELECT DatePart('w',[quot_date],2,2) AS J, Count(DatePart('w',
[quot_date],2,2)) AS nJ, Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ,
Sum(Tbl_D_Hebdo.Heb_Qtite) AS QS, Tbl_D_Implementations.Cnl_Id FROM
((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id WHERE
(DatePart('ww',[Quot_Date],2,2)=[heb_sem]) AND
(Tbl_D_Quotidien.Quot_Type<>3) AND
(Tbl_D_Quotidien.Quot_Date>=[imp_dep]+14) AND
(Tbl_D_Quotidien.Quot_Date<=[imp_dep]+42) AND
(Year([Quot_Date])> 08) AND (Tbl_D_Actions.Act_Cnl_Dif Like '*') AND
(Tbl_D_Actions.Act_Saison Like '*') GROUP BY Tbl_D_Canaux.Cnl_Desc,
DatePart('w',[quot_date],2,2), Tbl_D_Implementations.Cnl_Id ORDER BY
Tbl_D_Implementations.Cnl_Id, DatePart('w',[quot_date],2,2);
Le résultat dans Access
J nJ QJ QS Canal
1 151 23378 84388 1
2 161 23264 110992 1
3 158 22329 119655 1
4 145 17168 110176 1
5 151 14696 115829 1
6 147 7684 125032 1
7 150 3479 125911 1
1 150 5669 23599 2
2 160 5699 29873 2
3 159 5581 33114 2
4 146 4524 32698 2
5 151 3924 32912 2
6 147 2609 35287 2
7 150 2490 35403 2
1 151 14569 56784 3
2 161 18302 77840 3
3 158 15790 86973 3
4 145 13292 83518 3
5 151 10154 82428 3
6 147 3078 90267 3
7 150 2695 91042 3
La première chose à faire serait d'afficher le résultat sSQL dans u ne boîte
de dialogue ou dans la fenêtre de debuggage avec Debug.Print et de la
comparer ensuite avec l'autre.
--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web:http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.
"pascal58" <pascal.camb...@gmail.com> wrote in message
news:8e9f2060-2b7f-4a02-bdf6-59208413bb36@t21g2000yqg.googlegroups.com...
Bonjour,
En VBA je construit une chaine contenant du SQL. Le recordset ne
renvoie rien. Par contre si je colle la chaine dans l'éditeur de
requête dans Access, il retourne bien les 21 lignes attendues.
Quelqu'un a t'il une idée ?
Grand merci !
Code VBA (les paramètres/critères sont des contrôles du formulaire)
Dim sSql As String
Dim Rst As New ADODB.Recordset
Dim CN As ADODB.Connection
Set CN = CurrentProject.Connection
Dim j1 As Integer, j2 As Integer
Dim I As Integer, L As Integer, C As Integer
j1 = (Val(TxtS1) - 1) * 7
j2 = Val(TxtS2) * 7
sSql = "SELECT DatePart('w',[quot_date],2,2) AS J,
Count(DatePart('w',[quot_date],2,2)) AS nJ,
Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ, Sum(Tbl_D_Hebdo.Heb_Qtite) AS
QS, Tbl_D_Implementations.Cnl_Id" _
& " FROM ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id" _
& " WHERE (DatePart('ww',[Quot_Date],2,2)=[heb_sem])" _
& " AND (Tbl_D_Quotidien.Quot_Type<>3)" _
& " AND (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+" & j1 & ")" _
& " AND (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+" & j2 & ")" _
& " AND (Year([Quot_Date])>=" & Txt_An & ")" _
& " AND (Tbl_D_Actions.Act_Cnl_Dif Like '" & Lst_Diff & "')" _
& " AND (Tbl_D_Actions.Act_Saison Like '" & Lst_Sais & "')" _
& " GROUP BY Tbl_D_Canaux.Cnl_Desc, DatePart('w',[quot_date],2,2) ,
Tbl_D_Implementations.Cnl_Id" _
& " ORDER BY Tbl_D_Implementations.Cnl_Id, DatePart('w',
[quot_date],2,2);"
Rst.Open sSql, CN, adOpenStatic
...
le SQL :
SELECT DatePart('w',[quot_date],2,2) AS J, Count(DatePart('w',
[quot_date],2,2)) AS nJ, Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ,
Sum(Tbl_D_Hebdo.Heb_Qtite) AS QS, Tbl_D_Implementations.Cnl_Id FROM
((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id WHERE
(DatePart('ww',[Quot_Date],2,2)=[heb_sem]) AND
(Tbl_D_Quotidien.Quot_Type<>3) AND
(Tbl_D_Quotidien.Quot_Date>=[imp_dep]+14) AND
(Tbl_D_Quotidien.Quot_Date<=[imp_dep]+42) AND
(Year([Quot_Date])>=2008) AND (Tbl_D_Actions.Act_Cnl_Dif Like '*') AND
(Tbl_D_Actions.Act_Saison Like '*') GROUP BY Tbl_D_Canaux.Cnl_Desc,
DatePart('w',[quot_date],2,2), Tbl_D_Implementations.Cnl_Id ORDER BY
Tbl_D_Implementations.Cnl_Id, DatePart('w',[quot_date],2,2);
Le résultat dans Access
J nJ QJ QS Canal
1 151 23378 84388 1
2 161 23264 110992 1
3 158 22329 119655 1
4 145 17168 110176 1
5 151 14696 115829 1
6 147 7684 125032 1
7 150 3479 125911 1
1 150 5669 23599 2
2 160 5699 29873 2
3 159 5581 33114 2
4 146 4524 32698 2
5 151 3924 32912 2
6 147 2609 35287 2
7 150 2490 35403 2
1 151 14569 56784 3
2 161 18302 77840 3
3 158 15790 86973 3
4 145 13292 83518 3
5 151 10154 82428 3
6 147 3078 90267 3
7 150 2695 91042 3
La première chose à faire serait d'afficher le résultat sSQL dans u ne boîte
de dialogue ou dans la fenêtre de debuggage avec Debug.Print et de la
comparer ensuite avec l'autre.
--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web:http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.
"pascal58" wrote in message
news:
Bonjour,
En VBA je construit une chaine contenant du SQL. Le recordset ne
renvoie rien. Par contre si je colle la chaine dans l'éditeur de
requête dans Access, il retourne bien les 21 lignes attendues.
Quelqu'un a t'il une idée ?
Grand merci !
Code VBA (les paramètres/critères sont des contrôles du formulaire)
Dim sSql As String
Dim Rst As New ADODB.Recordset
Dim CN As ADODB.Connection
Set CN = CurrentProject.Connection
Dim j1 As Integer, j2 As Integer
Dim I As Integer, L As Integer, C As Integer
j1 = (Val(TxtS1) - 1) * 7
j2 = Val(TxtS2) * 7
sSql = "SELECT DatePart('w',[quot_date],2,2) AS J,
Count(DatePart('w',[quot_date],2,2)) AS nJ,
Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ, Sum(Tbl_D_Hebdo.Heb_Qtite) AS
QS, Tbl_D_Implementations.Cnl_Id" _
& " FROM ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id" _
& " WHERE (DatePart('ww',[Quot_Date],2,2)=[heb_sem])" _
& " AND (Tbl_D_Quotidien.Quot_Type<>3)" _
& " AND (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+" & j1 & ")" _
& " AND (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+" & j2 & ")" _
& " AND (Year([Quot_Date])>=" & Txt_An & ")" _
& " AND (Tbl_D_Actions.Act_Cnl_Dif Like '" & Lst_Diff & "')" _
& " AND (Tbl_D_Actions.Act_Saison Like '" & Lst_Sais & "')" _
& " GROUP BY Tbl_D_Canaux.Cnl_Desc, DatePart('w',[quot_date],2,2) ,
Tbl_D_Implementations.Cnl_Id" _
& " ORDER BY Tbl_D_Implementations.Cnl_Id, DatePart('w',
[quot_date],2,2);"
Rst.Open sSql, CN, adOpenStatic
...
le SQL :
SELECT DatePart('w',[quot_date],2,2) AS J, Count(DatePart('w',
[quot_date],2,2)) AS nJ, Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ,
Sum(Tbl_D_Hebdo.Heb_Qtite) AS QS, Tbl_D_Implementations.Cnl_Id FROM
((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id WHERE
(DatePart('ww',[Quot_Date],2,2)=[heb_sem]) AND
(Tbl_D_Quotidien.Quot_Type<>3) AND
(Tbl_D_Quotidien.Quot_Date>=[imp_dep]+14) AND
(Tbl_D_Quotidien.Quot_Date<=[imp_dep]+42) AND
(Year([Quot_Date])> 08) AND (Tbl_D_Actions.Act_Cnl_Dif Like '*') AND
(Tbl_D_Actions.Act_Saison Like '*') GROUP BY Tbl_D_Canaux.Cnl_Desc,
DatePart('w',[quot_date],2,2), Tbl_D_Implementations.Cnl_Id ORDER BY
Tbl_D_Implementations.Cnl_Id, DatePart('w',[quot_date],2,2);
Le résultat dans Access
J nJ QJ QS Canal
1 151 23378 84388 1
2 161 23264 110992 1
3 158 22329 119655 1
4 145 17168 110176 1
5 151 14696 115829 1
6 147 7684 125032 1
7 150 3479 125911 1
1 150 5669 23599 2
2 160 5699 29873 2
3 159 5581 33114 2
4 146 4524 32698 2
5 151 3924 32912 2
6 147 2609 35287 2
7 150 2490 35403 2
1 151 14569 56784 3
2 161 18302 77840 3
3 158 15790 86973 3
4 145 13292 83518 3
5 151 10154 82428 3
6 147 3078 90267 3
7 150 2695 91042 3
Bonjour,
J'ai utilisé SQL Formatterhttp://www.smccall.demon.co.uk/Downloads.htm# SQLFormat
pour transformer votre code SQL en VBA.
Le résultat dans le fichier joint.
C'est plus lisible et si cela peut vous aider...
Bon courage.
"pascal58" a écrit dans le message denews:8e
Bonjour,
En VBA je construit une chaine contenant du SQL. Le recordset ne
renvoie rien. Par contre si je colle la chaine dans l'éditeur de
requête dans Access, il retourne bien les 21 lignes attendues.
Quelqu'un a t'il une idée ?
Grand merci !
Code VBA (les paramètres/critères sont des contrôles du formulaire)
Dim sSql As String
Dim Rst As New ADODB.Recordset
Dim CN As ADODB.Connection
Set CN = CurrentProject.Connection
Dim j1 As Integer, j2 As Integer
Dim I As Integer, L As Integer, C As Integer
j1 = (Val(TxtS1) - 1) * 7
j2 = Val(TxtS2) * 7
sSql = "SELECT DatePart('w',[quot_date],2,2) AS J,
Count(DatePart('w',[quot_date],2,2)) AS nJ,
Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ, Sum(Tbl_D_Hebdo.Heb_Qtite) AS
QS, Tbl_D_Implementations.Cnl_Id" _
& " FROM ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id" _
& " WHERE (DatePart('ww',[Quot_Date],2,2)=[heb_sem])" _
& " AND (Tbl_D_Quotidien.Quot_Type<>3)" _
& " AND (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+" & j1 & ")" _
& " AND (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+" & j2 & ")" _
& " AND (Year([Quot_Date])>=" & Txt_An & ")" _
& " AND (Tbl_D_Actions.Act_Cnl_Dif Like '" & Lst_Diff & "')" _
& " AND (Tbl_D_Actions.Act_Saison Like '" & Lst_Sais & "')" _
& " GROUP BY Tbl_D_Canaux.Cnl_Desc, DatePart('w',[quot_date],2,2) ,
Tbl_D_Implementations.Cnl_Id" _
& " ORDER BY Tbl_D_Implementations.Cnl_Id, DatePart('w',
[quot_date],2,2);"
Rst.Open sSql, CN, adOpenStatic
...
le SQL :
SELECT DatePart('w',[quot_date],2,2) AS J, Count(DatePart('w',
[quot_date],2,2)) AS nJ, Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ,
Sum(Tbl_D_Hebdo.Heb_Qtite) AS QS, Tbl_D_Implementations.Cnl_Id FROM
((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id WHERE
(DatePart('ww',[Quot_Date],2,2)=[heb_sem]) AND
(Tbl_D_Quotidien.Quot_Type<>3) AND
(Tbl_D_Quotidien.Quot_Date>=[imp_dep]+14) AND
(Tbl_D_Quotidien.Quot_Date<=[imp_dep]+42) AND
(Year([Quot_Date])> 08) AND (Tbl_D_Actions.Act_Cnl_Dif Like '*') AND
(Tbl_D_Actions.Act_Saison Like '*') GROUP BY Tbl_D_Canaux.Cnl_Desc,
DatePart('w',[quot_date],2,2), Tbl_D_Implementations.Cnl_Id ORDER BY
Tbl_D_Implementations.Cnl_Id, DatePart('w',[quot_date],2,2);
Bonjour,
J'ai utilisé SQL Formatterhttp://www.smccall.demon.co.uk/Downloads.htm# SQLFormat
pour transformer votre code SQL en VBA.
Le résultat dans le fichier joint.
C'est plus lisible et si cela peut vous aider...
Bon courage.
"pascal58" <pascal.camb...@gmail.com> a écrit dans le message denews:8e 9f2060-2b7f-4a02-bdf6-59208413bb36@t21g2000yqg.googlegroups.com...
Bonjour,
En VBA je construit une chaine contenant du SQL. Le recordset ne
renvoie rien. Par contre si je colle la chaine dans l'éditeur de
requête dans Access, il retourne bien les 21 lignes attendues.
Quelqu'un a t'il une idée ?
Grand merci !
Code VBA (les paramètres/critères sont des contrôles du formulaire)
Dim sSql As String
Dim Rst As New ADODB.Recordset
Dim CN As ADODB.Connection
Set CN = CurrentProject.Connection
Dim j1 As Integer, j2 As Integer
Dim I As Integer, L As Integer, C As Integer
j1 = (Val(TxtS1) - 1) * 7
j2 = Val(TxtS2) * 7
sSql = "SELECT DatePart('w',[quot_date],2,2) AS J,
Count(DatePart('w',[quot_date],2,2)) AS nJ,
Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ, Sum(Tbl_D_Hebdo.Heb_Qtite) AS
QS, Tbl_D_Implementations.Cnl_Id" _
& " FROM ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id" _
& " WHERE (DatePart('ww',[Quot_Date],2,2)=[heb_sem])" _
& " AND (Tbl_D_Quotidien.Quot_Type<>3)" _
& " AND (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+" & j1 & ")" _
& " AND (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+" & j2 & ")" _
& " AND (Year([Quot_Date])>=" & Txt_An & ")" _
& " AND (Tbl_D_Actions.Act_Cnl_Dif Like '" & Lst_Diff & "')" _
& " AND (Tbl_D_Actions.Act_Saison Like '" & Lst_Sais & "')" _
& " GROUP BY Tbl_D_Canaux.Cnl_Desc, DatePart('w',[quot_date],2,2) ,
Tbl_D_Implementations.Cnl_Id" _
& " ORDER BY Tbl_D_Implementations.Cnl_Id, DatePart('w',
[quot_date],2,2);"
Rst.Open sSql, CN, adOpenStatic
...
le SQL :
SELECT DatePart('w',[quot_date],2,2) AS J, Count(DatePart('w',
[quot_date],2,2)) AS nJ, Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ,
Sum(Tbl_D_Hebdo.Heb_Qtite) AS QS, Tbl_D_Implementations.Cnl_Id FROM
((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id WHERE
(DatePart('ww',[Quot_Date],2,2)=[heb_sem]) AND
(Tbl_D_Quotidien.Quot_Type<>3) AND
(Tbl_D_Quotidien.Quot_Date>=[imp_dep]+14) AND
(Tbl_D_Quotidien.Quot_Date<=[imp_dep]+42) AND
(Year([Quot_Date])>=2008) AND (Tbl_D_Actions.Act_Cnl_Dif Like '*') AND
(Tbl_D_Actions.Act_Saison Like '*') GROUP BY Tbl_D_Canaux.Cnl_Desc,
DatePart('w',[quot_date],2,2), Tbl_D_Implementations.Cnl_Id ORDER BY
Tbl_D_Implementations.Cnl_Id, DatePart('w',[quot_date],2,2);
Bonjour,
J'ai utilisé SQL Formatterhttp://www.smccall.demon.co.uk/Downloads.htm# SQLFormat
pour transformer votre code SQL en VBA.
Le résultat dans le fichier joint.
C'est plus lisible et si cela peut vous aider...
Bon courage.
"pascal58" a écrit dans le message denews:8e
Bonjour,
En VBA je construit une chaine contenant du SQL. Le recordset ne
renvoie rien. Par contre si je colle la chaine dans l'éditeur de
requête dans Access, il retourne bien les 21 lignes attendues.
Quelqu'un a t'il une idée ?
Grand merci !
Code VBA (les paramètres/critères sont des contrôles du formulaire)
Dim sSql As String
Dim Rst As New ADODB.Recordset
Dim CN As ADODB.Connection
Set CN = CurrentProject.Connection
Dim j1 As Integer, j2 As Integer
Dim I As Integer, L As Integer, C As Integer
j1 = (Val(TxtS1) - 1) * 7
j2 = Val(TxtS2) * 7
sSql = "SELECT DatePart('w',[quot_date],2,2) AS J,
Count(DatePart('w',[quot_date],2,2)) AS nJ,
Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ, Sum(Tbl_D_Hebdo.Heb_Qtite) AS
QS, Tbl_D_Implementations.Cnl_Id" _
& " FROM ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id" _
& " WHERE (DatePart('ww',[Quot_Date],2,2)=[heb_sem])" _
& " AND (Tbl_D_Quotidien.Quot_Type<>3)" _
& " AND (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+" & j1 & ")" _
& " AND (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+" & j2 & ")" _
& " AND (Year([Quot_Date])>=" & Txt_An & ")" _
& " AND (Tbl_D_Actions.Act_Cnl_Dif Like '" & Lst_Diff & "')" _
& " AND (Tbl_D_Actions.Act_Saison Like '" & Lst_Sais & "')" _
& " GROUP BY Tbl_D_Canaux.Cnl_Desc, DatePart('w',[quot_date],2,2) ,
Tbl_D_Implementations.Cnl_Id" _
& " ORDER BY Tbl_D_Implementations.Cnl_Id, DatePart('w',
[quot_date],2,2);"
Rst.Open sSql, CN, adOpenStatic
...
le SQL :
SELECT DatePart('w',[quot_date],2,2) AS J, Count(DatePart('w',
[quot_date],2,2)) AS nJ, Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ,
Sum(Tbl_D_Hebdo.Heb_Qtite) AS QS, Tbl_D_Implementations.Cnl_Id FROM
((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id WHERE
(DatePart('ww',[Quot_Date],2,2)=[heb_sem]) AND
(Tbl_D_Quotidien.Quot_Type<>3) AND
(Tbl_D_Quotidien.Quot_Date>=[imp_dep]+14) AND
(Tbl_D_Quotidien.Quot_Date<=[imp_dep]+42) AND
(Year([Quot_Date])> 08) AND (Tbl_D_Actions.Act_Cnl_Dif Like '*') AND
(Tbl_D_Actions.Act_Saison Like '*') GROUP BY Tbl_D_Canaux.Cnl_Desc,
DatePart('w',[quot_date],2,2), Tbl_D_Implementations.Cnl_Id ORDER BY
Tbl_D_Implementations.Cnl_Id, DatePart('w',[quot_date],2,2);
Bonjour Sylvain, le code SQL plus bas est un debug.print sSql
Bonjour Sylvain, le code SQL plus bas est un debug.print sSql
Bonjour Sylvain, le code SQL plus bas est un debug.print sSql
La première chose à faire serait d'afficher le résultat sSQL dans une
boîte
de dialogue ou dans la fenêtre de debuggage avec Debug.Print et de la
comparer ensuite avec l'autre.
--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web:http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.
"pascal58" wrote in message
news:
Bonjour,
En VBA je construit une chaine contenant du SQL. Le recordset ne
renvoie rien. Par contre si je colle la chaine dans l'éditeur de
requête dans Access, il retourne bien les 21 lignes attendues.
Quelqu'un a t'il une idée ?
Grand merci !
Code VBA (les paramètres/critères sont des contrôles du formulaire)
Dim sSql As String
Dim Rst As New ADODB.Recordset
Dim CN As ADODB.Connection
Set CN = CurrentProject.Connection
Dim j1 As Integer, j2 As Integer
Dim I As Integer, L As Integer, C As Integer
j1 = (Val(TxtS1) - 1) * 7
j2 = Val(TxtS2) * 7
sSql = "SELECT DatePart('w',[quot_date],2,2) AS J,
Count(DatePart('w',[quot_date],2,2)) AS nJ,
Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ, Sum(Tbl_D_Hebdo.Heb_Qtite) AS
QS, Tbl_D_Implementations.Cnl_Id" _
& " FROM ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id" _
& " WHERE (DatePart('ww',[Quot_Date],2,2)=[heb_sem])" _
& " AND (Tbl_D_Quotidien.Quot_Type<>3)" _
& " AND (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+" & j1 & ")" _
& " AND (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+" & j2 & ")" _
& " AND (Year([Quot_Date])>=" & Txt_An & ")" _
& " AND (Tbl_D_Actions.Act_Cnl_Dif Like '" & Lst_Diff & "')" _
& " AND (Tbl_D_Actions.Act_Saison Like '" & Lst_Sais & "')" _
& " GROUP BY Tbl_D_Canaux.Cnl_Desc, DatePart('w',[quot_date],2,2),
Tbl_D_Implementations.Cnl_Id" _
& " ORDER BY Tbl_D_Implementations.Cnl_Id, DatePart('w',
[quot_date],2,2);"
Rst.Open sSql, CN, adOpenStatic
...
le SQL :
SELECT DatePart('w',[quot_date],2,2) AS J, Count(DatePart('w',
[quot_date],2,2)) AS nJ, Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ,
Sum(Tbl_D_Hebdo.Heb_Qtite) AS QS, Tbl_D_Implementations.Cnl_Id FROM
((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id WHERE
(DatePart('ww',[Quot_Date],2,2)=[heb_sem]) AND
(Tbl_D_Quotidien.Quot_Type<>3) AND
(Tbl_D_Quotidien.Quot_Date>=[imp_dep]+14) AND
(Tbl_D_Quotidien.Quot_Date<=[imp_dep]+42) AND
(Year([Quot_Date])> 08) AND (Tbl_D_Actions.Act_Cnl_Dif Like '*') AND
(Tbl_D_Actions.Act_Saison Like '*') GROUP BY Tbl_D_Canaux.Cnl_Desc,
DatePart('w',[quot_date],2,2), Tbl_D_Implementations.Cnl_Id ORDER BY
Tbl_D_Implementations.Cnl_Id, DatePart('w',[quot_date],2,2);
Le résultat dans Access
J nJ QJ QS Canal
1 151 23378 84388 1
2 161 23264 110992 1
3 158 22329 119655 1
4 145 17168 110176 1
5 151 14696 115829 1
6 147 7684 125032 1
7 150 3479 125911 1
1 150 5669 23599 2
2 160 5699 29873 2
3 159 5581 33114 2
4 146 4524 32698 2
5 151 3924 32912 2
6 147 2609 35287 2
7 150 2490 35403 2
1 151 14569 56784 3
2 161 18302 77840 3
3 158 15790 86973 3
4 145 13292 83518 3
5 151 10154 82428 3
6 147 3078 90267 3
7 150 2695 91042 3
La première chose à faire serait d'afficher le résultat sSQL dans une
boîte
de dialogue ou dans la fenêtre de debuggage avec Debug.Print et de la
comparer ensuite avec l'autre.
--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web:http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.
"pascal58" <pascal.camb...@gmail.com> wrote in message
news:8e9f2060-2b7f-4a02-bdf6-59208413bb36@t21g2000yqg.googlegroups.com...
Bonjour,
En VBA je construit une chaine contenant du SQL. Le recordset ne
renvoie rien. Par contre si je colle la chaine dans l'éditeur de
requête dans Access, il retourne bien les 21 lignes attendues.
Quelqu'un a t'il une idée ?
Grand merci !
Code VBA (les paramètres/critères sont des contrôles du formulaire)
Dim sSql As String
Dim Rst As New ADODB.Recordset
Dim CN As ADODB.Connection
Set CN = CurrentProject.Connection
Dim j1 As Integer, j2 As Integer
Dim I As Integer, L As Integer, C As Integer
j1 = (Val(TxtS1) - 1) * 7
j2 = Val(TxtS2) * 7
sSql = "SELECT DatePart('w',[quot_date],2,2) AS J,
Count(DatePart('w',[quot_date],2,2)) AS nJ,
Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ, Sum(Tbl_D_Hebdo.Heb_Qtite) AS
QS, Tbl_D_Implementations.Cnl_Id" _
& " FROM ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id" _
& " WHERE (DatePart('ww',[Quot_Date],2,2)=[heb_sem])" _
& " AND (Tbl_D_Quotidien.Quot_Type<>3)" _
& " AND (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+" & j1 & ")" _
& " AND (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+" & j2 & ")" _
& " AND (Year([Quot_Date])>=" & Txt_An & ")" _
& " AND (Tbl_D_Actions.Act_Cnl_Dif Like '" & Lst_Diff & "')" _
& " AND (Tbl_D_Actions.Act_Saison Like '" & Lst_Sais & "')" _
& " GROUP BY Tbl_D_Canaux.Cnl_Desc, DatePart('w',[quot_date],2,2),
Tbl_D_Implementations.Cnl_Id" _
& " ORDER BY Tbl_D_Implementations.Cnl_Id, DatePart('w',
[quot_date],2,2);"
Rst.Open sSql, CN, adOpenStatic
...
le SQL :
SELECT DatePart('w',[quot_date],2,2) AS J, Count(DatePart('w',
[quot_date],2,2)) AS nJ, Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ,
Sum(Tbl_D_Hebdo.Heb_Qtite) AS QS, Tbl_D_Implementations.Cnl_Id FROM
((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id WHERE
(DatePart('ww',[Quot_Date],2,2)=[heb_sem]) AND
(Tbl_D_Quotidien.Quot_Type<>3) AND
(Tbl_D_Quotidien.Quot_Date>=[imp_dep]+14) AND
(Tbl_D_Quotidien.Quot_Date<=[imp_dep]+42) AND
(Year([Quot_Date])> 08) AND (Tbl_D_Actions.Act_Cnl_Dif Like '*') AND
(Tbl_D_Actions.Act_Saison Like '*') GROUP BY Tbl_D_Canaux.Cnl_Desc,
DatePart('w',[quot_date],2,2), Tbl_D_Implementations.Cnl_Id ORDER BY
Tbl_D_Implementations.Cnl_Id, DatePart('w',[quot_date],2,2);
Le résultat dans Access
J nJ QJ QS Canal
1 151 23378 84388 1
2 161 23264 110992 1
3 158 22329 119655 1
4 145 17168 110176 1
5 151 14696 115829 1
6 147 7684 125032 1
7 150 3479 125911 1
1 150 5669 23599 2
2 160 5699 29873 2
3 159 5581 33114 2
4 146 4524 32698 2
5 151 3924 32912 2
6 147 2609 35287 2
7 150 2490 35403 2
1 151 14569 56784 3
2 161 18302 77840 3
3 158 15790 86973 3
4 145 13292 83518 3
5 151 10154 82428 3
6 147 3078 90267 3
7 150 2695 91042 3
La première chose à faire serait d'afficher le résultat sSQL dans une
boîte
de dialogue ou dans la fenêtre de debuggage avec Debug.Print et de la
comparer ensuite avec l'autre.
--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web:http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.
"pascal58" wrote in message
news:
Bonjour,
En VBA je construit une chaine contenant du SQL. Le recordset ne
renvoie rien. Par contre si je colle la chaine dans l'éditeur de
requête dans Access, il retourne bien les 21 lignes attendues.
Quelqu'un a t'il une idée ?
Grand merci !
Code VBA (les paramètres/critères sont des contrôles du formulaire)
Dim sSql As String
Dim Rst As New ADODB.Recordset
Dim CN As ADODB.Connection
Set CN = CurrentProject.Connection
Dim j1 As Integer, j2 As Integer
Dim I As Integer, L As Integer, C As Integer
j1 = (Val(TxtS1) - 1) * 7
j2 = Val(TxtS2) * 7
sSql = "SELECT DatePart('w',[quot_date],2,2) AS J,
Count(DatePart('w',[quot_date],2,2)) AS nJ,
Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ, Sum(Tbl_D_Hebdo.Heb_Qtite) AS
QS, Tbl_D_Implementations.Cnl_Id" _
& " FROM ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id" _
& " WHERE (DatePart('ww',[Quot_Date],2,2)=[heb_sem])" _
& " AND (Tbl_D_Quotidien.Quot_Type<>3)" _
& " AND (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+" & j1 & ")" _
& " AND (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+" & j2 & ")" _
& " AND (Year([Quot_Date])>=" & Txt_An & ")" _
& " AND (Tbl_D_Actions.Act_Cnl_Dif Like '" & Lst_Diff & "')" _
& " AND (Tbl_D_Actions.Act_Saison Like '" & Lst_Sais & "')" _
& " GROUP BY Tbl_D_Canaux.Cnl_Desc, DatePart('w',[quot_date],2,2),
Tbl_D_Implementations.Cnl_Id" _
& " ORDER BY Tbl_D_Implementations.Cnl_Id, DatePart('w',
[quot_date],2,2);"
Rst.Open sSql, CN, adOpenStatic
...
le SQL :
SELECT DatePart('w',[quot_date],2,2) AS J, Count(DatePart('w',
[quot_date],2,2)) AS nJ, Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ,
Sum(Tbl_D_Hebdo.Heb_Qtite) AS QS, Tbl_D_Implementations.Cnl_Id FROM
((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
Tbl_D_Implementations ON
Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
JOIN Tbl_D_Quotidien ON
Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id WHERE
(DatePart('ww',[Quot_Date],2,2)=[heb_sem]) AND
(Tbl_D_Quotidien.Quot_Type<>3) AND
(Tbl_D_Quotidien.Quot_Date>=[imp_dep]+14) AND
(Tbl_D_Quotidien.Quot_Date<=[imp_dep]+42) AND
(Year([Quot_Date])> 08) AND (Tbl_D_Actions.Act_Cnl_Dif Like '*') AND
(Tbl_D_Actions.Act_Saison Like '*') GROUP BY Tbl_D_Canaux.Cnl_Desc,
DatePart('w',[quot_date],2,2), Tbl_D_Implementations.Cnl_Id ORDER BY
Tbl_D_Implementations.Cnl_Id, DatePart('w',[quot_date],2,2);
Le résultat dans Access
J nJ QJ QS Canal
1 151 23378 84388 1
2 161 23264 110992 1
3 158 22329 119655 1
4 145 17168 110176 1
5 151 14696 115829 1
6 147 7684 125032 1
7 150 3479 125911 1
1 150 5669 23599 2
2 160 5699 29873 2
3 159 5581 33114 2
4 146 4524 32698 2
5 151 3924 32912 2
6 147 2609 35287 2
7 150 2490 35403 2
1 151 14569 56784 3
2 161 18302 77840 3
3 158 15790 86973 3
4 145 13292 83518 3
5 151 10154 82428 3
6 147 3078 90267 3
7 150 2695 91042 3
Bonjour,
pascal58 a écrit :
> Bonjour Sylvain, le code SQL plus bas est un debug.print sSql
Mouais, l'on t'a dis de comparer le contenu de la variable sSQL avec le
code SQL qui fonctionne.
Tu peux aussi fixer les valeurs dans la variable sSQL.
Bonjour,
pascal58 a écrit :
> Bonjour Sylvain, le code SQL plus bas est un debug.print sSql
Mouais, l'on t'a dis de comparer le contenu de la variable sSQL avec le
code SQL qui fonctionne.
Tu peux aussi fixer les valeurs dans la variable sSQL.
Bonjour,
pascal58 a écrit :
> Bonjour Sylvain, le code SQL plus bas est un debug.print sSql
Mouais, l'on t'a dis de comparer le contenu de la variable sSQL avec le
code SQL qui fonctionne.
Tu peux aussi fixer les valeurs dans la variable sSQL.
Votre commentaire « paramètres/critères sont des contrôles du for mulaire »
est très confus. J'espère que vous n'essayez pas de transmettre le nom d'un
contrôle au travers d'ADO au lieu d'utiliser sa valeur et que vous n'ou blier
de mettre entre quotes (simples ou doubles) les valeurs de type chaî ne de
caractères; chose que vous n'avez pas à faire lorsque vous utilisez
directement un contrôle dans l'éditeur de requête.
---
Comme vous n'avez pas fourni la structure de vos tables - avec example de
données - et le nom de vos contrôles, il est impossible d'en dire plu s.
Finalement, n'utilisez jamais un dimensionnement du genre « Dim Rst As New
ADODB.Recordset » avec ADO ou avec n'importe quelle hiérarchie d'obje t
complexe et séparer le dimensionnement de la création de l'objet lui- même:
Dim Rst As ADODB.Recordset
Set Rst = New ADODB.Recordset
--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web:http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.
"pascal58" wrote in message
news:
Bonjour Sylvain, le code SQL plus bas est un debug.print sSql
On 30 avr, 21:51, "Sylvain Lafontaine"
wrote:
> La première chose à faire serait d'afficher le résultat sSQL dans une
> boîte
> de dialogue ou dans la fenêtre de debuggage avec Debug.Print et de la
> comparer ensuite avec l'autre.
> --
> Sylvain Lafontaine, ing.
> MVP pour « Windows Live Platform »
> Blogue/site web:http://paparazzi-codeur.sylvainlafontaine.com
> Consultant indépendant et programmation à distance pour Access et
> SQL-Server.
> "pascal58" wrote in message
>news: .
> Bonjour,
> En VBA je construit une chaine contenant du SQL. Le recordset ne
> renvoie rien. Par contre si je colle la chaine dans l'éditeur de
> requête dans Access, il retourne bien les 21 lignes attendues.
> Quelqu'un a t'il une idée ?
> Grand merci !
> Code VBA (les paramètres/critères sont des contrôles du formulair e)
> Dim sSql As String
> Dim Rst As New ADODB.Recordset
> Dim CN As ADODB.Connection
> Set CN = CurrentProject.Connection
> Dim j1 As Integer, j2 As Integer
> Dim I As Integer, L As Integer, C As Integer
> j1 = (Val(TxtS1) - 1) * 7
> j2 = Val(TxtS2) * 7
> sSql = "SELECT DatePart('w',[quot_date],2,2) AS J,
> Count(DatePart('w',[quot_date],2,2)) AS nJ,
> Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ, Sum(Tbl_D_Hebdo.Heb_Qtite) AS
> QS, Tbl_D_Implementations.Cnl_Id" _
> & " FROM ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
> Tbl_D_Implementations ON
> Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
> Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
> Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
> JOIN Tbl_D_Quotidien ON
> Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id" _
> & " WHERE (DatePart('ww',[Quot_Date],2,2)=[heb_sem])" _
> & " AND (Tbl_D_Quotidien.Quot_Type<>3)" _
> & " AND (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+" & j1 & ")" _
> & " AND (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+" & j2 & ")" _
> & " AND (Year([Quot_Date])>=" & Txt_An & ")" _
> & " AND (Tbl_D_Actions.Act_Cnl_Dif Like '" & Lst_Diff & "')" _
> & " AND (Tbl_D_Actions.Act_Saison Like '" & Lst_Sais & "')" _
> & " GROUP BY Tbl_D_Canaux.Cnl_Desc, DatePart('w',[quot_date],2,2),
> Tbl_D_Implementations.Cnl_Id" _
> & " ORDER BY Tbl_D_Implementations.Cnl_Id, DatePart('w',
> [quot_date],2,2);"
> Rst.Open sSql, CN, adOpenStatic
> ...
> le SQL :
> SELECT DatePart('w',[quot_date],2,2) AS J, Count(DatePart('w',
> [quot_date],2,2)) AS nJ, Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ,
> Sum(Tbl_D_Hebdo.Heb_Qtite) AS QS, Tbl_D_Implementations.Cnl_Id FROM
> ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
> Tbl_D_Implementations ON
> Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
> Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
> Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
> JOIN Tbl_D_Quotidien ON
> Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id WHERE
> (DatePart('ww',[Quot_Date],2,2)=[heb_sem]) AND
> (Tbl_D_Quotidien.Quot_Type<>3) AND
> (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+14) AND
> (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+42) AND
> (Year([Quot_Date])> 08) AND (Tbl_D_Actions.Act_Cnl_Dif Like '*') AN D
> (Tbl_D_Actions.Act_Saison Like '*') GROUP BY Tbl_D_Canaux.Cnl_Desc,
> DatePart('w',[quot_date],2,2), Tbl_D_Implementations.Cnl_Id ORDER BY
> Tbl_D_Implementations.Cnl_Id, DatePart('w',[quot_date],2,2);
> Le résultat dans Access
> J nJ QJ QS Canal
> 1 151 23378 84388 1
> 2 161 23264 110992 1
> 3 158 22329 119655 1
> 4 145 17168 110176 1
> 5 151 14696 115829 1
> 6 147 7684 125032 1
> 7 150 3479 125911 1
> 1 150 5669 23599 2
> 2 160 5699 29873 2
> 3 159 5581 33114 2
> 4 146 4524 32698 2
> 5 151 3924 32912 2
> 6 147 2609 35287 2
> 7 150 2490 35403 2
> 1 151 14569 56784 3
> 2 161 18302 77840 3
> 3 158 15790 86973 3
> 4 145 13292 83518 3
> 5 151 10154 82428 3
> 6 147 3078 90267 3
> 7 150 2695 91042 3
Votre commentaire « paramètres/critères sont des contrôles du for mulaire »
est très confus. J'espère que vous n'essayez pas de transmettre le nom d'un
contrôle au travers d'ADO au lieu d'utiliser sa valeur et que vous n'ou blier
de mettre entre quotes (simples ou doubles) les valeurs de type chaî ne de
caractères; chose que vous n'avez pas à faire lorsque vous utilisez
directement un contrôle dans l'éditeur de requête.
---
Comme vous n'avez pas fourni la structure de vos tables - avec example de
données - et le nom de vos contrôles, il est impossible d'en dire plu s.
Finalement, n'utilisez jamais un dimensionnement du genre « Dim Rst As New
ADODB.Recordset » avec ADO ou avec n'importe quelle hiérarchie d'obje t
complexe et séparer le dimensionnement de la création de l'objet lui- même:
Dim Rst As ADODB.Recordset
Set Rst = New ADODB.Recordset
--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web:http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.
"pascal58" <pascal.camb...@gmail.com> wrote in message
news:49b42a26-57e6-4b38-9b09-bea0c6183311@b18g2000yqb.googlegroups.com...
Bonjour Sylvain, le code SQL plus bas est un debug.print sSql
On 30 avr, 21:51, "Sylvain Lafontaine"
<sylvainlafontaine2...@yahoo.ca> wrote:
> La première chose à faire serait d'afficher le résultat sSQL dans une
> boîte
> de dialogue ou dans la fenêtre de debuggage avec Debug.Print et de la
> comparer ensuite avec l'autre.
> --
> Sylvain Lafontaine, ing.
> MVP pour « Windows Live Platform »
> Blogue/site web:http://paparazzi-codeur.sylvainlafontaine.com
> Consultant indépendant et programmation à distance pour Access et
> SQL-Server.
> "pascal58" <pascal.camb...@gmail.com> wrote in message
>news:8e9f2060-2b7f-4a02-bdf6-59208413bb36@t21g2000yqg.googlegroups.com.. .
> Bonjour,
> En VBA je construit une chaine contenant du SQL. Le recordset ne
> renvoie rien. Par contre si je colle la chaine dans l'éditeur de
> requête dans Access, il retourne bien les 21 lignes attendues.
> Quelqu'un a t'il une idée ?
> Grand merci !
> Code VBA (les paramètres/critères sont des contrôles du formulair e)
> Dim sSql As String
> Dim Rst As New ADODB.Recordset
> Dim CN As ADODB.Connection
> Set CN = CurrentProject.Connection
> Dim j1 As Integer, j2 As Integer
> Dim I As Integer, L As Integer, C As Integer
> j1 = (Val(TxtS1) - 1) * 7
> j2 = Val(TxtS2) * 7
> sSql = "SELECT DatePart('w',[quot_date],2,2) AS J,
> Count(DatePart('w',[quot_date],2,2)) AS nJ,
> Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ, Sum(Tbl_D_Hebdo.Heb_Qtite) AS
> QS, Tbl_D_Implementations.Cnl_Id" _
> & " FROM ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
> Tbl_D_Implementations ON
> Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
> Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
> Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
> JOIN Tbl_D_Quotidien ON
> Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id" _
> & " WHERE (DatePart('ww',[Quot_Date],2,2)=[heb_sem])" _
> & " AND (Tbl_D_Quotidien.Quot_Type<>3)" _
> & " AND (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+" & j1 & ")" _
> & " AND (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+" & j2 & ")" _
> & " AND (Year([Quot_Date])>=" & Txt_An & ")" _
> & " AND (Tbl_D_Actions.Act_Cnl_Dif Like '" & Lst_Diff & "')" _
> & " AND (Tbl_D_Actions.Act_Saison Like '" & Lst_Sais & "')" _
> & " GROUP BY Tbl_D_Canaux.Cnl_Desc, DatePart('w',[quot_date],2,2),
> Tbl_D_Implementations.Cnl_Id" _
> & " ORDER BY Tbl_D_Implementations.Cnl_Id, DatePart('w',
> [quot_date],2,2);"
> Rst.Open sSql, CN, adOpenStatic
> ...
> le SQL :
> SELECT DatePart('w',[quot_date],2,2) AS J, Count(DatePart('w',
> [quot_date],2,2)) AS nJ, Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ,
> Sum(Tbl_D_Hebdo.Heb_Qtite) AS QS, Tbl_D_Implementations.Cnl_Id FROM
> ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
> Tbl_D_Implementations ON
> Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
> Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
> Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
> JOIN Tbl_D_Quotidien ON
> Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id WHERE
> (DatePart('ww',[Quot_Date],2,2)=[heb_sem]) AND
> (Tbl_D_Quotidien.Quot_Type<>3) AND
> (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+14) AND
> (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+42) AND
> (Year([Quot_Date])>=2008) AND (Tbl_D_Actions.Act_Cnl_Dif Like '*') AN D
> (Tbl_D_Actions.Act_Saison Like '*') GROUP BY Tbl_D_Canaux.Cnl_Desc,
> DatePart('w',[quot_date],2,2), Tbl_D_Implementations.Cnl_Id ORDER BY
> Tbl_D_Implementations.Cnl_Id, DatePart('w',[quot_date],2,2);
> Le résultat dans Access
> J nJ QJ QS Canal
> 1 151 23378 84388 1
> 2 161 23264 110992 1
> 3 158 22329 119655 1
> 4 145 17168 110176 1
> 5 151 14696 115829 1
> 6 147 7684 125032 1
> 7 150 3479 125911 1
> 1 150 5669 23599 2
> 2 160 5699 29873 2
> 3 159 5581 33114 2
> 4 146 4524 32698 2
> 5 151 3924 32912 2
> 6 147 2609 35287 2
> 7 150 2490 35403 2
> 1 151 14569 56784 3
> 2 161 18302 77840 3
> 3 158 15790 86973 3
> 4 145 13292 83518 3
> 5 151 10154 82428 3
> 6 147 3078 90267 3
> 7 150 2695 91042 3
Votre commentaire « paramètres/critères sont des contrôles du for mulaire »
est très confus. J'espère que vous n'essayez pas de transmettre le nom d'un
contrôle au travers d'ADO au lieu d'utiliser sa valeur et que vous n'ou blier
de mettre entre quotes (simples ou doubles) les valeurs de type chaî ne de
caractères; chose que vous n'avez pas à faire lorsque vous utilisez
directement un contrôle dans l'éditeur de requête.
---
Comme vous n'avez pas fourni la structure de vos tables - avec example de
données - et le nom de vos contrôles, il est impossible d'en dire plu s.
Finalement, n'utilisez jamais un dimensionnement du genre « Dim Rst As New
ADODB.Recordset » avec ADO ou avec n'importe quelle hiérarchie d'obje t
complexe et séparer le dimensionnement de la création de l'objet lui- même:
Dim Rst As ADODB.Recordset
Set Rst = New ADODB.Recordset
--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web:http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.
"pascal58" wrote in message
news:
Bonjour Sylvain, le code SQL plus bas est un debug.print sSql
On 30 avr, 21:51, "Sylvain Lafontaine"
wrote:
> La première chose à faire serait d'afficher le résultat sSQL dans une
> boîte
> de dialogue ou dans la fenêtre de debuggage avec Debug.Print et de la
> comparer ensuite avec l'autre.
> --
> Sylvain Lafontaine, ing.
> MVP pour « Windows Live Platform »
> Blogue/site web:http://paparazzi-codeur.sylvainlafontaine.com
> Consultant indépendant et programmation à distance pour Access et
> SQL-Server.
> "pascal58" wrote in message
>news: .
> Bonjour,
> En VBA je construit une chaine contenant du SQL. Le recordset ne
> renvoie rien. Par contre si je colle la chaine dans l'éditeur de
> requête dans Access, il retourne bien les 21 lignes attendues.
> Quelqu'un a t'il une idée ?
> Grand merci !
> Code VBA (les paramètres/critères sont des contrôles du formulair e)
> Dim sSql As String
> Dim Rst As New ADODB.Recordset
> Dim CN As ADODB.Connection
> Set CN = CurrentProject.Connection
> Dim j1 As Integer, j2 As Integer
> Dim I As Integer, L As Integer, C As Integer
> j1 = (Val(TxtS1) - 1) * 7
> j2 = Val(TxtS2) * 7
> sSql = "SELECT DatePart('w',[quot_date],2,2) AS J,
> Count(DatePart('w',[quot_date],2,2)) AS nJ,
> Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ, Sum(Tbl_D_Hebdo.Heb_Qtite) AS
> QS, Tbl_D_Implementations.Cnl_Id" _
> & " FROM ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
> Tbl_D_Implementations ON
> Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
> Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
> Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
> JOIN Tbl_D_Quotidien ON
> Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id" _
> & " WHERE (DatePart('ww',[Quot_Date],2,2)=[heb_sem])" _
> & " AND (Tbl_D_Quotidien.Quot_Type<>3)" _
> & " AND (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+" & j1 & ")" _
> & " AND (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+" & j2 & ")" _
> & " AND (Year([Quot_Date])>=" & Txt_An & ")" _
> & " AND (Tbl_D_Actions.Act_Cnl_Dif Like '" & Lst_Diff & "')" _
> & " AND (Tbl_D_Actions.Act_Saison Like '" & Lst_Sais & "')" _
> & " GROUP BY Tbl_D_Canaux.Cnl_Desc, DatePart('w',[quot_date],2,2),
> Tbl_D_Implementations.Cnl_Id" _
> & " ORDER BY Tbl_D_Implementations.Cnl_Id, DatePart('w',
> [quot_date],2,2);"
> Rst.Open sSql, CN, adOpenStatic
> ...
> le SQL :
> SELECT DatePart('w',[quot_date],2,2) AS J, Count(DatePart('w',
> [quot_date],2,2)) AS nJ, Sum(Tbl_D_Quotidien.Quot_Qtite) AS QJ,
> Sum(Tbl_D_Hebdo.Heb_Qtite) AS QS, Tbl_D_Implementations.Cnl_Id FROM
> ((Tbl_D_Canaux INNER JOIN (Tbl_D_Actions INNER JOIN
> Tbl_D_Implementations ON
> Tbl_D_Actions.Act_Id=Tbl_D_Implementations.Act_Id) ON
> Tbl_D_Canaux.Cnl_Id=Tbl_D_Implementations.Cnl_Id) INNER JOIN
> Tbl_D_Hebdo ON Tbl_D_Implementations.Imp_Id=Tbl_D_Hebdo.Imp_Id) INNER
> JOIN Tbl_D_Quotidien ON
> Tbl_D_Implementations.Imp_Id=Tbl_D_Quotidien.Imp_Id WHERE
> (DatePart('ww',[Quot_Date],2,2)=[heb_sem]) AND
> (Tbl_D_Quotidien.Quot_Type<>3) AND
> (Tbl_D_Quotidien.Quot_Date>=[imp_dep]+14) AND
> (Tbl_D_Quotidien.Quot_Date<=[imp_dep]+42) AND
> (Year([Quot_Date])> 08) AND (Tbl_D_Actions.Act_Cnl_Dif Like '*') AN D
> (Tbl_D_Actions.Act_Saison Like '*') GROUP BY Tbl_D_Canaux.Cnl_Desc,
> DatePart('w',[quot_date],2,2), Tbl_D_Implementations.Cnl_Id ORDER BY
> Tbl_D_Implementations.Cnl_Id, DatePart('w',[quot_date],2,2);
> Le résultat dans Access
> J nJ QJ QS Canal
> 1 151 23378 84388 1
> 2 161 23264 110992 1
> 3 158 22329 119655 1
> 4 145 17168 110176 1
> 5 151 14696 115829 1
> 6 147 7684 125032 1
> 7 150 3479 125911 1
> 1 150 5669 23599 2
> 2 160 5699 29873 2
> 3 159 5581 33114 2
> 4 146 4524 32698 2
> 5 151 3924 32912 2
> 6 147 2609 35287 2
> 7 150 2490 35403 2
> 1 151 14569 56784 3
> 2 161 18302 77840 3
> 3 158 15790 86973 3
> 4 145 13292 83518 3
> 5 151 10154 82428 3
> 6 147 3078 90267 3
> 7 150 2695 91042 3
On 1 mai, 12:52, Michel__D
wrote:Bonjour,
pascal58 a écrit :Bonjour Sylvain, le code SQL plus bas est un debug.print sSql
Mouais, l'on t'a dis de comparer le contenu de la variable sSQL avec le
code SQL qui fonctionne.
Tu peux aussi fixer les valeurs dans la variable sSQL.
Michel,
Je m'évertue à vous dire que *justement* le SQL est strictement le
même que lorsque je le fais à partir d'une requête ou à partir des
concaténations en VBA.
Que la requête en Access fonctionne, mais pas celle en VBA !
Et que les variables sont bien dans la chaine (code VBA : «... Like '"
& Lst_Diff & "'...» ) où Lst_Diff retourne son contenu, par exemple
ici * star étoile. Et que donc je ne fais pas référence à un critère
du style forms!form....
---
Autre chose, cela fait trois ou quatre fois que je répond à Jero sans
effet. Oui, je le fais à partir de l'interface de Groups.Google.
Bon, donc, s'il me lit, cela ne change rien car sa solution est un
solution (couteuse) pour résoudre le cas de valeurs "Null".
---
Merci à tous D'autres idées ?
Pascal
On 1 mai, 12:52, Michel__D <Michel.NOS...@orange-ft.com.invalid>
wrote:
Bonjour,
pascal58 a écrit :
Bonjour Sylvain, le code SQL plus bas est un debug.print sSql
Mouais, l'on t'a dis de comparer le contenu de la variable sSQL avec le
code SQL qui fonctionne.
Tu peux aussi fixer les valeurs dans la variable sSQL.
Michel,
Je m'évertue à vous dire que *justement* le SQL est strictement le
même que lorsque je le fais à partir d'une requête ou à partir des
concaténations en VBA.
Que la requête en Access fonctionne, mais pas celle en VBA !
Et que les variables sont bien dans la chaine (code VBA : «... Like '"
& Lst_Diff & "'...» ) où Lst_Diff retourne son contenu, par exemple
ici * star étoile. Et que donc je ne fais pas référence à un critère
du style forms!form....
---
Autre chose, cela fait trois ou quatre fois que je répond à Jero sans
effet. Oui, je le fais à partir de l'interface de Groups.Google.
Bon, donc, s'il me lit, cela ne change rien car sa solution est un
solution (couteuse) pour résoudre le cas de valeurs "Null".
---
Merci à tous D'autres idées ?
Pascal
On 1 mai, 12:52, Michel__D
wrote:Bonjour,
pascal58 a écrit :Bonjour Sylvain, le code SQL plus bas est un debug.print sSql
Mouais, l'on t'a dis de comparer le contenu de la variable sSQL avec le
code SQL qui fonctionne.
Tu peux aussi fixer les valeurs dans la variable sSQL.
Michel,
Je m'évertue à vous dire que *justement* le SQL est strictement le
même que lorsque je le fais à partir d'une requête ou à partir des
concaténations en VBA.
Que la requête en Access fonctionne, mais pas celle en VBA !
Et que les variables sont bien dans la chaine (code VBA : «... Like '"
& Lst_Diff & "'...» ) où Lst_Diff retourne son contenu, par exemple
ici * star étoile. Et que donc je ne fais pas référence à un critère
du style forms!form....
---
Autre chose, cela fait trois ou quatre fois que je répond à Jero sans
effet. Oui, je le fais à partir de l'interface de Groups.Google.
Bon, donc, s'il me lit, cela ne change rien car sa solution est un
solution (couteuse) pour résoudre le cas de valeurs "Null".
---
Merci à tous D'autres idées ?
Pascal