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 в первом запросе?

С уважением...


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)
покажите где я это говорил, пожалуйста.


Страницы:   1 2

Наверх

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