Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.012 c
14-67460
Макс Р.
2003-04-05 14:02
2003.04.21
Уменьшение размера экзешника


14-67558
RIMMER
2003-04-01 22:51
2003.04.21
Спасайте, горит автомат по биохимии!!


14-67459
Seldon
2003-04-05 21:34
2003.04.21
TextConv


3-67138
Sirus
2003-04-03 09:37
2003.04.21
Interbase 6 Диалект 3 не получаются запросы???


8-67404
hoper
2003-01-17 23:24
2003.04.21
Рисование градиента





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский