Форум: "Базы";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
ВнизЗабавная ошибка Найти похожие ветки
← →
Денис (2003-04-03 11:54) [0]Parameter object is improperly defined. Inconsistent or incomplete information was provided.
Вот именно так ругается на следующий код:
n := "(31H2NEU) E54 Black 15", 0.28, TCO-95, 800x600 85Hz, Warranty: 3 years";
TADOCommand1.CommandText := "update nom set " + "name = """ + DoubleQuotes(n) + """ where id = 34130";
TADOCommand1.Execute;
Функция DoubleQuotes возвращает строку, в которой каждое вхождение кавычки (") удвоено. Самое интересное! Если в значении переменной n убрать двоеточие после слова Warranty - все работает!!! Кто-нибудь может прояснить ситуацию? Спасибо.
← →
Mike Kouzmine (2003-04-03 11:56) [1]: - параметр
← →
Денис (2003-04-03 11:58) [2]Посмотрел - думаю, нужно уточнить. После "Black 15" идут кавычки, а не два апострофа, как может показаться, а DoubleQuotes удваивает апострофы, а не кавычки, как я написал. Извините за путаницу.
← →
Mike Kouzmine (2003-04-03 11:59) [3]Это ничего не меняет : - параметр
← →
Денис (2003-04-03 12:01) [4]Mike Kouzmine.
Но если сделать, например,
n := "АТС Siemens euroset line 308 <DSS:GUS-308R> (3x8)";
то все ок...
← →
Stas (2003-04-03 12:03) [5]Утверждать не буду, но видимо прога принимает двоеточие как объявление параметра.
← →
Johnmen (2003-04-03 12:06) [6]Надо просто более четко разобраться с кавычками...:)
>Но если сделать, например,
>n := "АТС Siemens euroset line 308 <DSS:GUS-308R> (3x8)";
>то все ок...
Здесь то их нет...
← →
Денис (2003-04-03 12:12) [7]Хм... если
n := "АТС Siemens" euroset line 308 <DSS:GUS-308R> (3x8)";
т.е. после Siemens кавычки - ругается, кавычки убрать - все ок. Что за бред?
← →
Денис (2003-04-03 12:18) [8]А если
n := "АТС Siemens"" euroset line 308 <DSS:GUS-308R> (3x8)";
т.е. удвоенные кавычки - тогда не ругается, но и в базе появляются удвоенные кавычки, а это неправильно.
Еще один эксперимент:
n := "АТС Siemens: euroset line 308 <DSS"GUS-308R> (3x8)";
т.е. кавычки и двоеточие поменял местами - все ок!
И лишь удвоение двоеточия
n := "АТС Siemens" euroset line 308 <DSS::GUS-308R> (3x8)";
не проругалось и дало нормальный результат - в базе есть и кавычки, и двоеточие (одно).
Скажите, кто-нибудь сталкивался с таким, удваивал двоеточия? Что за бред вообще? :-)
← →
Johnmen (2003-04-03 12:25) [9]Да нет, это не бред, а нормальное поведение, когда строка символов подвергается синтаксическому разбору...
← →
Денис (2003-04-03 12:30) [10]Johnmen-у.
А мне кажется, что в процедуре синтаксического разбора ошибка. Я задаю sql-команду, в которой нужно обновить строковое поле таблицы. Я задаю значение этого поля, строка идет в апострофах, внутренние апострофы удвоены. Кавычки считаются обычными символами. НО! Если после кавычек в строке встречается двоеточие, то оно интерпретируется как предваряющее имя параметра. Но это же просто строка! Поэтому я и считаю, что в разборе ошибка.
← →
sniknik (2003-04-03 12:38) [11]отключи проверку параметра (ParamCheck) и проверь свой запрос как есть, наверняка чтото другое вылезет если напутал с кавычками.
(прежде чем говорить что "в процедуре синтаксического разбора ошибка")
← →
Денис (2003-04-03 12:45) [12]sniknik.
Конечно я погорячился, говоря про ошибку, хотя нигде еще не встречал необходимость удвоения двоеточия, поэтому странным все это показалось. ParamCheck убрал и все стало хорошо. Однако опытным путем установлено, что если ParamCheck = true, то между нечетным и четным вхождением кавычек двоеточия нужно удваивать, и тогда все ок независимо от значения ParamCheck.
Всем спасибо за обсуждение и помощь.
← →
sniknik (2003-04-03 13:16) [13]> то между нечетным и четным вхождением кавычек двоеточия нужно удваивать
может путаница оттого, что именно так кавычка в строке и задается (удвоение, один из способов)
ShowMessage("D""Artanian");
а когда задаеш запрос то внутри него строка задается тоже в кавычках, и зависит от этого а не четным/нечетным.
(когда правильно задаеш ограничения строки, то неважно какое значение ParamCheck)
TADOCommand1.CommandText :=
"update nom set name = ""<неважно что здесь будет : это : строка : в : самом : запросе>""";
(вот это пройдет уверен хотя и не пробовал)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c