|
Вопрос # 3 914/ вопрос открыт / |
|
Здравствуйте!
Подскажите пжлста как решить задачу.
Есть таблица. Есть форма. На ней 3 галочки - 3 параметра для поиска.
Если отмечен один параметр, то поиск по одному без проблем.
А если выбрано 2 или более параметров, то надо, чтобы каждый следующий поиск осуществлялся в результате, полученном от предыдущего. Вложеные select боюсь не пройдут.
База Access.
 |
Вопрос задал: Muratov Radik (статус: Посетитель)
Вопрос отправлен: 22 марта 2010, 10:20
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 13; последнее сообщение — 23 марта 2010, 11:14; участников в обсуждении: 3.
|
Dron (статус: Студент), 22 марта 2010, 10:27 [#1]:
А зачем делать многоступенчатый поиск? Можно просто формировать текст SQL-запроса в зависимости от выбранных элементов, например:
SQL:='SELECT * FROM table WHERE ';
if CheckBox1.Checked then SQL:=SQL+'(field1 > 5) AND ';
if CheckBox2.Checked then SQL:=SQL+'(field2 LIKE "%abc%") AND ';
if CheckBox3.Checked then SQL:=SQL+'(field3 = 10) AND ';
SQL:=SQL+'1';
Заглушка в виде единицы - на случай, если ни одна галка не выбрана.
С уважением.
|
|
Вадим К (статус: Академик), 22 марта 2010, 11:57 [#3]:
вообще то да, но в данном примере они ничего не меняют.
Но посмотрите внимательнее на этот запрос. Если ни одна галочка не выбрана, запрос будет не совсем хороший.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Muratov Radik (статус: Посетитель), 22 марта 2010, 12:07 [#4]:
А у меня и при отмеченных галочках ошибка вылетает. Вот запрос:
SELECT * FROM
CurrentLog
WHERE
(mesDate >= datevalue(09.03.2010)) and (mesDate <= datevalue(22.03.2010)) AND
1 ORDER BY mesCode
Ошибка:
Число содержит синтаксическую ошибку в выражении запроса
|
|
Вадим К (статус: Академик), 22 марта 2010, 12:19 [#5]:
замените лучше 1 на 1=1, тогда все будет хорошо.
Но лучше все таки подумать и анализировать кол-во галочек и составлять правильный запрос.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Muratov Radik (статус: Посетитель), 22 марта 2010, 13:00 [#6]:
Ему не нравится строка с проверкой диапазона дат. Что может быть там косячного?
такой же запрос, но через параметры проходит.
|
|
Вадим К (статус: Академик), 22 марта 2010, 13:07 [#7]:
Ну так надо дату в правильном формате указывать.
вот к примеру, как нужно пользоваться функцией
DateValue ("June 30, 2004") возвратит 30 июня 2004
DateValue ("6/30/2004") возвратит 30 июня 2004
DateValue ("June 30") возвратит 30 июня текущего года.
Смотрим внимательней, когда дата задается только цифрами, то месяц указывает вначале. Просто так принято в Америке
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Muratov Radik (статус: Посетитель), 22 марта 2010, 13:16 [#8]:
Я кажется понял, значение даты надо брать в апосторфы, это ж типа строковая величина
|
|
Muratov Radik (статус: Посетитель), 22 марта 2010, 13:23 [#9]:
Точно, щас все заработало. Всем спасибо!
|
|
Dron (статус: Студент), 22 марта 2010, 19:49 [#10]:
Вадим К:
Хотите сказать, что "WHERE 1" не сработает?
С уважением.
|
|
Вадим К (статус: Академик), 22 марта 2010, 21:48 [#11]:
Скажем так, я уверен, что конструкция where 1=1 сработает на всех используемых типах SQL движков, а вот Ваша конструкция - не уверен. Я понимаю, что иногда хочется сэкономить две буквы... но это не то место, где стоит экономить.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Dron (статус: Студент), 23 марта 2010, 10:11 [#12]:
Я основываюсь на MySQL, где это работает. И по идее в большинстве должно работать, потому что это нормальное условие. Ну а вместо 1=1 лучше уж тогда просто WHERE убрать из запроса - это совсем не сложно
С уважением.
|
|
Вадим К (статус: Академик), 23 марта 2010, 11:14 [#13]:
Проверил на MySQL, да, там с единичкой работает. Но если посмотреть внимательней, то автор вопроса говорил о Access. Если бы в тексте ответа было сказано, что работает на Access - никаких проблем.
В данном случае(MySQL) 1 преобразовывается в TRUE и работает.
Но все же, давайте различать два случая - "работает" и "работает, потому что так правильно писать".
Цитата (Dron):
лучше уж тогда просто WHERE убрать из запроса
Вот это здравое предложение. тем более, тут есть большой простор для вариантов реализации
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|