Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 914

/ вопрос открыт /

Здравствуйте!

Подскажите пжлста как решить задачу.
Есть таблица. Есть форма. На ней 3 галочки - 3 параметра для поиска.
Если отмечен один параметр, то поиск по одному без проблем.
А если выбрано 2 или более параметров, то надо, чтобы каждый следующий поиск осуществлялся в результате, полученном от предыдущего. Вложеные select боюсь не пройдут.
База Access.

Muratov Radik Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Muratov Radik (статус: Посетитель)
Вопрос отправлен: 22 марта 2010, 10:20
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 13; последнее сообщение — 23 марта 2010, 11:14; участников в обсуждении: 3.
Dron

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';
Заглушка в виде единицы - на случай, если ни одна галка не выбрана.
С уважением.
Muratov Radik

Muratov Radik (статус: Посетитель), 22 марта 2010, 11:27 [#2]:

Спасибо!
И как я сам не догадался :) торможу :)
А в запросе скобки влияют на приоритет выполнения?
Вадим К

Вадим К (статус: Академик), 22 марта 2010, 11:57 [#3]:

вообще то да, но в данном примере они ничего не меняют.

Но посмотрите внимательнее на этот запрос. Если ни одна галочка не выбрана, запрос будет не совсем хороший.
Галочка "подтверждения прочтения" - вселенское зло.
Muratov Radik

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

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

Muratov Radik (статус: Посетитель), 22 марта 2010, 13:16 [#8]:

Я кажется понял, значение даты надо брать в апосторфы, это ж типа строковая величина
Muratov Radik

Muratov Radik (статус: Посетитель), 22 марта 2010, 13:23 [#9]:

Точно, щас все заработало. Всем спасибо!
Dron

Dron (статус: Студент), 22 марта 2010, 19:49 [#10]:

Вадим К:
Хотите сказать, что "WHERE 1" не сработает?
С уважением.
Вадим К

Вадим К (статус: Академик), 22 марта 2010, 21:48 [#11]:

Скажем так, я уверен, что конструкция where 1=1 сработает на всех используемых типах SQL движков, а вот Ваша конструкция - не уверен. Я понимаю, что иногда хочется сэкономить две буквы... но это не то место, где стоит экономить.
Галочка "подтверждения прочтения" - вселенское зло.
Dron

Dron (статус: Студент), 23 марта 2010, 10:11 [#12]:

Я основываюсь на MySQL, где это работает. И по идее в большинстве должно работать, потому что это нормальное условие. Ну а вместо 1=1 лучше уж тогда просто WHERE убрать из запроса - это совсем не сложно ;-)
С уважением.
Вадим К

Вадим К (статус: Академик), 23 марта 2010, 11:14 [#13]:

Проверил на MySQL, да, там с единичкой работает. Но если посмотреть внимательней, то автор вопроса говорил о Access. Если бы в тексте ответа было сказано, что работает на Access - никаких проблем.
В данном случае(MySQL) 1 преобразовывается в TRUE и работает.

Но все же, давайте различать два случая - "работает" и "работает, потому что так правильно писать".

Цитата (Dron):

лучше уж тогда просто WHERE убрать из запроса

Вот это здравое предложение. тем более, тут есть большой простор для вариантов реализации:)
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:33
Выполнено за 0.02 сек.