Текущий архив: 2005.07.18;
Скачать: CL | DM;
ВнизКавычки в запросе Найти похожие ветки
← →
ZERO (2005-06-07 10:16) [0]
query1.sql.add("SELECT Adress FROM Org WHERE Name LIKE ""+<переменная типа string>+""");
Проблемка: переменная может содержать кавычки.query1.sql.add("SELECT Adress FROM Org WHERE Name LIKE "ООО "ФИРМА""");
Машинку пучит... Как быть?
← →
stone © (2005-06-07 10:21) [1]
query1.sql.add("SELECT Adress FROM Org WHERE Name LIKE "+ QuotedStr(переменная типа string));
← →
msguns © (2005-06-07 10:21) [2]query1.sql.add("SELECT Adress FROM Org WHERE Name LIKE "+QuotedStr("ООО "ФИРМА""));
← →
msguns © (2005-06-07 10:22) [3]>stone © (07.06.05 10:21) [1]
;)
← →
dolmat (2005-06-07 10:24) [4]Выбрось из головы про кавычки и замени like на containing а то кто его знает это ООО или ЗАЕ или как по другому, а ФИРМА помнится
← →
ANB © (2005-06-07 10:33) [5]А параметры зачем нужны тогда ?
← →
msguns © (2005-06-07 10:39) [6]>dolmat (07.06.05 10:24) [4]
>замени like на containing
и что будет ?
← →
ZERO (2005-06-07 10:44) [7]>stone, msguns -- Спасибо, попробую.
>dolmat -- Попробую в поиске, но для той задачи, что я сейчас делаю, это неприменимо. ФИРМУ не вбивать будут, а из другого запроса тянуть. Спасибо :)
← →
msguns © (2005-06-07 10:49) [8]>ZERO (07.06.05 10:44) [7]
То, что написал dolmat, работать у тебя не будет
← →
Desdechado © (2005-06-07 10:55) [9]только параметры, остальное от лукавого
← →
msguns © (2005-06-07 10:56) [10]>Desdechado © (07.06.05 10:55) [9]
>только параметры, остальное от лукавого
Только вот не надо так категорично с претензией на абсолютную и незыблемую, ладно ?
← →
ANB © (2005-06-07 10:59) [11]
> msguns © (07.06.05 10:56) [10]
- имхо, тоже, параметры оптимально. Потом еще на какой нибудь символ нарвется, который мешать будет - chr(13)+chr(10) например.
← →
ZERO (2005-06-07 11:12) [12]А как такой запрос с параметрами будет выглядеть?
← →
Val © (2005-06-07 11:34) [13]>[10] msguns © (07.06.05 10:56)
В данном случае Desdechado © прав на 100%. Параметры нужно стараться применять ВЕЗДЕ, ГДЕ ОНИ ПРИМЕНИМЫ.
← →
ANB © (2005-06-07 11:37) [14]SELECT Adress FROM Org WHERE Name LIKE :SearchName
А как юзать - см. ParamByName + F1.
У тебя - query1.ParamByName("SearchName").AsString := строка поиска.
← →
Val © (2005-06-07 11:40) [15]>автору
в параметр вставлять также знак процента в любых разумных вариантах.
← →
msguns © (2005-06-07 11:40) [16]>Val © (07.06.05 11:34) [13]
>Параметры нужно стараться применять ВЕЗДЕ, ГДЕ ОНИ ОПТИМАЛЬНЫ.
С такой поправкой принимается ;)
В данном случае, действительно, параметрами удобнее
← →
Val © (2005-06-07 11:44) [17]>[16] msguns © (07.06.05 11:40)
Параметры именно для оптимизации и придуманы. Так что фраза "где они оптимальны", сорри, тафтология.
← →
dolmat (2005-06-07 11:50) [18]>ZERO (07.06.05 10:44) [7]
>ФИРМУ не вбивать будут, а из другого запроса тянуть.
1. В таком случае и LIKE не нужен хватит и =
2. Базы явно нормализовать необходимо
← →
msguns © (2005-06-07 11:52) [19]>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 ?
Если да, то это уже изврат, ИМХО.
← →
sniknik © (2005-06-07 11:55) [20]http://delphimaster.net/view/3-1117977775/
пост [4]
← →
msguns © (2005-06-07 11:59) [21]>sniknik © (07.06.05 11:55) [20]
А внимательно прочитать [19] и найти разницу между :
- TQuery и TIBSQL
- Датой или текстом с кавычками и простым integer
что помешало ?
← →
Val © (2005-06-07 12:10) [22]>[19] msguns © (07.06.05 11:52)
Нет, не поспорить, а вам объяснить:
1.Запрос использующий параметры находится в кеше сервера (некоторое время) и при получении сервером такого запроса снова он просто достается из кеша и выполняется.
2.Запрос без параметров не кешируется, тем самым парсится/компилится и т.д. всякий раз, когда посылается серверу, таким образом...см. мой пост 13.
> а сам запрос типа DELETE FROM TABLE WHERE ID=:id ?
он без параметров, по-вашему, что-ли?
← →
sniknik © (2005-06-07 12:28) [23]msguns © (07.06.05 11:59) [21]
а надо было? какой смысл в сравнении с указанным постом?
из которого я имелл ввиду следующее
> даты, числа с плавающими запятыми и строки, всегда лучше задавать параметрами.
ну и дальнейшие обсуждения, если кому интересны, проясняющие в какойто мере это утверждение.
← →
msguns © (2005-06-07 12:32) [24]>Val © (07.06.05 12:10) [22]
Валера, спасибо за пояснения, но..
Если запрос, например, типа Select, к тому же постоянно переоткрывающийся, то все, что написано по поводу кэша, ессно, справедливо.
Но если запрос типа того, что я привел ?
Кстати, я привел его в вашей интерпретации. У меня обычно (для TIBSQL) такая конструкция:
SQL.Text := "DELETE FROM TABLE WHERE ID="+IntToStr(SelID);
Дискуссия в общем-то родилась из того, что я возразил не по поводу самой рекомендации юзать параметры, а в пику того, что их необходимо юзать всегда.
← →
mr.IL © (2005-06-07 12:37) [25]Попробуй
query1.sql.add("SELECT Adress FROM Org WHERE Name LIKE "+#34+""ООО "ФИРМА"""+#34)
а ваще передавай параметром.
зыЖ #34 = "
← →
msguns © (2005-06-07 12:38) [26]так делать не надо.
← →
ANB © (2005-06-07 12:38) [27]
> Дискуссия в общем-то родилась из того, что я возразил не
> по поводу самой рекомендации юзать параметры, а в пику того,
> что их необходимо юзать всегда.
- их желательно юзать всегда, когда только можно. Помнится на одной моей работе админ выписывал 10 баксов штрафа программисту, который запихал в прогу запрос без параметров, который можно было параметризировать. Мало того, что запрос перепарсивался, он своими копиями забивал кэш и вытеснял параметризированные запросы.
← →
Val © (2005-06-07 12:42) [28]Мое утверждение справедливо для любого параметрического запроса.
Еще раз повторю - _старайтесь_ использовать параметры (опущу дополнение вообще :)).
← →
msguns © (2005-06-07 12:51) [29]>ANB © (07.06.05 12:38) [27]
Не надо путать конвейр с творческим процессом. Кроме того, помимо "серверных" проблем есть еще читабельность кода.
>Val © (07.06.05 12:42) [28]
>Мое утверждение справедливо для любого параметрического запроса.
Любое утверждение, где есть слово "любое" есть догма.
Дальнейший спор на эту тему считаю бессмысленным,- каждый останется при своих.
За дискуссию спасибо.
Страницы: 1 вся ветка
Текущий архив: 2005.07.18;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.039 c