Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-1128802429
Bogdan1024
2005-10-09 00:13
2005.10.30
дизайн программы под ВинХП


1-1128451382
Norfolk
2005-10-04 22:43
2005.10.30
Не закрывается приложение при работе с DLL


9-1118826181
Долгов Артем
2005-06-15 13:03
2005.10.30
Diablo heroes to Image


14-1128687194
Prohodil Mimo
2005-10-07 16:13
2005.10.30
2 вопроса про приобретение Delphi.


14-1128681136
Игорь Шевченко
2005-10-07 14:32
2005.10.30
Holy war :)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский