Форум: "Базы";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
ВнизПроблема при записи в базу строки с ковычкой Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c