количество строк в запросе

jediAlex
Дата: 15.01.2016 09:54:37
Здравствуйте. Есть простая табличка в БД на аксесс с полями Код(счетчик) и Дата(Дата). Табличка нужна для записи праздничных выходных. Занес данные на текущий годи теперь надо сделать запрос, который выводил бы количество праздничных дней в заданном интервале дат. Сделал запрос конструктором запросов:
SELECT Count(ПраздничныеДаты.Код) AS Выражение1
FROM ПраздничныеДаты
WHERE (((ПраздничныеДаты.Дата)>=[ДатаНачала] And (ПраздничныеДаты.Дата)<=[ДатаОкончания]));

этот запрос работает правильно,например с 15.01 по 25.02 выводит 2.
Мне надо использовать результат запроса в коде VBA. Поэтому я написал код для выборки количества праздников с выводом в поле формы:
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT Count(ПраздничныеДаты.Код) AS КолВых  FROM ПраздничныеДаты Where (ПраздничныеДаты.Дата>=" & Format(Me.ДатаНачала, "\#mm\/dd\/yyyy\#") & ")AND(ПраздничныеДаты.Дата<=" & Format(Me.ДатаОкончания, "\#mm\/dd\/yyyy\#") & ")")
If rs.Fields(0) > 0 Then
Me.Поле130 = rs.Fields(0)
End If

вот здесь творится непонятное: 15.01 по 25.02 выводит 5, с 15.01 по 17.01 например тоже 5... откуда это? что не так? помогите пожалуйста
непоймучка
Дата: 15.01.2016 10:09:46
jediAlex
Здравствуйте. Есть простая табличка в БД на аксесс с полями Код(счетчик) и Дата(Дата). Табличка нужна для записи праздничных выходных. Занес данные на текущий годи теперь надо сделать запрос, который выводил бы количество праздничных дней в заданном интервале дат. Сделал запрос конструктором запросов:
SELECT Count(ПраздничныеДаты.Код) AS Выражение1
FROM ПраздничныеДаты
WHERE (((ПраздничныеДаты.Дата)>=[ДатаНачала] And (ПраздничныеДаты.Дата)<=[ДатаОкончания]));

этот запрос работает правильно,например с 15.01 по 25.02 выводит 2.
Мне надо использовать результат запроса в коде VBA. Поэтому я написал код для выборки количества праздников с выводом в поле формы:
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT Count(ПраздничныеДаты.Код) AS КолВых  FROM ПраздничныеДаты Where (ПраздничныеДаты.Дата>=" & Format(Me.ДатаНачала, "\#mm\/dd\/yyyy\#") & ")AND(ПраздничныеДаты.Дата<=" & Format(Me.ДатаОкончания, "\#mm\/dd\/yyyy\#") & ")")
If rs.Fields(0) > 0 Then
Me.Поле130 = rs.Fields(0)
End If

вот здесь творится непонятное: 15.01 по 25.02 выводит 5, с 15.01 по 17.01 например тоже 5... откуда это? что не так? помогите пожалуйста
У вас сейчас на какое событие вызывается этот кусок кода?

Чтобы Поле130 показывало актуальные данные
(соответствующие текущим значениям ДатаНачала и ДатаОкончания),
нужно чтобы показанный кусок кода вызывался при любом изменении значений этих дат.
Т.е. например в AfterUpdate контролов этих дат, как минимум.
А если форма с источником - то еще и в Form_Current.
Akina
Дата: 15.01.2016 10:10:13
jediAlex
я написал код

А теперь напиши нормально:
Dim strSQL as string
strSQL = ...
Set rs = CurrentDb.OpenRecordset(strSQL)

Такая форма позволит, остановив выполнение, посмотреть полученный текст запроса, и даже выполнить его напрямую. Что, в свою очередь, позволит быстро и без потерь обнаружить свою ошибку.
Akina
Дата: 15.01.2016 10:10:56
И да - точка останова позволит понять, когда именно выполняется данный код.
jediAlex
Дата: 15.01.2016 10:14:34
извиняюсь, забыл указать событие. Код выполняется на событии ДатаОкончания.AfterUpdate()
guest_rusimport
Дата: 15.01.2016 10:21:34
jediAlex,
а так попробуй
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT Count(ПраздничныеДаты.Код) AS КолВых  FROM ПраздничныеДаты Where (ПраздничныеДаты.Дата>=#" & Format(Me.ДатаНачала, "mm\/dd\/yyyy") & "#) AND (ПраздничныеДаты.Дата<=#" & Format(Me.ДатаОкончания, "mm\/dd\/yyyy") & "#)")
If rs.Fields(0) > 0 Then
Me.Поле130 = rs.Fields(0)
End If
непоймучка
Дата: 15.01.2016 10:24:57
jediAlex
извиняюсь, забыл указать событие. Код выполняется на событии ДатаОкончания.AfterUpdate()
еще надо иметь ввиду, что ваш If ... >0 запрещает менять Поле130, если праздников за выбранный период нет.
поэтому если "15.01 по 25.02 выводит 5" а потом вы меняете 25.02 на 17.01 - и при этом с "15.01 по 17.01" у вас празников нет, то у вас, согласно вашему коду, в Поле130 останется 5.
jediAlex
Дата: 15.01.2016 10:37:02
Попробовал. ругается на строку
Me.Поле130 = rs.Fields(0)
: "Невозможно присвоить значение объекту".
Попробовал так:
Me.Поле130 = rs.Fields(0).Value
- опять выводит 5...
непоймучка
Дата: 15.01.2016 11:00:20
Dim rs As DAO.Recordset, SQL As String

SQL = "SELECT Count(Код) AS КолВых FROM ПраздничныеДаты WHERE" & _
    " Дата>=#" & Format(Me.ДатаНачала, "mm\/dd\/yyyy") & "# AND" & _
    " Дата<=#" & Format(Me.ДатаОкончания, "mm\/dd\/yyyy") & "#)"

Set rs = CurrentDb.OpenRecordset(SQL)
Me.Поле130.Value = rs.Fields(0).Value

Debug.Print SQL
Debug.Print "Count=" & rs.Fields(0).Value

покажите, что в дебаг пишет (для обоих ваших вариантов дат)
sdku
Дата: 15.01.2016 11:02:44
jediAlex,
а чё не так (может я что-то не понимаю)
Me.Поле130 = DCount("код", "праздники", "дата>=#" & Format(Me.начало, "mm\/dd\/yy") & "#  and дата<#" & Format(Me.конец, "mm\/dd\/yy") & "#")