Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.54 MB
Время: 0.039 c
1-1119868243
kot andrei
2005-06-27 14:30
2005.07.18
Надо подумать...


14-1119882544
Dimedrol
2005-06-27 18:29
2005.07.18
Скомпильте программку на Delphi 5, pls...


1-1120032563
mefres
2005-06-29 12:09
2005.07.18
перевод числовых денег в строковые


8-1110745845
-=DeMoH=-
2005-03-13 23:30
2005.07.18
Нарисовать объект по формулам в OpenGL!


3-1118132041
Тучудище
2005-06-07 12:14
2005.07.18
Обновление lookup кэша при автоматическом обновлении НД