Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];

Вниз

Как объявить параметры в TADOQuery?   Найти похожие ветки 

 
nikolo   (2002-08-01 14:27) [0]

Help me! В обычном TQuery параметры объявлял так:

Query1.ParamByName("xxx").AsInteger := xxx;

А как объявляются параметры в TADOQuery?

Пробую так:
ADOQuery1.Parameters.ParamByName("xxx").Value := AlgId;

и так:
ADOQuery1.Parameters.ParamValues["xxx"] := AlgId;

и так:
ADOQuery1.Parameters.CreateParameter("xxx", ftInteger, pdInput, 10, nil);

но постоянно выходят ошибки типа: "Parameter object is improperly defined. Inconsistent or incomplete information was provided."

Как все-таки нужно?


 
Johnmen   (2002-08-01 14:33) [1]

Так объявлять или присваивать значение ???


 
shubin   (2002-08-01 14:33) [2]

Проблема не в подстановке значения - всё правильно ( 1 вариант).
Нужно смотреть сам запрос и коннект. Причем задать значения параметра можно сразу в инспекторе и активизировать запросик.
Если ошибка смотри ранее.


 
nikolo   (2002-08-01 14:41) [3]


> shubin (01.08.02 14:33)
> Проблема не в подстановке значения - всё правильно ( 1 вариант).
> Нужно смотреть сам запрос и коннект. Причем задать значения
> параметра можно сразу в инспекторе и активизировать запросик.


Сразу скажу в дизайнере задавать параметры не могу - из число заранее не известно.

Код примерно следующий:

ADOQuery1.Close;
ADOQuery1.SQL.Text := "Select * From Table1 Where Field1=:pmXXX";
{1 вариант}
ADOQuery1.Parameters.ParamValues["pmXXX"] := Var1;
{2 вариант}
ADOQuery1.Parameters.CreateParameter("pmXXX", ftInteger,
pdInput, 10, OV);
{3 вариант}
ADOQuery1.Parameters.ParamByName("pmXXX").AsInteger := Var1;
{4 вариант}
ADOQuery1.Parameters.ParamByName("pmXXX").Value := Var1;

ADOQuery1.Open;


И ни один из этих вариантов не работает! В чем проблема-то? Напишите примерчик, как именно делается присваивание значений параметрам.


 
shubin   (2002-08-01 14:46) [4]

Лучше так.

ADOQuery - далее qry;
qry.Close;
qry.SQL.Items.Clear;
qry.SQL.Items.Add("Select * from tabl where field =:par1");
qry.Parameters.ParamByname("par1").Value = var;
qry.Open;


 
jonik pegas   (2002-08-01 14:54) [5]

присваивание текста запроса
.......
adcvspom.Parameters.Clear;
adcvspom.parameters.addParameter.name:="id";
adcvspom.Parameters.ParamByName("id").DataType:=ftfixedchar;
adcvspom.Parameters.ParamByName("id").Attributes:=[paNullable];
adcvspom.Parameters.ParamByName("id").Value:=id;
Замеченые грабли: При использовании ADO+Jet4.0 Access после присваивания значения ыйд запроса он ИНОГДА неправильно определял сам количество и тип параметров отсюда adcvspom.Parameters.Clear и все создаем ручками.
При обращении по индексу он расставляет их не в порядке записи а в порядке следования в запросе


 
nikolo   (2002-08-01 14:59) [6]

Все правильно, этот код у меня тоже работает, но! Вот какой код НЕ работает:

qry.Close;
qry.SQL.Text := "Select * From Table1 Where Field1=:par1";
if BoolValue then
qry.SQL.Add(" and Field2=(Select Min(Field2) From Table1 Where Field1=:par1)");
qry.Parameters.ParamByname("par1").Value := var;
qry.Open;


И вот тут-то такая ошибка:
"Parameter object is improperly defined. Inconsistent or incomplete information was provided."

В чем тут дело?


 
jonik pegas   (2002-08-01 15:06) [7]

Текст ошибки тебе все вполне понятно обьясняет. Свойства параметра в ADO безглючней делать ручками


 
nikolo   (2002-08-01 15:07) [8]

Кажется я понял. По всей видимости, в ADO нельзя один и тот же параметр повторять несколько раз. Надо писать так:

qry.Close;
qry.SQL.Text := "Select * From Table1 Where Field1=:par1";
if BoolValue then
qry.SQL.Add(" and Field2=(Select Min(Field2) From Table1 Where Field1=:par2)");
qry.Parameters.ParamByname("par1").Value := var;
qry.Parameters.ParamByname("par2").Value := var;
qry.Open;


Или я не прав? Может быть все-таки можно, но как-то иначе?


 
shubin   (2002-08-01 15:11) [9]

Извиняюсь за ошибку - типа Items к SQL приделал.
Что - то я криминала не вижу в запросе. Но батенька раз такая фигня - ну раздели запросы. Да и ещё у тебя пач для Delphi стоит?
(SP1 и на ADO). А то у меня все чудненько работает.


 
shubin   (2002-08-01 15:13) [10]

Да нифига можно одинаковые писать - только что попробывал


 
nikolo   (2002-08-01 15:22) [11]

Ну как? Что скажете?


 
nikolo   (2002-08-01 15:24) [12]

А у меня вот не работает :( Где патчи взять-то?


 
Lord Warlock   (2002-08-01 15:27) [13]


> nikolo ©


Особенность ADO - после того как напишешь запрос с параметрами надо зайти в св-во parametrs и прописать их типы данных, иначе Access бывает неправильно его определяет.
Насчет второго одинакового параметра - так делать нельзя, параметров будет 2 но с одинаковыми именами (на эти грабли я уже наступал). Запрос может работать, но выдавать неправильный набор данных. Этого сразу даже не заметно :)


 
nikolo   (2002-08-01 15:35) [14]

> Lord Warlock ©

Я даже делал так:

qry.Parameters.AddParameter.Name := "par1";
qry.Parameters.ParamByName("pmAlgId").Attributes:=[paNullable];
qry.Parameters.ParamByName("pmAlgId").DataType:=ftFixedChar;
qry.Parameters.ParamByName("pmAlgId").Direction := pdInput;
qry.Parameters.ParamByName("pmAlgId").Value := var1;


но все равно такая же ошибка!
Работаю я не с Access, а с MS SQL 2000.
2 параметра я делаю не одинаковые, а par1 и par2 соответственно.

Так что совершенно не понятно в чем заморочка, может действительно в патчах на Delphi5 и ADO?


 
shubin   (2002-08-01 15:36) [15]

http://borland.ru/products/downloads/download_delphi.html


 
KSergey   (2002-08-01 17:30) [16]

После динамического запрорса с параметрами - надо обязательно вызвать метод ParseSQL или что-то в этом духе, дельфи под рукой нет, проверить не могу.
Ну и назначать типы параметров, которые для access действительно плохо по умолчанию назначаются



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

Форум: "Базы";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
14-71338
Razpizdyi
2002-07-27 08:00
2002.08.22
MSDN - Что это за справка, и где ее искать?


14-71373
JC
2002-07-29 02:20
2002.08.22
Где можно достать компонент вроде


4-71435
jj
2002-06-18 20:44
2002.08.22
Сообщения - где эта очередь и кто крайний?


1-71140
restless
2002-08-09 15:28
2002.08.22
Повернуть DBNavigator


14-71334
cyborg
2002-07-25 09:17
2002.08.22
Объясните пожалуйста насчёт С++





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский