![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос с параметром
Астроном © (2004-08-31 08:24:00)Например есть таблица, к примеру, клиентов...
поля в ней такие: Код, Имя, Адрес, Телефон
Хочу сделать поиск по таблице... Создаю форму, кидаю четыре Edit'а, которые обзначают соответственно Код, Имя, Адрес, Телефон...
Создаю запрос:
SELECT * FROM clients
WHERE code=:scode, name=:sname, adress=:sadress, phone=:sphone
Это если поиск идет по четырем полям... А если я хочу с помощью этой формы найти клиента только по названию? Заполняю один Edit, другие оставляю пустыми... А запрос? Создавать такой:
SELECT * FROM clients WHERE name=:sname
Или можно как-то "спрятать" параметры scode,sadress,sphone в первом запросе?
С уважением...
KSergey (2004-09-01 10:00:00) [21]> [14] _sulent © (01.09.04 09:46)
Не совсем кто как привык.
Это, правда, не к этой ветке, другая была. Но тут скажу, раз попалось: если кол-во условий в WHERE меняется в зависимости от ввода пользовтеля - тогда удобнее динамически запрос сформировать. Т.к. динамически менять состав параметров - мама дорогая... Еще и типы им выставлять и т.д.
А вот если состав параметров постоянный - тогда параметры - хорошо. Правда, опять проблемка: это хорошо, когда все на этапе разработки можно в квери покласть. А если один квери да для разного используется? Опять динамическое формирование состава параметров?? Нет уж, дешевле запрос в виде текста сформировать.
_sulent (2004-09-01 09:46:00) [22]Плохой, не плохой... кто как привык, и кому как удобно, мне так кажется!
По мне лучше динамически, сам контролируешь и сам фильтуешь то, что нужно!
Rule (2004-09-01 08:40:00) [23]Val © (31.08.04 15:04) [11]
А в чем плохой тон параметров ?
Астроном (2004-08-31 18:52:00) [24]Извиняйте, оговорился: не 20 записей, а 20 полей...
Val (2004-08-31 15:04:00) [25]На мой взгляд - лучшее решение в подобном случае - динамическое формирование запроса. Даже если в данной задаче у вас 20 записей, это не означает, что их всегда будет столько. А хороший тон останется :)
KSergey (2004-08-31 14:31:00) [26]> [9] Астроном (31.08.04 14:24)
> > Тогда до лампочки.
> В смысле?
Ну на таком кол-ве записей один фиг какой запрос: оптимальный или нет.
Астроном (2004-08-31 14:24:00) [27]
> KSergey © (31.08.04 13:12) [7]
> > [6] Астроном (31.08.04 13:10)
> > А если записей в таблице около 20?
>
> Тогда до лампочки.
В смысле?
Rule (2004-08-31 14:13:00) [28]А не будет ли производиться поиск по пустым значениям?
тфу перепутал с Like, я бы посоветовал бы сделать запрос вот так:
SELECT * FROM clients
WHERE code like :scode and name like :sname and adress like :sadress and phone like :sphone
и тогда если ты будешь в качестве параметра передавать пустое значение, то тогда будут выбиратся все записи
KSergey (2004-08-31 13:12:00) [29]> [6] Астроном (31.08.04 13:10)
> А если записей в таблице около 20?
Тогда до лампочки.
Астроном (2004-08-31 13:10:00) [30]
> KSergey © (31.08.04 08:52) [3]
> > [2] Наталия © (31.08.04 08:44)
> > Или динамически запрос формируй...
>
> Это намного лучше, т.к. иначе план выполнения - просто безобразный.
А если записей в таблице около 20?
> Rule © (31.08.04 08:56) [5]
> Просто присвой нулевые значения параметрам, тоесть типа
> такого
> Querry.params[0].asstring:=''; и все
А не будет ли производиться поиск по пустым значениям?
Rule (2004-08-31 08:56:00) [31]Просто присвой нулевые значения параметрам, тоесть типа такого
Querry.params[0].asstring:=''; и все
KSergey (2004-08-31 08:52:00) [32]Иначе- в смысле как в [1]
KSergey (2004-08-31 08:52:00) [33]> [2] Наталия © (31.08.04 08:44)
> Или динамически запрос формируй...
Это намного лучше, т.к. иначе план выполнения - просто безобразный.
Наталия (2004-08-31 08:44:00) [34]Или динамически запрос формируй...
Наталия (2004-08-31 08:43:00) [35]SELECT * FROM clients
WHERE (code = :scode or :scode is null)
and (name=:sname or :name is null)
and ...