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

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
Как задать промежуток дат в запросе select
    #39842263
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842264
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как задать промежуток дат в запросе select
    #39842265
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а именно проявляется так, отчет открывается в режиме конструктора и в поле "источник записей" стоит
Код: 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
Как задать промежуток дат в запросе select
    #39842267
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar,
Код: vbnet
1.
"...where date_contract>=#" & format(dateS,"mm\/dd\/yy") & "# and date_contract<=#" & format(datePO,"mm\/dd\/yy") & "#" 

тынц пункт 3
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842270
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как задать промежуток дат в запросе select
    #39842271
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842279
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstarа как можно по-иному сделать выгрузку и её поставить в качестве источника данных отчета?
похожу, что у вас лищние кавычки
Format(date_to, "mm\/dd\/yyyy") & "#"
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842280
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА, да, Вы правы, помогло.
Но я так и не понял почему лишние.
access их сам добавлял, стираю, опять добавляет.
пришлось удалить две кавычки и select остался "не закрытым"

работает, спасибо и на этом)
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842291
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу еще помочь.
Вот так работает, но вопрос в том, что если 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
Как задать промежуток дат в запросе select
    #39842293
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar,
появление кавычек-чудо,а я чудеса объяснять не умею(разве Вы что-то писали,акс поставил кавычки в конце строки,затем середина была удалена,а кавычка в конце строки осталась и в середину что-то было дописано)
Как вариант-посмотрите(форма "выбор"):
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842295
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, спасибо. Теперь стало понятно по датам.
А вот когда select по нескольким where и только в момент запроса понятно какие поля с условиями отбора заполнил пользователь.
вот тут не понято как организовать запрос, возможно, Вы из опыта знаете
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842296
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как задать промежуток дат в запросе select
    #39842297
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar....Думал в сторону, что если NULL то подставлять другой параметр, но тогда слишком сложно получается.правильно думали-до передачи критериев(значений полей)проверить их заполнение-а дальше варианты:
-если оба пусты не открывать отчет с выводом MsgBox
-если "С" пустое а "ПО" заполнено передать в "С" заведомо раннюю дату типа 1.1.1960
-если "С" заполнено а "ПО" пустое передать в "ПО" заведомо позднюю дату типа 1.1.2060
короче решайте сами
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842299
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar,
Я же показал как это делать без запроса,а Вы все о нем(запросе) толкуете
Почитайте справку про OpenReport-не помню сколько,знаю что много-Вам хватит,символов может быть в четвертом аргументе и если критерий не один
используйте в нем операторы AND и OR
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842304
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar....А вот когда select по нескольким where и только в момент запроса понятно какие поля с условиями отбора заполнил пользователь.
вот тут не понято как организовать запрос, возможно, Вы из опыта знаете
формировать строку WHERE и использовать ее при открытии отчета-гляньте как её сформировать если часть полей пуста(ф-таблица1):
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842307
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как задать промежуток дат в запросе select
    #39842309
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstarsdku, благодарю, через фильтр тоже буду знать.
я решил вот таким способом:....
И что это работает???
Любопытства ради распечатайте и покажите "s"
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842313
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как задать промежуток дат в запросе select
    #39842315
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, отлично работает!
а что значит "распечатать s"?
я протестировал все комбинации (по очереди удаляя данные с полей, комбинируя их) и каждый раз сработало как нужно.

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


значение S отобразится в окне отладке редактора VBA
Редактор VBA>View>Immediate Window(ctr+G)
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842329
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, ррработает как автомат калашникова)
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842335
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar,
в показанном на скрине случае будут найдены numb_contract:111,212,313 и еще много других содержащих "1"-Вам именно такой поиск нужен?
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842337
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вдогонку:а где переменная dc (с датами)-ведь когда date_s и date_po не пусто(а что будет если date_s пусто?) dc инициализируется
Закомментируйте строку On Error GoTo er1, саму инструкцию er1 и посмотрите где споткнется(остановится) процедура
...
Рейтинг: 0 / 0
Как задать промежуток дат в запросе select
    #39842388
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
25 сообщений из 37, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как задать промежуток дат в запросе select
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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