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

Вниз

Как объявить параметры в 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
14-71317
Слесарь нематерящийся
2002-07-26 07:49
2002.08.22
Прога


1-71112
besen-ok
2002-08-12 11:25
2002.08.22
Добавить картинку в исполняемый файл


1-71146
SS1
2002-08-13 14:10
2002.08.22
День недели из даты


14-71370
MJH
2002-07-28 01:56
2002.08.22
http://www.mjhf.dk/


1-71075
LEKSYS
2002-08-12 11:41
2002.08.22
fsMDIChild