Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / количество строк в запросе / 25 сообщений из 27, страница 1 из 2
15.01.2016, 09:54
    #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
15.01.2016, 10:09
    #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
15.01.2016, 10:10
    #39147976
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
количество строк в запросе
jediAlexя написал код
А теперь напиши нормально:
Код: vbnet
1.
2.
3.
Dim strSQL as string
strSQL = ...
Set rs = CurrentDb.OpenRecordset(strSQL)


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

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

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

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

,что не может присвоить значение объекту...что за...Me.Поле130 - это обычный TextBox?
что у него написано в свойстве "Данные" (ControlSource)?
...
Рейтинг: 0 / 0
15.01.2016, 11:34
    #39148070
jediAlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
количество строк в запросе
да, с полем разобрался, попробовал предложенный вариант кода...опять хрень...опять выводит 6...а праздников всего2,например 22 и 23 февраля...
...
Рейтинг: 0 / 0
15.01.2016, 11:43
    #39148080
количество строк в запросе
jediAlexда, с полем разобрался, попробовал предложенный вариант кода...опять хрень...опять выводит 6...а праздников всего2,например 22 и 23 февраля...ответ где-то там:непоймучкаDebug.Print SQL
Debug.Print "Count=" & rs.Fields(0).Value
покажите, что в дебаг пишет (для обоих ваших вариантов дат)
...
Рейтинг: 0 / 0
15.01.2016, 11:44
    #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
15.01.2016, 12:00
    #39148107
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
количество строк в запросе
jediAlex,
Count без группировки? Сгруппируются ли записи если в SQL присутствует ключ(код)
...
Рейтинг: 0 / 0
15.01.2016, 12:07
    #39148112
jediAlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
количество строк в запросе
запрос
Код: plsql
1.
2.
3.
SELECT Count(ПраздничныеДаты.Код) AS Выражение1
FROM ПраздничныеДаты
WHERE (((ПраздничныеДаты.Дата)>=[ДатаНачала] And (ПраздничныеДаты.Дата)<=[ДатаОкончания]));


выполняется правильно никаких группировок нет...
...
Рейтинг: 0 / 0
15.01.2016, 12:11
    #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
15.01.2016, 12:13
    #39148116
jediAlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
количество строк в запросе
у меня пример не открывается выдается ошибка
...
Рейтинг: 0 / 0
15.01.2016, 12:16
    #39148118
количество строк в запросе
jediAlexу меня пример не открывается выдается ошибкаваш пример выложите
...
Рейтинг: 0 / 0
15.01.2016, 13:50
    #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
15.01.2016, 14:08
    #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
15.01.2016, 14:23
    #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
15.01.2016, 14:25
    #39148262
jediAlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
количество строк в запросе
БД приложить не могу - слишком большой объем...
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / количество строк в запросе / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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