Главная страница
    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.035 c
14-1128883800
Rampart
2005-10-09 22:50
2005.10.30
Помощь нужна


2-1128692295
Id
2005-10-07 17:38
2005.10.30
Fb


1-1128585166
DUDAS
2005-10-06 11:52
2005.10.30
Использование ActionManager и ActionToolBar


14-1128617265
Kinder_
2005-10-06 20:47
2005.10.30
Что можно почитать про оптимизацию кода ?


14-1128711764
Сергей А.
2005-10-07 23:02
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский