Главная страница
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.057 c
8-1118165701
Radgar
2005-06-07 21:35
2005.10.30
Прокрутка Image


14-1128825298
dr Tr0jan
2005-10-09 06:34
2005.10.30
Как бороться с божьими коровками


3-1126969360
810
2005-09-17 19:02
2005.10.30
Фильтрация таблицы DBF


14-1128944536
Андрей Жук
2005-10-10 15:42
2005.10.30
Дурацкие детские книжки - это надо читать - обхохочитесь


14-1129103667
Андрей Жук
2005-10-12 11:54
2005.10.30
Фленов о .NET