Dim w As String ' для WHERE clause
' Разберёмся с Тематикой
If Not IsNull(Тематика) Then _
w = "Subjects = " & Str(Тематика)
' Разберёмся с Возрастами
If Not IsNull(ВозрастОт) Or Not IsNull(ВозрастДо) Then
If w <> "" then w = w & " AND " ' приделаем AND (если надо)
If Not IsNull(ВозрастОт) Or Not IsNull(ВозрастДо) Then
w = w & "(Age BETWEEN " & Str(ВозрастОт) & " AND " & Str(ВозрастДо) & ")"
ElseIf Not IsNull(ВозрастОт) Then
w = w & "Age >= " & Str(ВозрастОт)
Else ' очевидно, Not IsNull(ВозрастДо)
w = w & "Age <= " & Str(ВозрастДо)
End If
End If
' ... примерно то же самое для полей "Время" и "Количество"
Dim sql As String
sql = "SELECT some_fields FROM some_tables"
If w <> "" Then sql = sql & " WHERE " & w
DoCmd.RunSQL sql
Access сложные фильтры!!!
Пример условия одного фильтра (остальные условия имеют такую же структуру):
(agebeg>= [ВозрастОт] And ageend<= [ВозрастДо]) Or (agebeg<= [ВозрастОт] And ageend>= [ВозрастДо]) Or (agebeg<= [ВозрастОт] And (ageend>= [ВозрастОт] And ageend <= [ВозрастДо])) Or ((agebeg>= [ВозрастОт] And agebeg [ВозрастДо]) And ageend>= [ВозрастДо]).
Заранее благодарен за помощь!
Есть два поля (agebeg и ageend) и два значения даты ([ВозрастОт] и [ВозрастДо]). Надо, чтобы условие выполнялось для всех значений полей, у которых <и далее что именно для них должно выполняться>. Уверен, что после написания такого понятного вопроса вам уже не понадобится подсказка.
Рекомендую узнать про BETWEEN. Например, вместо того, чтобы писать a <= b AND b <= c пишите лучше b BETWEEN a AND c.
В условии, приведённом в вашем вопросе, обратите внимание на следующее:
в agebeg [ВозрастДо] пропущено условие.
Я предполагаю, что требуется написать три фильтра на VBA, но вот как?? Простые фильтры я писал, а такие ( с большим количеством условий) ещё нет.
Если вам будет не сложно - приведите пример кода такого фильтра.
Спасибо за помощь!
Расскажите лучше, что хотите сделать. Тогда, может быть, вам помогут слепить фильтр, или подскажут, что надо вбить в коде, или ещё что-нибудь.
У меня есть таблица с данными. Из основной формы я перехожу в форму сортировки(Рис1). Там каждому полю соответствует ячейка в таблице(т.е. "ВозрастОт" на форме соответствует "AgeBeg" в таблице, "ВозрастДо" - "AgeEnd" и т. п. "Тематика" - "Тематика").
Мне нужно, чтобы при заполнении всех полей и нажатии ОК, открывалась другая форма, а все данные в ней отбирались в соответствии с заполненными полями в форме сортировки(Рис1).
Условие сравнения возраста в таблице с возрастом в форме сортировки я приводил в сообщении выше. Подобные условия для времени и для количества. С тематикой всё просто.
Вот в принципе и всё.
Цитата:
Originally posted by VeBMoN
Ок, объясню подробно...
Ок, объясню подробно...
Это должно выглядеть примерно так
Код:
Большое спасибо!!! попробую сделать так.
Если Вас не затруднит - опишите код поподробнее и приведите пример его вставки в форму.
Цитата:
Originally posted by VeBMoN
Если Вас не затруднит - опишите код поподробнее и приведите пример его вставки в форму.
Если Вас не затруднит - опишите код поподробнее и приведите пример его вставки в форму.
Пример формирования фильтра прилагаю. Там таблица T с полями sTheme, nAge и nQty. Две формы: главная F и для формирования фильтра F_Filter. Смотрите обработку событий форм.
Подробнее код описывать некуда. Если вы не понимаете MS Access VBA, то прочитайте какую-нибудь книжку. Если трудность в чём-то другом, спросите конкретно.