Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с ковычкой [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 - решит проблему


Наверх

Титульная страница Поиск, карта сайта Написать письмо