Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как задать промежуток дат в запросе select / 25 сообщений из 37, страница 1 из 2
28.07.2019, 08:08
    #39842259
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
Добрый день.

Me.date_s - дата начала периода поиска
Me.date_to - дата, по которую ищем.
date_contract - дата договора в таблице


Вопрос : Как в запрос добавить условие поиска по date_contract в промежутке от date_s до date_to
Код: vbnet
1.
2.
3.
4.
5.
6.
If Not IsNull(numb_contract) And Not IsNull(date_s) And Not IsNull(customer) Then 'номер договора и дата, и заказчик
s = "select * from z_tab_search_project_date where customer =" & con & " and numb_contract like '*" & nc & "*'"
End If

DoCmd.OpenReport "o_tab_search_project", acViewReport
Reports.o_tab_search_project.Report.RecordSource = s



пробовал через between, не получилось
в инете вычитал такой, вариант, но он тоже не сработал
Код: vbnet
1.
(Not ((date_contract < Me.date_s) Or (date_contract > Me.date_to)))
...
Рейтинг: 0 / 0
28.07.2019, 09:49
    #39842263
ROI
ROI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
...
Рейтинг: 0 / 0
28.07.2019, 10:05
    #39842264
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
ROI, видел подобные темы.

Делал, но не работает
Код: vbnet
1.
s = "select * from z_tab_search_project where customer =" & con & " and numb_contract like '*" & nc & "*' and date_contract between Me.date_s and Me.date_to"
...
Рейтинг: 0 / 0
28.07.2019, 10:07
    #39842265
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
а именно проявляется так, отчет открывается в режиме конструктора и в поле "источник записей" стоит
Код: vbnet
1.
s = "select * from z_tab_search_project where customer =" & con & " and numb_contract like '*" & nc & "*' and date_contract between Me.date_s and Me.date_to"


хотя, если период даты убираю, то отчет норм открывается
...
Рейтинг: 0 / 0
28.07.2019, 10:25
    #39842267
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
quickstar,
Код: vbnet
1.
"...where date_contract>=#" & format(dateS,"mm\/dd\/yy") & "# and date_contract<=#" & format(datePO,"mm\/dd\/yy") & "#" 

тынц пункт 3
...
Рейтинг: 0 / 0
28.07.2019, 10:44
    #39842270
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
sdku, благодарю за решение, и в тоже время пока задача не решилась.
отчет всё так же открывается в режиме конструктора.
предполагаю, что такой запрос
Код: vbnet
1.
s = "select * from z_tab_search_project where date_contract>=#" & Format(date_s, "mm\/dd\/yyyy") & "# and date_contract<=#" & Format(date_to, "mm\/dd\/yyyy") & "#"""


не может access переварить в качестве "источника данных", возможно, спец символы не пропускает
Код: vbnet
1.
eports.o_tab_search_project.Report.RecordSource = s



а как можно по-иному сделать выгрузку и её поставить в качестве источника данных отчета?
...
Рейтинг: 0 / 0
28.07.2019, 10:46
    #39842271
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
...
Рейтинг: 0 / 0
28.07.2019, 11:47
    #39842279
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
quickstarа как можно по-иному сделать выгрузку и её поставить в качестве источника данных отчета?
похожу, что у вас лищние кавычки
Format(date_to, "mm\/dd\/yyyy") & "#"
...
Рейтинг: 0 / 0
28.07.2019, 12:06
    #39842280
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
ПЕНСИОНЕРКА, да, Вы правы, помогло.
Но я так и не понял почему лишние.
access их сам добавлял, стираю, опять добавляет.
пришлось удалить две кавычки и select остался "не закрытым"

работает, спасибо и на этом)
...
Рейтинг: 0 / 0
28.07.2019, 13:22
    #39842291
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
Прошу еще помочь.
Вот так работает, но вопрос в том, что если con равна NULL, то ошибку выбивает.
Вопрос : как сконструировать запрос, чтобы при con = NULL работало?

Код: vbnet
1.
2.
3.
4.
5.
s = "select * " _
      & "from z_tab_search_project " _
      & "where customer =" & [color=red]con [/color]& "" _
      & " OR numb_contract like '*" & nc & "*'" _
      & " OR date_contract>=#" & Format(date_s, "mm\/dd\/yyyy") & "# and date_contract<=#" & Format(date_to, "mm\/dd\/yyyy") & "#"



Думал в сторону, что если NULL то подставлять другой параметр, но тогда слишком сложно получается.
...
Рейтинг: 0 / 0
28.07.2019, 13:39
    #39842293
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
quickstar,
появление кавычек-чудо,а я чудеса объяснять не умею(разве Вы что-то писали,акс поставил кавычки в конце строки,затем середина была удалена,а кавычка в конце строки осталась и в середину что-то было дописано)
Как вариант-посмотрите(форма "выбор"):
...
Рейтинг: 0 / 0
28.07.2019, 13:42
    #39842295
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
sdku, спасибо. Теперь стало понятно по датам.
А вот когда select по нескольким where и только в момент запроса понятно какие поля с условиями отбора заполнил пользователь.
вот тут не понято как организовать запрос, возможно, Вы из опыта знаете
...
Рейтинг: 0 / 0
28.07.2019, 13:46
    #39842296
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
sdku, сам запрос работает, а вот если хотя бы один из трех параметров отбора пустой, то выбивает ошибку.
не пойму, как сделать, чтобы если хотя бы один параметр введен, то запрос выполнялся

пробовал вот так, ID же по-любому не нулевое, но не сработало
Код: vbnet
1.
2.
3.
4.
5.
6.
s = "select * " _
            & "from z_tab_search_project " _
            & "where id_project > 0 " _
            & " OR customer = " & con & "" _
            & " OR numb_contract = '*" & nc & "*'" _
            & " OR date_contract>=#" & Format(date_s, "mm\/dd\/yyyy") & "# and date_contract<=#" & Format(date_to, "mm\/dd\/yyyy") & "#"
...
Рейтинг: 0 / 0
28.07.2019, 13:54
    #39842297
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
quickstar....Думал в сторону, что если NULL то подставлять другой параметр, но тогда слишком сложно получается.правильно думали-до передачи критериев(значений полей)проверить их заполнение-а дальше варианты:
-если оба пусты не открывать отчет с выводом MsgBox
-если "С" пустое а "ПО" заполнено передать в "С" заведомо раннюю дату типа 1.1.1960
-если "С" заполнено а "ПО" пустое передать в "ПО" заведомо позднюю дату типа 1.1.2060
короче решайте сами
...
Рейтинг: 0 / 0
28.07.2019, 14:06
    #39842299
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
quickstar,
Я же показал как это делать без запроса,а Вы все о нем(запросе) толкуете
Почитайте справку про OpenReport-не помню сколько,знаю что много-Вам хватит,символов может быть в четвертом аргументе и если критерий не один
используйте в нем операторы AND и OR
...
Рейтинг: 0 / 0
28.07.2019, 14:13
    #39842304
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
quickstar....А вот когда select по нескольким where и только в момент запроса понятно какие поля с условиями отбора заполнил пользователь.
вот тут не понято как организовать запрос, возможно, Вы из опыта знаете
формировать строку WHERE и использовать ее при открытии отчета-гляньте как её сформировать если часть полей пуста(ф-таблица1):
...
Рейтинг: 0 / 0
28.07.2019, 14:24
    #39842307
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
sdku, благодарю, через фильтр тоже буду знать.
я решил вот таким способом:
Код: 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.
Dim nc, ds, dt, con, s
    
    If Not IsNull(Me.numb_contract) Then
        Me.numb_contract.SetFocus
        nc = " AND numb_contract like '*" & Me.numb_contract.Text & "*'"
    End If
    
    If Not IsNull(Me.date_s) Then
        Me.date_s.SetFocus
        ds = " AND date_contract>=#" & Format(date_s, "mm\/dd\/yyyy") & "# and date_contract<=#" & Format(date_to, "mm\/dd\/yyyy") & "#"
    End If

    If Not IsNull(Me.customer) Then
        Me.customer.SetFocus
        con = " AND customer = " & Me.customer & ""
    End If
    
    If numb_contract = "" Or date_s = "" Or date_to = "" Or customer = "" Then
        MsgBox ("Введите данные для поиска.")
        Exit Sub
    Else
        s = "select * " _
            & "from z_tab_search_project " _
            & "where id_project > 0 " _
            & con _
            & nc _
            & ds
    End If
    DoCmd.OpenReport "o_tab_search_project", acViewReport
    Reports.o_tab_search_project.Report.RecordSource = s
...
Рейтинг: 0 / 0
28.07.2019, 15:11
    #39842309
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
quickstarsdku, благодарю, через фильтр тоже буду знать.
я решил вот таким способом:....
И что это работает???
Любопытства ради распечатайте и покажите "s"
...
Рейтинг: 0 / 0
28.07.2019, 15:40
    #39842313
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
quickstar,
предпочитаю немного иную запись условия(не требует выбора обеих дат)
Код: 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.
Dim  s1,s2,sd
    sd="\#mm\/dd\/yyyy\#"
    s1=""
    s2="" & Me.numb_contract
    if len(s2)>0 Then
        s1=s1 & " AND numb_contract like '*" & s2 & "*'"
    End If
    
    s2="" & Me.date_s
    if len(s2)>0 Then
        s1=s1 & " AND date_contract>=" & Format(date_s, sd) 
     endif

     s2="" & Me.date_to
     if len(s2)>0 Then
        s1=s1 & " and date_contract<=" & Format(date_to, sd) 
    End If

    s2="" & Me.customer
	 if len(s2)>0 Then
        s1=s1 & " AND customer = " & s2 & ""
    End If
    
    If len(s1)=0 Then
        MsgBox ("Введите данные для поиска.")
        Exit Sub
    endif
        s = "select * from z_tab_search_project " _
            & " where  " & mid(s1,5)
    
...
Рейтинг: 0 / 0
28.07.2019, 15:49
    #39842315
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
sdku, отлично работает!
а что значит "распечатать s"?
я протестировал все комбинации (по очереди удаляя данные с полей, комбинируя их) и каждый раз сработало как нужно.

опирался на то, что если поля нет, то в запросе ничего и не добавляется
...
Рейтинг: 0 / 0
28.07.2019, 16:08
    #39842317
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
quickstarа что значит "распечатать s"?
В процедуре после присвоения переменной S значения написать:
Код: vbnet
1.
Debug.Print s 


значение S отобразится в окне отладке редактора VBA
Редактор VBA>View>Immediate Window(ctr+G)
...
Рейтинг: 0 / 0
28.07.2019, 18:44
    #39842329
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
sdku, ррработает как автомат калашникова)
...
Рейтинг: 0 / 0
28.07.2019, 19:26
    #39842335
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
quickstar,
в показанном на скрине случае будут найдены numb_contract:111,212,313 и еще много других содержащих "1"-Вам именно такой поиск нужен?
...
Рейтинг: 0 / 0
28.07.2019, 19:56
    #39842337
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
вдогонку:а где переменная dc (с датами)-ведь когда date_s и date_po не пусто(а что будет если date_s пусто?) dc инициализируется
Закомментируйте строку On Error GoTo er1, саму инструкцию er1 и посмотрите где споткнется(остановится) процедура
...
Рейтинг: 0 / 0
29.07.2019, 06:28
    #39842388
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать промежуток дат в запросе select
sdku, да, работает прям как надо.

Однако, не работает если сделать вложенный запрос.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
strSQL = "select * " _
            & "from z_tab_search_consumer " _
            & "where id_consumer > 0" _
            & nd _
            & ul _
            & fl _
            & inn_n _
            & cp _
            & ao
        

        strSQL1 = "select * " _
            & "from " _
            & "(" _
            & strSQL _
            & ") " _
            & "where id_consumer > 0 " _
            & "GROUP BY id_consumer;" _

DoCmd.OpenReport "o_tab_search_consumer", acViewReport
Reports.o_tab_search_consumer.Report.RecordSource = strSQL1


Debug.Print показывает
Код: sql
1.
select * from (select * from z_tab_search_consumer where id_consumer > 0 AND numb_contract like '*1*') where id_consumer > 0 GROUP BY id_consumer;


всё же верно, почему не работает?
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как задать промежуток дат в запросе select / 25 сообщений из 37, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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