Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.05 c
15-1187801365
ferr
2007-08-22 20:49
2007.09.23
Бука.


2-1188290138
Include
2007-08-28 12:35
2007.09.23
Indy компоненты, ключи


3-1179500564
remlin
2007-05-18 19:02
2007.09.23
Фильтрация ADOQuery


15-1188201729
Domkrat
2007-08-27 12:02
2007.09.23
TDateTimeEdit


2-1188084451
foreverDelphi
2007-08-26 03:27
2007.09.23
не запустить вторую копию программы





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