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

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

Кавычки в запросе [D6, Paradox]


Страницы:   1 2

ZERO ©   (2005-06-07 10:16:00) 

query1.sql.add('SELECT Adress FROM Org WHERE Name LIKE "'+<переменная типа string>+'"');

Проблемка: переменная может содержать кавычки.

query1.sql.add('SELECT Adress FROM Org WHERE Name LIKE "ООО "ФИРМА""');

Машинку пучит... Как быть?


msguns   (2005-06-07 12:51:00) [1]

>ANB ©   (07.06.05 12:38) [27]

Не надо путать конвейр с творческим процессом. Кроме того, помимо "серверных" проблем есть еще читабельность кода.

>Val ©   (07.06.05 12:42) [28]
>Мое утверждение справедливо для любого параметрического запроса.

Любое утверждение, где есть слово "любое" есть догма.

Дальнейший спор на эту тему считаю бессмысленным,- каждый останется при своих.
За дискуссию спасибо.


Val   (2005-06-07 12:42:00) [2]

Мое утверждение справедливо для любого параметрического запроса.
Еще раз повторю - _старайтесь_ использовать параметры (опущу дополнение вообще :)).


ANB   (2005-06-07 12:38:00) [3]


> Дискуссия в общем-то родилась из того, что я возразил не
> по поводу самой рекомендации юзать параметры, а в пику того,
> что их необходимо юзать всегда.
- их желательно юзать всегда, когда только можно. Помнится на одной моей работе админ выписывал 10 баксов штрафа программисту, который запихал в прогу запрос без параметров, который можно было параметризировать. Мало того, что запрос перепарсивался, он своими копиями забивал кэш и вытеснял параметризированные запросы.


msguns   (2005-06-07 12:38:00) [4]

так делать не надо.


mr.IL   (2005-06-07 12:37:00) [5]

Попробуй
query1.sql.add('SELECT Adress FROM Org WHERE Name LIKE '+#34+'"ООО "ФИРМА""'+#34)
а ваще передавай параметром.
зыЖ #34 = '


msguns   (2005-06-07 12:32:00) [6]

>Val ©   (07.06.05 12:10) [22]

Валера, спасибо за пояснения, но..

Если запрос, например, типа Select, к тому же постоянно переоткрывающийся, то все, что написано по поводу кэша, ессно, справедливо.

Но если запрос типа того, что я привел ?
Кстати, я привел его в вашей интерпретации. У меня обычно (для TIBSQL) такая конструкция:

 SQL.Text := 'DELETE FROM TABLE WHERE ID='+IntToStr(SelID);

Дискуссия в общем-то родилась из того, что я возразил не по поводу самой рекомендации юзать параметры, а в пику того, что их необходимо юзать всегда.


sniknik   (2005-06-07 12:28:00) [7]

msguns ©   (07.06.05 11:59) [21]
а надо было? какой смысл в сравнении с указанным постом?
из которого я имелл ввиду следующее

> даты, числа с плавающими запятыми и строки, всегда лучше задавать параметрами.

ну и дальнейшие обсуждения, если кому интересны, проясняющие в какойто мере это утверждение.


Val   (2005-06-07 12:10:00) [8]

>[19] msguns ©   (07.06.05 11:52)
Нет, не поспорить, а вам объяснить:
1.Запрос использующий параметры находится в кеше сервера (некоторое время) и при получении сервером такого запроса снова он просто достается из кеша и выполняется.
2.Запрос без параметров не кешируется, тем самым парсится/компилится и т.д. всякий раз, когда посылается серверу, таким образом...см. мой пост 13.

> а сам запрос типа DELETE FROM TABLE WHERE ID=:id ?

он без параметров, по-вашему, что-ли?


msguns   (2005-06-07 11:59:00) [9]

>sniknik ©   (07.06.05 11:55) [20]

А внимательно прочитать [19] и найти разницу между :

- TQuery и TIBSQL
- Датой или текстом с кавычками и простым integer

что помешало ?


sniknik   (2005-06-07 11:55:00) [10]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1117977775&n=1
пост [4]


msguns   (2005-06-07 11:52:00) [11]

>Val ©   (07.06.05 11:44) [17]
>Параметры именно для оптимизации и придуманы. Так что фраза "где они оптимальны", сорри, тафтология.

Эх, поспорить захотелось ?

Читаем раз:
>Desdechado ©   (07.06.05 10:55) [9]
только параметры, остальное от лукавого

Читаем два:
>Val ©   (07.06.05 11:34) [13]
>Параметры нужно стараться применять ВЕЗДЕ, ГДЕ ОНИ ПРИМЕНИМЫ.

Т.е. получается, что везде, где есть св-во Params/Parameters etc
любой запрос с прогаммной подстановкой должениспользовать параметры ?
Даже если компонент доступа TIBSQL с хитровыделанными параметрами, а сам запрос типа DELETE FROM TABLE WHERE ID=:id ?

Если да, то это уже изврат, ИМХО.


dolmat   (2005-06-07 11:50:00) [12]

>ZERO   (07.06.05 10:44) [7]
>ФИРМУ не вбивать будут, а из другого запроса тянуть.
1. В таком случае и LIKE не нужен хватит и =
2. Базы явно нормализовать необходимо


Val   (2005-06-07 11:44:00) [13]

>[16] msguns ©   (07.06.05 11:40)
Параметры именно для оптимизации и придуманы. Так что фраза "где они оптимальны", сорри, тафтология.


Val   (2005-06-07 11:40:00) [14]

>автору
в параметр вставлять также знак процента в любых разумных вариантах.


msguns   (2005-06-07 11:40:00) [15]

>Val ©   (07.06.05 11:34) [13]
>Параметры нужно стараться применять ВЕЗДЕ, ГДЕ ОНИ ОПТИМАЛЬНЫ.

С такой поправкой принимается ;)

В данном случае, действительно, параметрами удобнее


ANB   (2005-06-07 11:37:00) [16]

SELECT Adress FROM Org WHERE Name LIKE :SearchName

А как юзать - см. ParamByName + F1.
У тебя - query1.ParamByName('SearchName').AsString := строка поиска.


Val   (2005-06-07 11:34:00) [17]

>[10] msguns ©   (07.06.05 10:56)
В данном случае Desdechado © прав на 100%. Параметры нужно стараться применять ВЕЗДЕ, ГДЕ ОНИ ПРИМЕНИМЫ.


ZERO   (2005-06-07 11:12:00) [18]

А как такой запрос с параметрами будет выглядеть?


ANB   (2005-06-07 10:59:00) [19]


> msguns ©   (07.06.05 10:56) [10]
- имхо, тоже, параметры оптимально. Потом еще на какой нибудь символ нарвется, который мешать будет - chr(13)+chr(10) например.


msguns   (2005-06-07 10:56:00) [20]

>Desdechado ©   (07.06.05 10:55) [9]
>только параметры, остальное от лукавого

Только вот не надо так категорично с претензией на абсолютную и незыблемую, ладно ?


Страницы:   1 2

Наверх

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