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

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

Забавная ошибка [D6, MS Access]


Денис ©   (2003-04-03 11:54:00) 

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 - все работает!!! Кто-нибудь может прояснить ситуацию? Спасибо.


sniknik   (2003-04-03 13:16:00) [1]

> то между нечетным и четным вхождением кавычек двоеточия нужно удваивать

может путаница оттого, что именно так кавычка в строке и задается (удвоение, один из способов)
ShowMessage("D""Artanian");
а когда задаеш запрос то внутри него строка задается тоже в кавычках, и зависит от этого а не четным/нечетным.
(когда правильно задаеш ограничения строки, то неважно какое значение ParamCheck)
TADOCommand1.CommandText :=
"update nom set name = ""<неважно что здесь будет : это : строка : в : самом : запросе>""";
(вот это пройдет уверен хотя и не пробовал)


Денис   (2003-04-03 12:45:00) [2]

sniknik.
Конечно я погорячился, говоря про ошибку, хотя нигде еще не встречал необходимость удвоения двоеточия, поэтому странным все это показалось. ParamCheck убрал и все стало хорошо. Однако опытным путем установлено, что если ParamCheck = true, то между нечетным и четным вхождением кавычек двоеточия нужно удваивать, и тогда все ок независимо от значения ParamCheck.

Всем спасибо за обсуждение и помощь.


sniknik   (2003-04-03 12:38:00) [3]

отключи проверку параметра (ParamCheck) и проверь свой запрос как есть, наверняка чтото другое вылезет если напутал с кавычками.
(прежде чем говорить что "в процедуре синтаксического разбора ошибка")


Денис   (2003-04-03 12:30:00) [4]

Johnmen-у.
А мне кажется, что в процедуре синтаксического разбора ошибка. Я задаю sql-команду, в которой нужно обновить строковое поле таблицы. Я задаю значение этого поля, строка идет в апострофах, внутренние апострофы удвоены. Кавычки считаются обычными символами. НО! Если после кавычек в строке встречается двоеточие, то оно интерпретируется как предваряющее имя параметра. Но это же просто строка! Поэтому я и считаю, что в разборе ошибка.


Johnmen   (2003-04-03 12:25:00) [5]

Да нет, это не бред, а нормальное поведение, когда строка символов подвергается синтаксическому разбору...


Денис   (2003-04-03 12:18:00) [6]

А если
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)";
не проругалось и дало нормальный результат - в базе есть и кавычки, и двоеточие (одно).

Скажите, кто-нибудь сталкивался с таким, удваивал двоеточия? Что за бред вообще? :-)


Денис   (2003-04-03 12:12:00) [7]

Хм... если
n := "АТС Siemens" euroset line 308 <DSS:GUS-308R> (3x8)";
т.е. после Siemens кавычки - ругается, кавычки убрать - все ок. Что за бред?


Johnmen   (2003-04-03 12:06:00) [8]

Надо просто более четко разобраться с кавычками...:)

>Но если сделать, например,
>n := "АТС Siemens euroset line 308 <DSS:GUS-308R> (3x8)";
>то все ок...

Здесь то их нет...


Stas   (2003-04-03 12:03:00) [9]

Утверждать не буду, но видимо прога принимает двоеточие как объявление параметра.


Денис   (2003-04-03 12:01:00) [10]

Mike Kouzmine.

Но если сделать, например,
n := "АТС Siemens euroset line 308 <DSS:GUS-308R> (3x8)";
то все ок...


Mike Kouzmine   (2003-04-03 11:59:00) [11]

Это ничего не меняет : - параметр


Денис   (2003-04-03 11:58:00) [12]

Посмотрел - думаю, нужно уточнить. После "Black 15" идут кавычки, а не два апострофа, как может показаться, а DoubleQuotes удваивает апострофы, а не кавычки, как я написал. Извините за путаницу.


Mike Kouzmine   (2003-04-03 11:56:00) [13]

: - параметр


Наверх

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