powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как отформатировать запрос в VBA?
32 сообщений из 32, показаны все 2 страниц
Как отформатировать запрос в VBA?
    #39273851
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги подскажите пожалуйста, как отформатировать запрос в VBA!
Есть запрос, на основе которого сделана подчиненная форма, в запросе параметр берется из поля в основной форме (поле типа Дата и называется Me.fi_date1)
Изначальный копи-паст запроса в VBA:
Код: sql
1.
2.
3.
RS.Source = "SELECT Наряды.* " & _
            "FROM Наряды " & _
            "WHERE IIf(isnull(Forms!Наряды!fi_date1) or Forms!Наряды!fi_date1 = "", Наряды!Дата, Наряды!Дата >= Forms!Наряды!fi_date1) = True;"



После доработки получился вот такой запрос, но он тоже выдает ошибку
Код: sql
1.
2.
3.
RS.Source = "SELECT Наряды.* " & _
            "FROM Наряды " & _
            "WHERE IIf(isnull(#" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "#) or #" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "# = #" & "" & "#, Наряды!Дата, Наряды!Дата >= #" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "#) = True;"



что я сделал не так?
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39273893
Исходя из вашего условия при пустом поле на форме должны возвращаться записи, где Дата = True? Это условие не выполнимо, видимо вы хотели вернуть ВСЕ записи. Тогда лучше так:
Код: plsql
1.
...WHERE (Forms!Наряды!fi_date1 Is Null) or (Дата >= Forms!Наряды!fi_date1)

PS. Поле на форме обязательно должно иметь формат даты.
PPS. Условие Forms!Наряды!fi_date1 = "" - лишнее.
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39273916
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ), добрый день! Спасибо за помощь!
В моем запросе, если на форме поле Me.fi_date1 пустое или isnull, то берутся ВСЕ данные из таблицы, просто у меня вопрос именно как отформатировать правильно запрос
Код: sql
1.
2.
3.
RS.Source = "SELECT Íàðÿäû.* " & _
            "FROM Íàðÿäû " & _
            "WHERE IIf(isnull(#" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "#), not isnull(Íàðÿäû!Äàòà), Íàðÿäû!Äàòà >= #" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "#) = True;"



вот этот вариант выдает синтаксическую ошибку(((
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39273921
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с крокозябрами получилось((
Код: sql
1.
2.
3.
RS.Source = "SELECT Наряды.* " & _
            "FROM Наряды " & _
            "WHERE IIf(isnull(#" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "#), not isnull(Наряды!Дата), Наряды!Дата >= #" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "#) = True;"
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39273960
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-,
поясните,что именно Вы подразумеваете под словами "отформатировать запрос" (ведь в запросе, кроме как,изменить ширину полей, шрифт,параметры печати и сделать-то больше ничего нельзя
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39273972
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,
В моем запросе Access ругается что неверный синтаксис Даты
Код: sql
1.
2.
3.
4.
5.
RS.Source = "SELECT Наряды.* " & _
            "FROM Наряды " & _
            "WHERE IIf(isnull(#" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "#) or #" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "# = #" & "" & "#, " & _
            "Наряды!Дата, " & _
            "Наряды!Дата >= #" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "#) = True;"



Вот этот запрос. Я и спрашиваю у форумчан, верно ли я проставил значки решетки # и пр?
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39273982
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И поймите,что условие отбора справедливо для ВСЕХ записей запроса и оно не может измениться в зависимости от значения какого-то поля в записи(т.к это оно меняется в записях)
Если какое-то поле пустое,то отбери такие-то записи,а остальные скрой,а если не пустое то отбери такие-то а другие скрой, а как это сделать в одном запросе?(Нужен простой запрос с параметром)
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39273987
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПыСы-это вычисляемое поле,а не условие отбора
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274004
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,
это только часть моего запроса (этот запрос - источник данных подчиненной формы),
весь запрос выглядит так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT Наряды.*
FROM Наряды
WHERE (((IIf(IsNull(Формы!Наряды!fi_date2) Or Формы!Наряды!fi_date2="",Наряды!Дата>0,Наряды!Дата<=Формы!Наряды!fi_date2))=True) 
And ((IIf(IsNull(Forms!Наряды!fi_SN) Or Forms!Наряды!fi_SN="",Наряды![SN устройства]<>"-1",Наряды![SN устройства]=Forms!Наряды!fi_SN))=True) 
And ((IIf(IsNull(Forms!Наряды!fi_ID) Or Forms!Наряды!fi_ID="",Наряды![ID устройства]<>"-1",Наряды![ID устройства]=Forms!Наряды!fi_ID))=True) 
And ((IIf(IsNull(Формы!Наряды!fi_date1) Or Формы!Наряды!fi_date1="",Наряды!Дата>0,Наряды!Дата>=Формы!Наряды!fi_date1))=True)
And ((IIf(IsNull(Формы!Наряды!fi_isp) Or Формы!Наряды!fi_isp="",Наряды!Исполнитель<>"-1",Наряды!Исполнитель=Формы!Наряды!fi_isp))=True))
ORDER BY Наряды.Дата, Наряды.Исполнитель;



по части полей я уже в VBA сделал запрос, работает нормально
Код: sql
1.
2.
3.
4.
5.
RS.Source = "SELECT Наряды.* " & _
            "FROM Наряды " & _
            "WHERE IIf(isnull('" & Me.fi_isp & "') or '" & Me.fi_isp & "'='" & "" & "', Наряды!Исполнитель, Наряды!Исполнитель = '" & Me.fi_isp & "') = True " & _
            "And IIf(isnull('" & Me.fi_SN & "') or '" & Me.fi_SN & "'='" & "" & "', Наряды![SN устройства], Наряды![SN устройства] = '" & Me.fi_SN & "') = True " & _
            "And IIf(isnull('" & Me.fi_ID & "') or '" & Me.fi_ID & "'='" & "" & "', Наряды![ID устройства], Наряды![ID устройства] = '" & Me.fi_ID & "') = True;"


осталось доделать 2 поля с Датами (начало и конец периода) - но выдается ошибка синтаксиса - вот поэтому я и задал здесь упрощенный вариант моего запроса.
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274008
авторВ моем запросе Access ругается что неверный синтаксис Даты

гарантированное понимание Access'om даты:

"[Поле запроса типа дата] = #" & Dateserial(2016,07,14) & "# и так далее по запросу

а вообще имхо лучше сначала отработать запрос в бланке запросов, а потом его форматировать для вставки в переменную

ИМХО проблем меньше
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274021
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-,

Кто же это научил вас так условие WHERE составлять?!
Уже второй случай за два дня....
Жуть какая-то...
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274039
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle, у меня на основной форме 5 полей (фильтров) и подчиненная формочка основанная на этом большом запросе, так что без такого условия отбора никак(((
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274059
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-,

Уже даже не говоря о построенных выражениях, но....
Но зачем Вы вносите проверки значений полей формы внутрь запроса,
ведь можно проверять эти значения раньше, при построении запроса,
и запрос примет уже готовый вид.
Да еще в IsNull вставляете строки в кавычках... Ох...
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274061
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вопрос остается открытым(((, что неверно в синтаксисе Даты в запросе:
Код: sql
1.
2.
3.
4.
5.
RS.Source = "SELECT Наряды.* " & _
            "FROM Наряды " & _
            "WHERE IIf(isnull(#" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "#) or #" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "# = #" & "" & "#, " & _
            "Наряды!Дата, " & _
            "Наряды!Дата >= #" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "#) = True;"
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274074
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-,

А что такое здесь Source? К какому объекту Вы это применяете?
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274083
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-,

У Вас там прямо кладезь.
Вот этим думаете проверить поле даты на пустое значение?
Код: sql
1.
..... Format(Me.fi_date1, "dd\/mm\/yyyy") & "# = #" & "" & "#, "..... 

А потом еще дату из таблицы, Наряды!Дата, собираетесь сравнивать с True?
Кстати, нужна точка, а не восклицательный знак.
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274292
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle-SWAN-,

У Вас там прямо кладезь.
Вот этим думаете проверить поле даты на пустое значение?
Код: sql
1.
..... Format(Me.fi_date1, "dd\/mm\/yyyy") & "# = #" & "" & "#, "..... 

А потом еще дату из таблицы, Наряды!Дата, собираетесь сравнивать с True?
Кстати, нужна точка, а не восклицательный знак.

А как надо проверить дату на пустое значение?
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274378
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите. Может, что-нибудь поймете.
И на порядок следования дней и месяцев взгляните.
Код: vbnet
1.
2.
3.
S = "SELECT Наряды.* " & _ 
    "FROM Наряды" & _ 
    IIf(IsNull(Me.fi_date1), "", " WHERE Наряды.Дата>=" & Format(Me.fi_date1, "\#mm\/dd\/yyyy\#")



А что же Вы на вопросы-то не отвечаете?
Вам, значит, все разжуй, а Вы не соизволяете?
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274387
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle,
спасибо!
Но проверки на пустое значение Даты я так и не увидел(((
У вас есть только проверка на Isnull.
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274399
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-, в запросе все пустые значения проверяются одинаково - IS Null
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274401
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-У вас есть только проверка на Isnull.Не путай с функцией.
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274408
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-__Michelle,
спасибо!
Но проверки на пустое значение Даты я так и не увидел(((
У вас есть только проверка на Isnull.Не увидели, значит, это не нужно.
Почитайте Help про дату, как выглядит "пустая" дата.

На вопросы упорно не отвечаете?
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274487
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle-SWAN-,

А что такое здесь Source? К какому объекту Вы это применяете?

на какие вопросы я не ответил?
У меня теперь запрос выглядит так (поля дата1 и дата2 теперь обязательно имеют какое-нибудь значение отличное от пустого и НУЛЛ)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Set RS = New ADODB.Recordset
RS.ActiveConnection = CurrentProject.Connection

RS.Source = "SELECT Наряды.* " & _
            "FROM Наряды " & _
            "WHERE IIf(isnull('" & Me.fi_isp & "') or '" & Me.fi_isp & "'='" & "" & "', Наряды!Исполнитель, Наряды!Исполнитель = '" & Me.fi_isp & "') = True " & _
            "And IIf(isnull('" & Me.fi_SN & "') or '" & Me.fi_SN & "'='" & "" & "', Наряды![SN устройства], Наряды![SN устройства] = '" & Me.fi_SN & "') = True " & _
            "And IIf(isnull('" & Me.fi_ID & "') or '" & Me.fi_ID & "'='" & "" & "', Наряды![ID устройства], Наряды![ID устройства] = '" & Me.fi_ID & "') = True " & _
            "And Наряды.Дата >= #" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "# " & _
            "And Наряды.Дата <= #" & Format(Me.fi_date2, "dd\/mm\/yyyy") & "#;"
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274544
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-,
Не слушаете вы __Michelle.

1. Конструкция isnull('" & Me.fi_isp & "') не имеет смысла, она никогда не будет True. Если Me.fi_isp будет Null, то IsNull('') будет False. Тут должно быть Is Null [fi_ID], где [fi_ID] - поле таблицы
2. Конструкция для даты с # работает только для форматов американского и стандартного: #mm/dd/yyyy# и #yyyy.mm.dd#

В остальные подробности не вдавался, это уж больно глаз режет.
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274560
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShin-SWAN-,
Не слушаете вы __Michelle.

1. Конструкция isnull('" & Me.fi_isp & "') не имеет смысла, она никогда не будет True. Если Me.fi_isp будет Null, то IsNull('') будет False. Тут должно быть Is Null [fi_ID], где [fi_ID] - поле таблицы
2. Конструкция для даты с # работает только для форматов американского и стандартного: #mm/dd/yyyy# и #yyyy.mm.dd#

В остальные подробности не вдавался, это уж больно глаз режет.То есть, как это "не слушайте"?)))
Где Вы в предложенном мной варианте 19412963 увидели критикуемую Вами конструкцию?!
У меня-то как раз IIf(IsNull(Me.fi_date1)..., причем не в теле запроса.
А зачем это туда помещать, когда все решается на стадии формирования запроса?
Если "глаз режут" воображаемые мои недочеты, могу порекомендовать хорошие капли глазные.)))
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274566
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShin,

Ай, простите, там ведь прямо противоположное...
Не "не слушайте", а не слушаете".
Видимо, капли приберегу для себя, пригодятся.)))
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274574
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle,

Уфф, я уже испугался, что описАлся :) Никогда не призывал кого-то не слушать
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274588
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-,
намного более удобный и практичный код с выборкой по любому сочетанию параметров
Код: 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.
Dim s, s1, s2
Set RS = New ADODB.Recordset
RS.ActiveConnection = CurrentProject.Connection

s1 = "SELECT Наряды.* FROM Наряды "
s = ""
If Len(Me.fi_isp & "") > 0 Then

s = s & " and Наряды!Исполнитель = '" & Me.fi_isp & "'"
End If

If Len(Me.fi_SN & "") > 0 Then
s = s & " and Наряды![SN устройства] = '" & Me.fi_SN & "'"
End If

If Len(Me.fi_ID & "") > 0 Then
s = s & " and Наряды![ID устройства] = '" & Me.fi_ID & "'"
End If

If Len(Me.fi_date1 & "") > 0 Then
s = s & " and Наряды.Дата >= #" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "# "
End If

If Len(Me.fi_date2 & "") > 0 Then
s = s & " and Наряды.Дата <= #" & Format(Me.fi_date2, "dd\/mm\/yyyy") & "# "
End If
If Len(s) > 0 Then
s2 = s1 & " where " & Mid(s, 5)
Else
s2 = s1
End If

RS.Source = s2
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274612
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-__Michelle-SWAN-,

А что такое здесь Source? К какому объекту Вы это применяете?

на какие вопросы я не ответил?
У меня теперь запрос выглядит так (поля дата1 и дата2 теперь обязательно имеют какое-нибудь значение отличное от пустого и НУЛЛ)
Код: sql
1.
2.
3.
4.
Set RS = New ADODB.Recordset
RS.ActiveConnection = CurrentProject.Connection

RS.Source = ....

Просто Вы где-то раньше писали, что это источник данных подчиненной формы...

А вопрос, который меня действительно интересует, был такой:
"Кто учит писать такие конструкции в WHERE?".
IIf(.....)=True
Дело в том, что именно такое впервые увидела позавчера у одной из спрашивающих участниц.
И вот снова такое. Уже система. Значит, где-то именно такому учат.
Интересно, откуда это взялось.
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274657
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle,
Вообще у меня задача стояла следующая:
Форма с подчиненной формочкой + 5 полей-фильтров
После выбора необходимых данных надо было отправить в Outlook письма по каждой строке выборки - т.е одна строка - одно письмо.
Может и можно было бы решить эту задачку по-другому.

ПС: Где меня научили составлять такие запросы - вопрос сложный, уже не помню, но первый раз такое у меня появилось году в 2006, наверно где-то здесь на форуме увидел, Access'у учился сам по книгам и сайтам, ну и этот форум конечно.
И вот теперь я снова столкнулся с программированием в access, вот и брал из старых своих прог.
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39274669
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-,

Да я не про составление запросов. Неужели Вы до сих пор не видите,
насколько избыточная, ненужная и просто неверная конструкция в Where?
...
Рейтинг: 0 / 0
Как отформатировать запрос в VBA?
    #39276156
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА-SWAN-,
намного более удобный и практичный код с выборкой по любому сочетанию параметров
Код: 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.
Dim s, s1, s2
Set RS = New ADODB.Recordset
RS.ActiveConnection = CurrentProject.Connection

s1 = "SELECT Наряды.* FROM Наряды "
s = ""
If Len(Me.fi_isp & "") > 0 Then

s = s & " and Наряды!Исполнитель = '" & Me.fi_isp & "'"
End If

If Len(Me.fi_SN & "") > 0 Then
s = s & " and Наряды![SN устройства] = '" & Me.fi_SN & "'"
End If

If Len(Me.fi_ID & "") > 0 Then
s = s & " and Наряды![ID устройства] = '" & Me.fi_ID & "'"
End If

If Len(Me.fi_date1 & "") > 0 Then
s = s & " and Наряды.Дата >= #" & Format(Me.fi_date1, "dd\/mm\/yyyy") & "# "
End If

If Len(Me.fi_date2 & "") > 0 Then
s = s & " and Наряды.Дата <= #" & Format(Me.fi_date2, "dd\/mm\/yyyy") & "# "
End If
If Len(s) > 0 Then
s2 = s1 & " where " & Mid(s, 5)
Else
s2 = s1
End If

RS.Source = s2



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


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