![]() |
| ||
|
|
Новости |
Поиск |
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 в первом запросе?
С уважением...
Sergey13 (2004-09-01 17:53:00) [1]2[34] Rule © (01.09.04 17:46)
>Не поверишь, видел :)))
Между собой разговаривали? Тогда они может и воспитанные, но не в себе были. 8-)
Rule (2004-09-01 17:46:00) [2]Sergey13 © (01.09.04 17:28) [32]
Не поверишь, видел :)))
Val © (01.09.04 17:34) [33]
Полностью согласен и солидарен :)
Val (2004-09-01 17:34:00) [3]>[30] Rule © (01.09.04 17:20)
Фразой, которую вы выделили, я говорил автору, что делать надо правильно с самого начала, чтобы не было печально потом. И неважно 20 у него записей или 200000, это относилось к высказываниям типа "пофиг". На 20-ти, действительно, пофиг, но привыкать что всегда будет пофиг не стОит.
Sergey13 (2004-09-01 17:28:00) [4]2[31] Rule © (01.09.04 17:21)
>тоесть получается что типа хорошего тона в запросах нет :),
Естественно нет. Ты видел когда нибудь, что бы воспитанные люди на SQL разговаривали? 8-)
Rule (2004-09-01 17:21:00) [5]продолжение Rule © (01.09.04 17:20) [30]
тоесть получается что типа хорошего тона в запросах нет :), ну это уже просто так придирание к словам, если я не так понял, то извините, думаю из этого димагогию разводить не стоит :)
Rule (2004-09-01 17:20:00) [6]Val © (01.09.04 15:43) [28]
Val © (31.08.04 15:04) [11]
На мой взгляд - лучшее решение в подобном случае - динамическое формирование запроса. Даже если в данной задаче у вас 20 записей, это не означает, что их всегда будет столько. А хороший тон останется :)
Rule (2004-09-01 15:47:00) [7]KSergey © (01.09.04 14:33) [26]С параметрами - не так все прозрачно
НУ не знаю гед как а в интербезе есть SQLMonitor, который все и показывает особых поблемм с параметрами не возникает, и в защиту параметров, происходит автоматическая конвертация форматов дат и разделителей, чего надо боятся при полном динамическом формировании запроса
Val (2004-09-01 15:43:00) [8]>[27] Rule © (01.09.04 15:42)
и..?
Rule (2004-09-01 15:42:00) [9]2Val © (01.09.04 10:18) [16]
Val © (31.08.04 15:04) [11][Ответить]
На мой взгляд - лучшее решение в подобном случае - динамическое формирование запроса. Даже если в данной задаче у вас 20 записей, это не означает, что их всегда будет столько. А хороший тон останется :)
KSergey (2004-09-01 14:33:00) [10]> [19] Val © (01.09.04 11:06)
> Q.SQL.Add('and field2 = :p2' ');
> Q.ParamByName('p2').AsDateTime := Now;
Не факт, что гладко это пройдет. Возможно - пошаманить придется.
Еще в защиту динамических зпросов (без параметров) - их отладить легче. Взял полученный текст - и смотришь. С параметрами - не так все прозрачно
Sergey13 (2004-09-01 11:37:00) [11]А что тут непонятного? Зачем параметры нужны по твоему? По моему, что бы исключить разбор запроса сервером. Если в памяти сервера хранится нечто вроде select * from table where id=:id то при повторном таком же запросе он не будет его разбирать, а если ему попадется select * from table where id=:id and pole=:pole и он не найдет его в памяти будет разбор. Иногда время разбора сопоставимо с временем исполнения.
ЗЫ: разумеется все это для "взрослых" серверов а не для ЛОКАЛ СКЛ.
Val (2004-09-01 11:35:00) [12]Эге, я понял о чем вы. О возможном изменении текста запроса при динамическом его формировании. но не факт, что в данном случае он будет изменятся довольно часто. Пользователь может использовать пару тройку излюбленных полей и запрос может оставаться неизменным. Поэтому я все же оставил бы параметры при динамическом его формировании.
Val (2004-09-01 11:28:00) [13]Фразу о динамическом формировании запроса и не выполнении первоначальной роли параметров, по вашему.
Sergey13 (2004-09-01 11:24:00) [14]2[21] Val © (01.09.04 11:23)
>это почему же? поясните.
Что конкретно?
Val (2004-09-01 11:23:00) [15]>[20] Sergey13 © (01.09.04 11:12)
это почему же? поясните.
Sergey13 (2004-09-01 11:12:00) [16]2[19] Val © (01.09.04 11:06)
>Почему пытаетесь обязательно разделить понятие динамического формирования и параметров?
Потому что при динамическом формировании параметры (если применяются) не выполняют своей первоначальной роли - исключения разбора запроса на сервере. Да, они помогают избежать несоответствия типов и т.п., но... см выше.
Val (2004-09-01 11:06:00) [17]Почему пытаетесь обязательно разделить понятие динамического формирования и параметров? Как пример:
Q.SQL.Add('select * from mytable where 1=1 ');
case MyFlag of
0:begin
Q.SQL.Add(' and field1 = :p1');
Q.ParamByName('p1').AsString := Edit1.Text;
end;
1:begin
Q.SQL.Add('and field2 = :p2' ');
Q.ParamByName('p2').AsDateTime := Now;
end;
end;
Sergey13 (2004-09-01 11:03:00) [18]ИМХО.
В данном конкретном случае, при любых произвольных параметрах поиска, проще наверное динамически формировать запрос (или условие фильтра). Но обычно предпочтительнее параметры - сервера их любят больше.
_sulent (2004-09-01 10:58:00) [19]Я привык чтобы динамически все формировалось, для меня удобнее и приятнее смотрится, не надо кучу кверей пускать в них черт ногу сломит... а кому нравятся параметры, то для них проблемой не будет написать := nil; и все...
Но динамический на мой взгляд более обоснованней...
Да еще есть один неприятный прикол, когда через АДО подрубаешься к MS SQL, то возникают проблемы с датой...
Val (2004-09-01 10:18:00) [20]>[13] Rule © (01.09.04 08:40)
покажите где я это говорил, пожалуйста.