10.11.2015, 17:49
#39099913
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
Доброе время суток.
Создавая экспорт в шаблон экселя столкнулся с непонятной для меня ситуацией, странно работающим запросом.
Ситуация следующая:
1. В запросе должен производиться отбор по промежутку между определенными датами (+еще один параметр), которые задаются на форме с которой происходит запуск экспорта в Эксель.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56.
Private Sub Кнопка93_Click()
Dim XL As Object, XLT As Object, o As Object, s As String, newrow As Object, cell As String
Dim cn As ADODB.Connection, rsd As ADODB.Recordset
Dim i As Integer, Rowss As Integer, numrow As Integer
Dim strSQL As String
Set XL = CreateObject("excel.application")
Set cn = CurrentProject.Connection
Set rsd = New ADODB.Recordset
strSQL = "SELECT CDate(FormatDateTime(uchet.time_podachi,2)) AS data, uchet.time_podachi, voditeli.fio, voditeli.grz, gp.gp, uchet.stoimost_za_chas, uchet.[kol-vo_chasov] AS РабЧасы, [kol-vo_chasov]*[stoimost_za_chas] AS StoimSmeni, mashruti.march FROM mashruti RIGHT JOIN (voditeli RIGHT JOIN (gp RIGHT JOIN (kompany RIGHT JOIN uchet ON kompany.id_komp = uchet.id_komp) ON gp.id_gp = uchet.id_gp) ON voditeli.id_vod = uchet.id_vod) ON mashruti.id_march = uchet.marchrut WHERE ((kompany.nazv='" & Me.ПолеСоСписком66 & "') AND (cdate(FormatDateTime(uchet.time_podachi,2))>='" & Me.Поле79 & "' And Cdate(FormatDateTime(uchet.time_podachi,2))<='" & Me.Поле81 & "'))"
rsd.Open strSQL, cn, adOpenKeyset, adLockReadOnly
Set XLT = XL.Workbooks.Add
Set o = XLT.Worksheets("Лист1")
Rowss = 5
numrow = 1
XLT.Worksheets("Лист1").[b3] = "ООО """ & Me.ПолеСоСписком66 & """"
XLT.Worksheets("Лист1").[h3] = "Счет № " & Me.Поле74 & ""
XLT.Worksheets("Лист1").[b2] = "За период с " & Me.Поле79 & " по " & Me.Поле81 & ""
While Not (rsd.EOF)
If Rowss >= 2 Then
XLT.Worksheets("Лист1").Rows(Rowss).Insert
cell = "a" & Rowss
XLT.Worksheets("Лист1").Range(cell) = numrow
cell = "b" & Rowss
XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("data").Value
cell = "d" & Rowss
XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("fio").Value
cell = "c" & Rowss
XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("grz").Value
cell = "e" & Rowss
XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("gp").Value
cell = "f" & Rowss
XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("stoimost_za_chas").Value
cell = "g" & Rowss
XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("РабЧасы").Value
cell = "h" & Rowss
XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("StoimSmeni").Value
cell = "i" & Rowss
XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("march").Value
Rowss = Rowss + 1
rsd.MoveNext
Else
cell = "a" & Rowss
XLT.Worksheets("Лист1").Range(cell) = numrow
Rowss = Rowss + 1
rsd.MoveNext
End If
numrow = numrow + 1
Wend
o.Cells(Rowss, 7) = "Итого"
o.Cells(Rowss, 8).Formula = "=sum(h5:h" & Rowss - 1 & ")"
o.Cells(Rowss, 9) = "р."
XL.Visible = True
Set XL = Nothing
Set XLT = Nothing
Set newrow = Nothing
End Sub
2. Поля 79 и 81 на форме имеют формат Короткая дата и привязанный элемент управления типа Календарь.
В результате же я получаю не отбор внутри дат, а те результаты в которых присутствует день с номером внутри номеров дней из диапазона (Поле 79 и 81).
Это почему так?
Тот же (почти) запрос внутри аксеса, который я использую для отчета, отрабатывает диапазон нормально:
1. 2. 3. 4.
SELECT CDate(FormatDateTime([time_podachi],2)) AS data, voditeli.fio, voditeli.grz, gp.gp, uchet.stoimost_za_chas, uchet.[kol-vo_chasov] AS РабЧасы, [kol-vo_chasov]*[stoimost_za_chas] AS StoimSmeni, mashruti.march, uchet.time_podachi
FROM mashruti RIGHT JOIN (voditeli RIGHT JOIN (gp RIGHT JOIN (kompany RIGHT JOIN uchet ON kompany.id_komp = uchet.id_komp) ON gp.id_gp = uchet.id_gp) ON voditeli.id_vod = uchet.id_vod) ON mashruti.id_march = uchet.marchrut
GROUP BY CDate(FormatDateTime([time_podachi],2)), voditeli.fio, voditeli.grz, gp.gp, uchet.stoimost_za_chas, uchet.[kol-vo_chasov], [kol-vo_chasov]*[stoimost_za_chas], mashruti.march, uchet.time_podachi, kompany.nazv
HAVING (((CDate(FormatDateTime([time_podachi],2)))>=[Forms]![uchet]![Поле79] And (CDate(FormatDateTime([time_podachi],2)))<=[Forms]![uchet]![Поле81]) AND ((kompany.nazv)=[Forms]![uchet]![ПолеСоСписком66]));
Спасибо
|
|