Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос для экспорта в форму / 3 сообщений из 3, страница 1 из 1
10.11.2015, 17:49
    #39099913
DeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос для экспорта в форму
Доброе время суток.
Создавая экспорт в шаблон экселя столкнулся с непонятной для меня ситуацией, странно работающим запросом.
Ситуация следующая:
1. В запросе должен производиться отбор по промежутку между определенными датами (+еще один параметр), которые задаются на форме с которой происходит запуск экспорта в Эксель.
Код: vbnet
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).
Это почему так?

Тот же (почти) запрос внутри аксеса, который я использую для отчета, отрабатывает диапазон нормально:
Код: sql
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]));



Спасибо
...
Рейтинг: 0 / 0
11.11.2015, 07:11
    #39100182
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос для экспорта в форму
DeAngel , в ФАКе, в пункте 3. Использование дат есть примеры того, как правильно делать выборку..
...
Рейтинг: 0 / 0
12.11.2015, 17:53
    #39102173
DeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос для экспорта в форму
Agapov_stas, спасибо большое!
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос для экспорта в форму / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]