Главная страница
    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.039 c
1-1128633473
Thor234
2005-10-07 01:17
2005.10.30
Таблица идентификаторов


14-1128999519
Laymer
2005-10-11 06:58
2005.10.30
ErWin и FireBerd


1-1128376693
Германн
2005-10-04 01:58
2005.10.30
Не могу "запустить" программу под дебаггером из IDE.


14-1128520916
NailMan
2005-10-05 18:01
2005.10.30
Сканер штрих-кодов: подключить!


14-1128946953
Антоний
2005-10-10 16:22
2005.10.30
Вот такое письмо





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