![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кавычки в запросе [D6, Paradox]
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]
>только параметры, остальное от лукавого
Только вот не надо так категорично с претензией на абсолютную и незыблемую, ладно ?