Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.30;
Скачать: CL | DM;

Вниз

Проблема при записи в базу строки с ковычкой   Найти похожие ветки 

 
Edelweis   (2005-09-18 12:55) [0]

Вот такой кусок кода:

s:= "insert into Base.db(CID, str) values("+ IntToStr(id)+",""+str+"")";
MQuery.SQL.Add(s);
MQuery.ExecSQL;


Если в переменной str оказывается символ " - то есть одинарная кавычка, то команда не выполняется и проискодит косяк. При использовании параметров - ограничение на 255 символов. Как избежать этого?


 
_dimka ©   (2005-09-18 12:59) [1]

не уверен но возможно QuotedStr(); поможет


 
Anatoly Podgoretsky ©   (2005-09-18 13:23) [2]

А разве Парадокс поддерживает текстовые поля свыше 255 символов?


 
Os   (2005-09-18 13:35) [3]

Для строк лучше использовать параметры и no problem

s:= "insert into Base.db(CID, str) values("+ IntToStr(id)+",:myStr)";
MQuery.SQL.Add(s);
MQuery.paramByName("myStr").asString:= str;
MQuery.ExecSQL;

или
s:= "insert into Base.db(CID, str) values(:muId,:myStr)";
MQuery.SQL.Add(s);
MQuery.Params[0].Value:= id;
MQuery.Params[1].value:= str;
MQuery.ExecSQL;

Дело вкуса, но второй вариант быстрее


 
AlexWlad ©   (2005-09-18 14:11) [4]

Перед кавычкой вставь слэш и все ОК


 
Plague ©   (2005-09-19 12:54) [5]

QuotedStr() Rulezzz!


 
ANB ©   (2005-09-19 12:59) [6]


> Plague ©   (19.09.05 12:54) [5]
> QuotedStr() Rulezzz!
SQL + QuotedStr() -> Топка.
Наступишь на другие грабли. Пользуйся параметрами.


 
Плохиш ©   (2005-09-19 13:18) [7]


> ANB ©   (19.09.05 12:59) [6]
> SQL + QuotedStr() -> Топка.
> Наступишь на другие грабли.

Можно подробнее про грабли?


 
Tonich ©   (2005-09-19 13:40) [8]


> ANB ©   (19.09.05 12:59) [6]
да мне тоже интересно на какие?


 
Val ©   (2005-09-19 13:52) [9]

>[4] AlexWlad ©   (18.09.05 14:11)
Делфи поддерживает сишное форматирование?


 
ANB ©   (2005-09-19 14:00) [10]


> Плохиш ©   (19.09.05 13:18) [7]


> Tonich ©   (19.09.05 13:40) [8]

Есть еще много нехороших символов, которые сломают SQL строку. Например CRLF. Все предусматривать - во первых замучаешься, во вторых в строку сядут не те данные, которые ввел юзер (или достаны из другой таблицы), что не очень кошерно.


 
Tonich ©   (2005-09-19 14:04) [11]


> ANB ©   (19.09.05 14:00) [10]

да бог с ними с теми символами,  QuotedStr()  то тут причем?


 
ANB ©   (2005-09-19 14:15) [12]


> Tonich ©   (19.09.05 14:04) [11]

Собственно, QuotedStr() тут ни при чем. А вот связка для решения сабжа QuotedStr() + SQL - затычка, в которой еще полно дырок. Числа в строке SQL для LocalSQL еще допустимы, для серверов - уже не очень. Кстати, давно использую отработанную технологию отладки SQL + Delphi : прежде чем запихать запрос в клиента - отлаживаешь его на всех режимах с параметрами в приложении для отладки SQL (QA, PL/SQL Developer, TOAD), затем обрамляешь кавычками и засовываешь в модуль. На 90% ошибок не будет. А вот пытаться отлаживать вот такой код со склейками - сущий геморрой.


 
Плохиш ©   (2005-09-20 11:55) [13]


> ANB ©   (19.09.05 14:00) [10]
> Есть еще много нехороших символов, которые сломают SQL строку.
>  Например CRLF.

Не надо обманывать.


 
ANB ©   (2005-09-20 12:27) [14]


> Плохиш ©   (20.09.05 11:55) [13]
Точно, ест. Но chr(0) полюбому все сломает. Короче, нарывался я на разные бяки при таком подходе.


 
Плохиш ©   (2005-09-20 12:31) [15]


> ANB ©   (20.09.05 12:27) [14]
>
> > Плохиш ©   (20.09.05 11:55) [13]
> Точно, ест. Но chr(0) полюбому все сломает

И что, при использовании параметров, строку не обрежет?



Страницы: 1 вся ветка

Текущий архив: 2005.10.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.042 c
5-1106254826
Чайник
2005-01-21 00:00
2005.10.30
Изменение типа публикуемого свойства


3-1127203717
suharew
2005-09-20 12:08
2005.10.30
Индексы, поиск


14-1128423454
Андрей Жук
2005-10-04 14:57
2005.10.30
Турнир шахматистов


14-1129007555
X9
2005-10-11 09:12
2005.10.30
Хочу помочь любимому сайту!


14-1128658604
dreamse
2005-10-07 08:16
2005.10.30
Авторизация MS SQL