Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.23;
Скачать: CL | DM;

Вниз

любая последовательность кавычек и символов в добавляемом тексте   Найти похожие ветки 

 
Mysql   (2007-05-17 17:35) [0]

Как их инсертить в таблицу?


 
Val ©   (2007-05-17 17:37) [1]

как параметр?


 
Mysql   (2007-05-17 17:45) [2]

pole - text

insert into table (pole) values ("последовательность символов");

последовательность символов = магазин "Цветочник", адрес ... возле метро "ccc"...

я имею в виду что сама строка текста может содржать любую последовательность..


 
Mysql   (2007-05-17 17:47) [3]

т.е. как мне эту любую последовательность букв и символов нисертить чтобы сервер не ругался..


 
Val ©   (2007-05-17 17:48) [4]

все такие последовательности инсертят. давайте лучше о ругани сервера.


 
Johnmen ©   (2007-05-17 17:55) [5]

как параметр!


 
Mysql   (2007-05-17 17:57) [6]

insert into table (pole) values ("aadasaasdasdas")
так ок

insert into table (pole) values ("aadas"aasdasdas")
а тка ругается:You have an error in your SQL syntax;


 
Mysql   (2007-05-17 17:59) [7]

сама строка должна заключаться в кавычки или одинарные млм в двойные - но в ней внутри могут  быть и те и те кавычки.. вот тут возникает ошибка..


 
Val ©   (2007-05-17 17:59) [8]

согласен с сервером.
если так попробовать:
как параметр.

в общем, знак препинания можете выбирать любой.


 
Mysql   (2007-05-17 18:10) [9]

короче говоря нужно обрабатывать строку заменяя кавычки, чтобы они были нетакие как крайние (те что используются для синтаксиса).

а другой выход есть ?
типа внутренней функции сервера в которой в качестве параметра есть добавляемый текст и он его вставляет без ругни ?

вроде этого:

str_function(aaaa"bbb"ccc"ddd""" """);


 
Плохиш ©   (2007-05-17 18:48) [10]

Quotedstr


 
Desdechado ©   (2007-05-17 19:37) [11]

Мдя, разговор с глухим...
Еще раз - как параметр, а не как значение в запросе:
Query.SQL.Text:="insert into table (pole) values (:P0)";
Query.Params[0].AsString:=твое_чего_не_попадя


 
Mysql   (2007-05-18 14:07) [12]


> Desdechado ©


Пасибо! Разобрался, просто еще не имел дела с параметрическими запросами..
но грубить не надо ;)

есть вопросик (:P0) после двоеточия может быть любое имя (последовательност букв :) ) ?

а то я че только туда не писал, все равно пашет =)


 
Desdechado ©   (2007-05-18 15:27) [13]

> я че только туда не писал, все равно пашет
Это имя параметра для обращения ParamByName("P0").AsString
Для удобочитаемости кода.


 
Mysql   (2007-05-18 15:58) [14]

т.е. в том примере можно писать любое слово после двоеточия?


 
Виталий Панасенко ©   (2007-05-18 16:06) [15]


> Mysql   (18.05.07 15:58) [14]
> т.е. в том примере можно писать любое слово после двоеточия?
>

Нет, только после троеточия


 
ANTPro ©   (2007-05-21 10:48) [16]

Какие служебные символе еще существуют, которые не верно обрабатываются? Обработку " и \ я сделал.
ЗЫ: Или лучше переделать запросы на использование параметра?


 
Desdechado ©   (2007-05-21 11:03) [17]

> Или лучше переделать запросы на использование параметра?
Это единственное верное решение. Причем, в значительносй степени не из-за проблемы служебных символов.

> Какие служебные символе еще существуют
У каждой СУБД свои.


 
ANTPro ©   (2007-05-21 11:05) [18]

> [17] Desdechado ©   (21.05.07 11:03)
> У каждой СУБД свои.

MySQL


> [17] Desdechado ©   (21.05.07 11:03)
> Это единственное верное решение.

Да. Но так не охота переделывать запросы : )


 
ANTPro ©   (2007-05-21 11:07) [19]

Вот все запросы работают через эту функцию:
function TDM.SafeSQL(const SQL: string; Field: array of string): string;
var
 i, Position, OldPosition, Len: Integer;
 Buff: string;
begin
 Len := Length(Field);
 for i := 0 to Len - 1 do
 begin
   Field[i] := StringReplace(Field[i], "\", "\\", [rfReplaceAll]);
   Field[i] := StringReplace(Field[i], """, "\"", [rfReplaceAll]);
 end;
 Buff := SQL;
 Result := "";
 OldPosition := 1;
 for i := 1 to Len do
 begin
   Position := PosEx("[" + IntToStr(i) + "]", Buff, OldPosition);
   Result := Result + Copy(Buff, OldPosition, Position - OldPosition) + Field[i - 1];
   OldPosition := Position + Length("[" + IntToStr(i) + "]");
 end;
 Result := Result + Copy(Buff, OldPosition, Length(Buff) - 1);
end;

---
Действительно она безопасная? : )


 
ANB ©   (2007-05-21 11:46) [20]


> Действительно она безопасная? : )

Нет.
Это не раздел "Начинающим".
Верный способо уже указан.

Для глухих повторяю - рация на танке !!! (С) Стырено.


 
Itonix ©   (2007-05-21 23:48) [21]

а не проще ли quotedstr ?


 
Mysql   (2007-05-22 20:30) [22]


> Itonix ©   (21.05.07 23:48) [21]
> а не проще ли quotedstr ?


может и проще но надежнее через параметры.

p.s. пробовал через эту функцию - не работает..



Страницы: 1 вся ветка

Текущий архив: 2007.09.23;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
15-1188226793
неискушенный
2007-08-27 18:59
2007.09.23
Просто интересно


8-1165939363
TkN
2006-12-12 19:02
2007.09.23
Проблема с переполнением памяти


15-1188217178
GrayFace
2007-08-27 16:19
2007.09.23
Не работает Debugger в BDS2006


15-1187704716
oldman
2007-08-21 17:58
2007.09.23
Отключение прерываний.


15-1187958426
BaryVetaL
2007-08-24 16:27
2007.09.23
OpenOffice Calc + Delphi