![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с ковычкой [D5, MSSQL]
kostik78ua © (2003-09-09 14:19:00)
Мастера! Странный глюк:
Выполнить команду типа
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("insert into Table1 (id, name) values (1, ""Лук"яненко"")");
Query1.ExecSQL;
Данная команда проходит, но если я работаю с трехуровневой технологией
ClientDataSet1.Close;
ClientDataSet1.CommandText := "insert into Table1 (id, name) values (1, ""Лук"яненко"")";
ClientDataSet1.Execute;
Выдает ошибку что-то типа "непарное количество кавычек".
После тестирования оказалось что проблема в двойной кавычке. Причем, если бы было, например:
insert into Table1 (id, name) values (1, "ООО "Колос"")
или
insert into Table1 (id, name1, name2) values (1, "Лук"яненко", "Дем"яненко")
то оно бы прокатывает, т.к. четное кол-во кавычек (если брать всю строку целиком, начиная от insert до закрывающей скобки).
Кто-нибудь натыкался на подобные глюки?
Nikky (2003-09-09 17:58:00) [1]
> kostik78ua (09.09.03 15:29) [5]
вам же говорят грамотные вещи:
>
> Nikolay M. © (09.09.03 15:23) [4]
Andriy Tysh (2003-09-09 15:36:00) [2]
>>МОДЕРАТОР:Сорри, это не спам-не ту кнопку нажимал!
:)
Andriy Tysh (2003-09-09 15:34:00) [3]
ClientDataSet1.CommandText := "insert into Table1 (id, name) values (1, "+
QuotedStr("Лук"яненко")+")";
или используй #39
Andriy Tysh (2003-09-09 15:34:00) [4]
ClientDataSet1.CommandText := "insert into Table1 (id, name) values (1, "+
QuotedStr("Лук"яненко")+")";
или используй #39
Andriy Tysh (2003-09-09 15:34:00) [5]
ClientDataSet1.CommandText := "insert into Table1 (id, name) values (1, "+
QuotedStr("Лук"яненко")+")";
или используй #39 или Chr(39)
>см. DenK_vrtz © (09.09.03 14:25) [1]
kostik78ua (2003-09-09 15:29:00) [6]
Прошу прощения за неточность!
Глюк возникает если в insert-е есть двойнаяковычка и двоеточие(например в дате)
ClientDataSet1.CommandText := "insert into Table1 (id, name, date1) values (1, ""Лук"яненко"", ""01.01.2003 00:00:00"")";
Глюк!
Причем, поэкспериментировал:
ClientDataSet1.CommandText := "insert into Table1 (id, name, date1) values (1, ""Лук"яненко"", ""01.01.2003 00 ::00 ::00"")";
Прокатило!
Nikolay M. (2003-09-09 15:23:00) [7]
> двойная ковычка должна распознаваться как символ
Дык тут разберешь... Где двойная, а где одинарная...
Btw, у меня тоже что-то было с двойной кавычкой у MS SQL...
Хотя вот такое в SQL Explorer прокатывает:
INSERT INTO city (id_city, name, phone_prefix, sequence, enabled)
VALUES (4, "12"124", "1234", 4, 1)
Нет, все-таки избавляйся от желания писать SQL-запросы на клиенте. Вот уже первый затык, а сколько их еще будет...
kostik78ua (2003-09-09 14:54:00) [8]
>> Nikolay M
Дело в том что одинарные ковычки у меня дублируются :
>> ClientDataSet1.CommandText := "insert into Table1 (id, name) values (1, ""Лук"яненко"")";
А вот двойная ковычка должна распознаваться как символ. И она распознается в двухуровневой технологии, но не в трехуровневой.
Nikolay M. (2003-09-09 14:29:00) [9]
Это не глюк. В SQL в строках кавычка должна заменяться на две кавычки подряд либо слэшироваться (зависит от СУБД).
ПС
А вообще, ИМХО, у тебя в принципе подход неверный - ты с клиента оперируешь непосредственно данными, что нарушает идеологию многозвенки, т.к. ты проскакиваешь один уровень - уровень RDM.
DenK_vrtz (2003-09-09 14:25:00) [10]
chr(39) или #39 - решит проблему