Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

Кавычки в запросе   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.042 c
14-1119580587
sybrex
2005-06-24 06:36
2005.07.18
сделать demo версию программы


14-1118919283
0legat0r
2005-06-16 14:54
2005.07.18
Не могу просмотреть архивы форума


9-1112638214
JockerColl
2005-04-04 22:10
2005.07.18
Физика "прыжка"


1-1119615468
heckfy1
2005-06-24 16:17
2005.07.18
Настройка принтера


3-1118328011
Сатир
2005-06-09 18:40
2005.07.18
Исполнение sql





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский