![]() |
|
Модераторы: Akina |
![]()
|
|
| BearEvg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2008 Репутация: нет Всего: нет |
Начал делать поисковую форму, в которую вводяться данные, а потом они передаються в запрос на выборку. Помня совет bopoha не ссылаться напрямую на поля формы, сбрасываю все поля во временные переменные, а уже их использую как аргументы в запросе SQL. Для сравнения значений в основном использую оператор Like [TempVars]![Name]. Однако при работе поисковика некоторые поля формы могут оставаться пустыми, и подразумеваеться, что при поиске принимаються любые значения этих полей. Сначала я попробовал при задании временных переменных делать проверку поля, и если оно Is Null - то задавать в соответствующую временную переменную символ "*". Всё работало хорошо, но потом я обнаружил, что если значение поля в таблице было пустым, то такая запись не выводиться - поскольку эта зараза Access при выполнении оператора Like попросту отбрасывает все пустые строки, даже если строку он сравнивает с: "*".
Сначала я решил поставить в строках значение по умолчанию через свойства таблицы - но невразумительные символы в незаполненных строках при выборке смотрелись, мягко говоря, непрезентабельно. Тогда я решил подкорректировать сам запрос и получилось вот что:
Теперь всё работает как надо, но меня глужут смутные сомнения на предмет того, не слишком ли я всё усложнил? Кроме того, учитывая, что полей в поисковой форме около 20, я поиск организовываю через серию подчинённых запросов, где каждый новый работает с результатами предидущего. Возникает вопрос, не замедляю ли я этим выборку, может лучше указывать все условия через AND? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Я вот не понимаю - почему ты не хочешь изменять саму строку запроса? не задано условие отбора? ну и не включай его в текст.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| BearEvg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2008 Репутация: нет Всего: нет |
||||
|
||||
| bopoha |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
AND или OR - зависит от необходимого результата.
Я в свое время написал гибкую функцию, которая брала настройку поиска (соответствие "имя эл. на форме" к "имя в таблице" и тип данных). Дальше она пробегала по форме собирала данные из элементов управления в строку "имя_поля = значение AND ...". Если значение не задано, то пропускается. Очень гибко и удобно. Дальше эта строка приклеивалась к запросу "SELECT ... FROM ... WHERE " & stSwhere. Или использовалась в качестве фильтра. |
|||
|
||||
| BearEvg |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2008 Репутация: нет Всего: нет |
С учётом ваших советов у меня вышло вот что:
Всё работает нормально, спасибо большое за совет P.S. Как я понимаю, если мне будет нужна будет не форма с фильтром, а именно запрос, то это:
|
||||
|
|||||
| bopoha |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
DoCmd.RunSQL - только для запросов на выполнение, типа INSERT, UPDTAE или DELETE |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Не обязательно. Порой и Select вызывается - но когда требуется не конечная выборка, а, скажем, срабатывание триггера. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| BearEvg |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2008 Репутация: нет Всего: нет |
Новый сюрприз от 2007 версии.
Мне понадобилось осуществить поиск по дате. Реализовал как:
В итоге выдало ошибку в строке, которая формирует фильтр. Изучение состояния переменных показало, что вместо перевода данных в вид 01/01/2008 команда Format переводит их в вид 01.01.2008, против чего начинает категорически возражать SQL-конструкция в поле фильтра. Я пока вышел из положения следующим образом:
Т.е. сделал в форме три последовательных поля dd, mm, yyyy и беру из них данные. Но вот чего надо сделать, чтоб заставить команду Format нормально работать? И ещё один вопрос. SQL-конструкция в фильтре интерпритирует запись, например, 01/03/2008 как 03.01.2008, т.е. первые две цифры - месяц, вторые две цифры - день месяца, третьи четыре цифры - год. Это стандартная интерпритация, или я какую-то настройку упустил из виду? |
||||
|
|||||
| bopoha |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
На самом деле это не глюк (да и вообще прекращайте так думать, это портит карму и иногда вгоняет в краску)! Чтобы не происходило преобразования пишите, так: "dd\/mm\/yyyy"
Акссесс по умолчанию преобразовывает дату и числа при преобразовании к строке в соответствии с реогиноальными настройками. Это сообщение отредактировал(а) bopoha - 16.9.2008, 01:31 |
|||
|
||||
| BearEvg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2008 Репутация: нет Всего: нет |
Сделал, работает правильно. Спасибо большое, но возник ещё один вопрос - а почему оно работает? В справке по команде Format конструкции с двумя слэшами нет. Это нюансы Вижуал Бейсика, или просто недокументированный режим команды? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Нет, это просто квотирование служебных символов... типа как квотится двойная кавычка в строковой переменной. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| BearEvg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2008 Репутация: нет Всего: нет |
Мда |
|||
|
||||
| bopoha |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
||||
|
||||
![]()
|
| Правила форума "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. |