powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / количество строк в запросе
27 сообщений из 27, показаны все 2 страниц
количество строк в запросе
    #39147962
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Есть простая табличка в БД на аксесс с полями Код(счетчик) и Дата(Дата). Табличка нужна для записи праздничных выходных. Занес данные на текущий годи теперь надо сделать запрос, который выводил бы количество праздничных дней в заданном интервале дат. Сделал запрос конструктором запросов:
Код: plsql
1.
2.
3.
SELECT Count(ПраздничныеДаты.Код) AS Выражение1
FROM ПраздничныеДаты
WHERE (((ПраздничныеДаты.Дата)>=[ДатаНачала] And (ПраздничныеДаты.Дата)<=[ДатаОкончания]));


этот запрос работает правильно,например с 15.01 по 25.02 выводит 2.
Мне надо использовать результат запроса в коде VBA. Поэтому я написал код для выборки количества праздников с выводом в поле формы:
Код: vbnet
1.
2.
3.
4.
5.
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... откуда это? что не так? помогите пожалуйста
...
Рейтинг: 0 / 0
количество строк в запросе
    #39147974
jediAlexЗдравствуйте. Есть простая табличка в БД на аксесс с полями Код(счетчик) и Дата(Дата). Табличка нужна для записи праздничных выходных. Занес данные на текущий годи теперь надо сделать запрос, который выводил бы количество праздничных дней в заданном интервале дат. Сделал запрос конструктором запросов:
Код: plsql
1.
2.
3.
SELECT Count(ПраздничныеДаты.Код) AS Выражение1
FROM ПраздничныеДаты
WHERE (((ПраздничныеДаты.Дата)>=[ДатаНачала] And (ПраздничныеДаты.Дата)<=[ДатаОкончания]));


этот запрос работает правильно,например с 15.01 по 25.02 выводит 2.
Мне надо использовать результат запроса в коде VBA. Поэтому я написал код для выборки количества праздников с выводом в поле формы:
Код: vbnet
1.
2.
3.
4.
5.
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.
...
Рейтинг: 0 / 0
количество строк в запросе
    #39147976
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jediAlexя написал код
А теперь напиши нормально:
Код: vbnet
1.
2.
3.
Dim strSQL as string
strSQL = ...
Set rs = CurrentDb.OpenRecordset(strSQL)


Такая форма позволит, остановив выполнение, посмотреть полученный текст запроса, и даже выполнить его напрямую. Что, в свою очередь, позволит быстро и без потерь обнаружить свою ошибку.
...
Рейтинг: 0 / 0
количество строк в запросе
    #39147977
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И да - точка останова позволит понять, когда именно выполняется данный код.
...
Рейтинг: 0 / 0
количество строк в запросе
    #39147981
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
извиняюсь, забыл указать событие. Код выполняется на событии ДатаОкончания.AfterUpdate()
...
Рейтинг: 0 / 0
количество строк в запросе
    #39147990
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jediAlex,
а так попробуй
Код: sql
1.
2.
3.
4.
5.
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
...
Рейтинг: 0 / 0
количество строк в запросе
    #39147996
jediAlexизвиняюсь, забыл указать событие. Код выполняется на событии ДатаОкончания.AfterUpdate() еще надо иметь ввиду, что ваш If ... >0 запрещает менять Поле130, если праздников за выбранный период нет.
поэтому если "15.01 по 25.02 выводит 5" а потом вы меняете 25.02 на 17.01 - и при этом с "15.01 по 17.01" у вас празников нет, то у вас, согласно вашему коду, в Поле130 останется 5.
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148011
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал. ругается на строку
Код: vbnet
1.
Me.Поле130 = rs.Fields(0)

: "Невозможно присвоить значение объекту".
Попробовал так:
Код: vbnet
1.
Me.Поле130 = rs.Fields(0).Value

- опять выводит 5...
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148039
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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


покажите, что в дебаг пишет (для обоих ваших вариантов дат)
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148043
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jediAlex,
а чё не так (может я что-то не понимаю)
Код: vbnet
1.
Me.Поле130 = DCount("код", "праздники", "дата>=#" & Format(Me.начало, "mm\/dd\/yy") & "#  and дата<#" & Format(Me.конец, "mm\/dd\/yy") & "#")
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148055
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я понял, за цифра в результате за проса - количество заполненных строк, но без учета условия. Добавил еще строку - теперь 6 строк и результат запроса - тоже 6...а почему условие не работает?
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148060
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
опять ругается на строке
Код: vbnet
1.
Me.Поле130 = rs.Fields(0).Value

,что не может присвоить значение объекту...что за...
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148064
jediAlexопять ругается на строке
Код: vbnet
1.
Me.Поле130 = rs.Fields(0).Value

,что не может присвоить значение объекту...что за...Me.Поле130 - это обычный TextBox?
что у него написано в свойстве "Данные" (ControlSource)?
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148070
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, с полем разобрался, попробовал предложенный вариант кода...опять хрень...опять выводит 6...а праздников всего2,например 22 и 23 февраля...
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148080
jediAlexда, с полем разобрался, попробовал предложенный вариант кода...опять хрень...опять выводит 6...а праздников всего2,например 22 и 23 февраля...ответ где-то там:непоймучкаDebug.Print SQL
Debug.Print "Count=" & rs.Fields(0).Value
покажите, что в дебаг пишет (для обоих ваших вариантов дат)
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148083
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дебаг выдал следующее:
Count=6
SELECT Count(Код) AS КолВых FROM ПраздничныеДаты WHERE Дата>=#01/08/2016# AND Дата<=#02/27/2016#
Count=6
откуда 6? вот что в таблице:
1 21.02.2016
2 22.02.2016
3 23.02.2016
4 25.02.2015
5 07.03.2015
6 08.03.2015
Если задаю интервал до 21.02,то выводит 0,если до 22.02 или 23.02 или позже - то 6... почему все записи учитываются?
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148107
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jediAlex,
Count без группировки? Сгруппируются ли записи если в SQL присутствует ключ(код)
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148112
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
запрос
Код: plsql
1.
2.
3.
SELECT Count(ПраздничныеДаты.Код) AS Выражение1
FROM ПраздничныеДаты
WHERE (((ПраздничныеДаты.Дата)>=[ДатаНачала] And (ПраздничныеДаты.Дата)<=[ДатаОкончания]));


выполняется правильно никаких группировок нет...
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148113
jediAlexдебаг выдал следующее:
Count=6
SELECT Count(Код) AS КолВых FROM ПраздничныеДаты WHERE Дата>=#01/08/2016# AND Дата<=#02/27/2016#
Count=6
откуда 6? вот что в таблице:
1 21.02.2016
2 22.02.2016
3 23.02.2016
4 25.02.2015
5 07.03.2015
6 08.03.2015
Если задаю интервал до 21.02,то выводит 0,если до 22.02 или 23.02 или позже - то 6... почему все записи учитываются?
DEBUGSELECT Count(Код) AS КолВых FROM ПраздничныеДаты WHERE Дата>=#01/15/2016# AND Дата<=#02/20/2016#
Count=0
SELECT Count(Код) AS КолВых FROM ПраздничныеДаты WHERE Дата>=#01/15/2016# AND Дата<=#02/21/2016#
Count=1
SELECT Count(Код) AS КолВых FROM ПраздничныеДаты WHERE Дата>=#01/15/2016# AND Дата<=#02/22/2016#
Count=2
SELECT Count(Код) AS КолВых FROM ПраздничныеДаты WHERE Дата>=#01/15/2016# AND Дата<=#02/23/2016#
Count=3что я делаю не так?
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148116
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня пример не открывается выдается ошибка
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148118
jediAlexу меня пример не открывается выдается ошибкаваш пример выложите
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148223
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
открылся все таки пример, пробую - та же хрень... пишет 6 и все...предложенный пример запустил, да, все четко, у меня бесполезно... задаю интервал например с 20.01.16 по 26.02.16 дебаг пишет:
Count=0
SELECT Count(Êîä) AS ÊîëÂûõ FROM Ïðàçäíè÷íûåÄàòû WHERE Äàòà>=#01/22/2016# AND Äàòà<=#02/26/2016#
Count=0
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148242
jediAlexоткрылся все таки пример, пробую - та же хрень... пишет 6 и все...предложенный пример запустил, да, все четко, у меня бесполезно... задаю интервал например с 20.01.16 по 26.02.16 дебаг пишет:
Count=0
SELECT Count(Êîä) AS ÊîëÂûõ FROM Ïðàçäíè÷íûåÄàòû WHERE Äàòà>=#01/22/2016# AND Äàòà<=#02/26/2016#
Count=0
так и покажите ваш пример
таблица+форма, желательно не выше msa2007
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148257
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот у меня акс увы 2013...
могу выложить только код формы полностью с предложенной функцией tst:
Код: 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.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
Function tst()
On Error GoTo err1
    
    If IsNull(Me.ДатаНачала) Or IsNull(Me.ДатаОкончания) Then
        
        Me.Поле130.Value = Null
    
    Else
        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
    End If
    Exit Function
    
err1:
    MsgBox Err.Description, 48, Err.Number
    Exit Function
End Function
Private Sub Form_Error(DataErr As Integer, Response As Integer)
DoCmd.SetWarnings False
End Sub

Private Sub ВремяНаДокумент_AfterUpdate()
КолЧасовПлан = ВремяНаДокумент
End Sub

Private Sub ВремяНаДокумент_Click()
КолЧасовПлан = ВремяНаДокумент
End Sub

Private Sub Form_Load()
 Me.Repaint
End Sub

Private Sub Form_Open(Cancel As Integer)
 Me.Repaint
End Sub

Private Sub ДатаНачала_AfterUpdate()
Dim workdays As Integer
Dim d1, d2, i As Date
Dim wd As Integer
tst
If ДатаНачала <> "" Then
d1 = ДатаНачала
End If
If ДатаОкончания <> "" Then
d2 = ДатаОкончания
End If
workdays = 0
If ДатаНачала <> "" Then
For i = d1 To d2
wd = Weekday(i, 0)
If wd <> 1 And wd <> 7 Then workdays = workdays + 1
Next i
КоличествоДней = workdays - Me.Поле130
КолДнейПлан = workdays - Me.Поле130
End If
End Sub

Private Sub ДатаОкончания_AfterUpdate()
Dim workdays As Integer
Dim d1, d2, i As Date
Dim wd As Integer
tst
If ДатаНачала <> "" Then
d1 = ДатаНачала
End If
If ДатаОкончания <> "" Then
d2 = ДатаОкончания
End If
workdays = 0
For i = d1 To d2
wd = Weekday(i, 1)
If wd <> 1 And wd <> 7 Then workdays = workdays + 1
Next i
КоличествоДней = workdays - Me.Поле130.Value
КолДнейПлан = workdays - Me.Поле130.Value
End Sub

у меня по прежнему выбираются все записи...
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148262
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БД приложить не могу - слишком большой объем...
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148271
jediAlexвот у меня акс увы 2013...
ну давайте 2013,
всю вашу базу не надо
создайте новый файл,
импортируйте в него таблицу и форму из вашей базы
заархивируйте в zip - и архив сюда
...
Рейтинг: 0 / 0
количество строк в запросе
    #39148283
вдогонку -
если минут за 15 не успеете, то тогда уж не спешите,
тогда я это уже не смогу посмотреть раньше след.понедельника

но выложить архив все равно советую - может кто-то еще сможет глянуть,
хотя шибко модный формат бд сужает круг способных его отрыть.

я бы рекомендовал вам при создании нового файла бд (в который вы импортируете тестовые объекты из вашей основной бд)
указать ему более распространенный формат (например msa2000) - там есть такая возможность.
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / количество строк в запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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