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

Вниз

Проблема с ковычкой   Найти похожие ветки 

 
kostik78ua   (2003-09-09 14:19) [0]

Мастера! Странный глюк:
Выполнить команду типа
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 до закрывающей скобки).
Кто-нибудь натыкался на подобные глюки?


 
DenK_vrtz ©   (2003-09-09 14:25) [1]

chr(39) или #39 - решит проблему


 
Nikolay M. ©   (2003-09-09 14:29) [2]

Это не глюк. В SQL в строках кавычка должна заменяться на две кавычки подряд либо слэшироваться (зависит от СУБД).

ПС
А вообще, ИМХО, у тебя в принципе подход неверный - ты с клиента оперируешь непосредственно данными, что нарушает идеологию многозвенки, т.к. ты проскакиваешь один уровень - уровень RDM.


 
kostik78ua   (2003-09-09 14:54) [3]

>> Nikolay M
Дело в том что одинарные ковычки у меня дублируются :
>> ClientDataSet1.CommandText := "insert into Table1 (id, name) values (1, ""Лук"яненко"")";
А вот двойная ковычка должна распознаваться как символ. И она распознается в двухуровневой технологии, но не в трехуровневой.


 
Nikolay M. ©   (2003-09-09 15:23) [4]


> двойная ковычка должна распознаваться как символ

Дык тут разберешь... Где двойная, а где одинарная...
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 15:29) [5]

Прошу прощения за неточность!
Глюк возникает если в 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"")";
Прокатило!


 
Andriy Tysh ©   (2003-09-09 15:34) [6]

ClientDataSet1.CommandText := "insert into Table1 (id, name) values (1, "+
QuotedStr("Лук"яненко")+")";

или используй #39


 
Andriy Tysh ©   (2003-09-09 15:34) [7]

ClientDataSet1.CommandText := "insert into Table1 (id, name) values (1, "+
QuotedStr("Лук"яненко")+")";

или используй #39


 
Andriy Tysh ©   (2003-09-09 15:34) [8]

ClientDataSet1.CommandText := "insert into Table1 (id, name) values (1, "+
QuotedStr("Лук"яненко")+")";

или используй #39 или Chr(39)

>см. DenK_vrtz © (09.09.03 14:25) [1]


 
Andriy Tysh ©   (2003-09-09 15:36) [9]

>>МОДЕРАТОР:Сорри, это не спам-не ту кнопку нажимал!
:)


 
Nikky ©   (2003-09-09 17:58) [10]


> kostik78ua (09.09.03 15:29) [5]


вам же говорят грамотные вещи:


>
> Nikolay M. © (09.09.03 15:23) [4]



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

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

Наверх




Память: 0.49 MB
Время: 0.016 c
14-96366
jack128
2003-09-12 01:48
2003.09.29
Именинники 12 сентября


1-96246
Karburator
2003-09-17 15:52
2003.09.29
Файл


3-96092
AlexPul
2003-09-09 17:30
2003.09.29
Как вручную из командной строки запустить сервер Firebird ?


1-96260
griff
2003-09-12 14:10
2003.09.29
i/o error 21


14-96410
Дремучий
2003-09-11 11:04
2003.09.29
Почему из форумов нет ссылки на Список Анкет?