![]() |
|
Модераторы: Akina |
![]()
|
|
| Woodlin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 15.7.2009 Где: Челябинская облас ть, г. Пласт Репутация: 1 Всего: 1 |
Всех приветствую!
Возник вопрос, в форме табличного вида (источник записей запрос) нужно отбирать записи, к примеру за определённый месяц, год, или за какой то период (в общем работа с датами, пока во всяком случае). На данный момент в условии отбора запроса тупо используются значения контролов формы поиска. Вопрос вот в чём, мне хочется в критерий отбора вместо значений контролов включить функцию, которая будет содержать строку условия отбора. Например такую: [Дата]=Month([Дата])=4 and [Дата]=Year([Дата])=2011 На мой взгляд это позволило бы более гибко собирать строку отбора записей А функцию вставить сразу после Where:
Подскажите можно ли так сделать? у меня вот не получилось. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Это несложно. НО.
1) Функция должна присутствовать в той БД, где выполняется запрос. Т.е. стОит разделить БД - начинаются проблемы. 2) Функция будет недоступна (и запрос неработоспособен) при работе с базой через ADO/DAO/ODBC... 3) Функция будет применена ко всем записям - т.е. будет выполнен полный перебор записей и не будут использоваться индексы. На больших таблицах (и тем более больших пересечениях) это будет страшенные тормоза. Или проблемы с типом возврата, или с синтаксисом. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Woodlin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 15.7.2009 Где: Челябинская облас ть, г. Пласт Репутация: 1 Всего: 1 |
Akina, у меня база разделена, но такая строка работает: ... Where Month([Дата])=My_Func(), где My_Func()=4
Функция у меня строкового типа, выводил собираемую строку в MsgBox, строка собиралась правильно. Буду пробовать дальше. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
А то, что Month() возвращает чисельное значение, тебя не смущает? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| bopoha |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
Что бы это работало:
Необходимо что бы функция возвращала True или False. Возвращать текстовое выражение не получится и не нужно. При этом нужно помнить, что функции сильно замедляют запросы. Особенно те, которые находятся в предложении Where. Т.к. индексы не будут использованы. Предлагаю следующие варианты: Формируете выражение отбора и: 1. Формируете запрос select * from <запрос> where <выражения> и назначаете его в качестве источника данных формы 2. На форме указываете в качестве источника данных ваш запрос, а выражение назначаете в качестве фильтра.
|
||||
|
|||||
![]()
|
| Правила форума "MS Access" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS Access | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |