Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос с параметром


Страницы:   1 2

Астроном ©   (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 ...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо