Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TADOQuery, Как объявить параметры в TADOQuery? 
:(
    Опции темы
Vitus
  Дата 1.8.2002, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 23.7.2002
Где: Москва

Репутация: нет
Всего: нет



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."

Как все-таки нужно?
PM MAIL ICQ   Вверх
Vit
Дата 1.8.2002, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Надо так:

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

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

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


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vitus
  Дата 1.8.2002, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 23.7.2002
Где: Москва

Репутация: нет
Всего: нет



Вот как именно выгдядит код:

Код
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"

Так что дело в чем-то другом... :(
PM MAIL ICQ   Вверх
Vit
Дата 1.8.2002, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



2 Ошибки:

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


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vitus
Дата 1.8.2002, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 23.7.2002
Где: Москва

Репутация: нет
Всего: нет



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

2. От ParseSQL ничего особо не зависит, по крайней мере и так работает, если с 2-мя параметрами.
PM MAIL ICQ   Вверх
Vit
Дата 1.8.2002, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



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


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0696 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.