Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > TADOQuery


Автор: Vitus 1.8.2002, 13:32
Help me! В обычном TQuery параметры объявлял так:

Код
Query1.ParamByName('xxx').AsInteger := xxx;


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

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


и так:
Код
ADOQuery1.Parameters.ParamValues['xxx'] := xxx;


и так:
Код
ADOQuery1.Parameters.CreateParameter('xxx', ftInteger, pdInput, 10, nil);


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

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

Автор: Vit 1.8.2002, 15:23
Надо так:

ADOQuery1.Parameters.ParamByName('xxx').Value := xxx;

Учти что к моменту определения параметра должно быть следующее:

1) Задан Connection/ConnectionString
2) Параметры должны быть Parsed - если ты кверю пишешь в дизайне, то всё путём, если в коде, то надо добавить:
ADOQuery1.Parameters.ParseSQL(ADOQuery1.sql.text, true)

Автор: Vitus 1.8.2002, 15:47
Вот как именно выгдядит код:

Код
qry.Close;
qry.SQL.Text := 'Select * From Table1 Where Field1=:par1'+
 ' and Field2=(Select Min(Field2) From Table1 Where Field1=:par1)';
qry.Parameters.ParamByname('par1').Value := var1;
qry.Parameters.ParseSQL(qry.SQL.Text, True);
qry.Open;


Но... все-таки ошибка:
"Parameter object is improperly defined. Inconsistent or incomplete information was provided"

Так что дело в чем-то другом... :(

Автор: Vit 1.8.2002, 15:49
2 Ошибки:

1) ParseSQL ставить надо перед параметрами
2) Нельзя применять один параметер дважды, замени второй ":par1" на ":par2" и присвой его тоже

Автор: Vitus 1.8.2002, 16:08
1. О! Второй параметр заменял ":par1" на ":par2" и присваивал его тоже. А почему в ADO нельзя один и тот же параметр использовать в запросе несколько раз, а присваивать ему значение только один раз??? В обычном же TQuery с BDE можно было?

2. От ParseSQL ничего особо не зависит, по крайней мере и так работает, если с 2-мя параметрами.

Автор: Vit 1.8.2002, 16:50
1. Это вопрос к микрософту, так они сделали дизайн
2. Если тебя устроит вероятность появления ошибки типа "Parameter was not found" или что-то подобного примерно в 20-30% можешь эту строку не писать. Я не знаю почему иногда она нужна, иногда нет, может это зависит от ADO провайдера, может от сложности квери, может от погоды, но если ты присваиваешь текст квери в коде её написание позволяет на 100% избавится от ошибок связанных с неправильным распознаванием параметров, а то что это и так работает, ну так это ж не всегда.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)