Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

передать параметр в IBDataSet [D7, FB]


mr.il ©   (2006-05-16 10:41:00) 

Есть запрос:
select *
from PERSONS pers
where upper(pers.PERSON) like upper(:PERS_Name) or
:PERS_Name = 'ALL'
order by pers.PERSON

передаю параметр

 IBDS_PERSONS.Close;
 IBDS_PERSONS.Params.ByName('PERS_Name').AsString := 'ALL';
 IBDS_PERSONS.Open;

а в ответ: "Incorrect values within SQLDA structure".
Весь хелп перерыл понять ошибку не могу.


Johnmen   (2006-05-16 16:06:00) [1]

Params or Parameters property to assign values to a parameter based on the parameter’s ordinal position within the SQL statement.

Это прямой намёк.


mr.il   (2006-05-16 15:39:00) [2]

Johnmen ©   (16.05.06 14:22) [5]
>Надо это включить в фак.
Зачем из хелпа в фак?


Может я не то читаю, но в хелпе по TIBXSQLDA ничего не сказано про "гемор" с повторным использованием параметра в запросе.

ANB ©   (16.05.06 14:58) [6]
ЗЫ. Вот всегда считал, что лучше ораклом пользоваться.

А если это небольшой проект?


Desdechado   (2006-05-16 15:39:00) [3]

ANB ©   (16.05.06 14:58) [6]
дело не в СУБД, а в особенностях реализации отдельных компонентов
некоторые из них считают, что нужно все одноименные параметры присваивать скопом, некоторые - только первый попавшийся


ANB   (2006-05-16 14:58:00) [4]

ЗЫ. Вот всегда считал, что лучше ораклом пользоваться.


Johnmen   (2006-05-16 14:22:00) [5]

>Надо это включить в фак.

Зачем из хелпа в фак?


mr.il   (2006-05-16 14:07:00) [6]

Desdechado © писал
есть подозрение, что параметров 2, хоть и с одинаковым именем...

Оказалось, в точку. Блин так не очевидно. Искал решение проблемы в одном месте, а оказалось проблема в другом. Надо это включить в фак.

where upper(pers.PERSON) like upper(:PERS_Name) or
:PERS_Name1 = 'ALL'
.....
IBDS_PERSONS.Params.ByName('PERS_Name').AsString := 'ALL';
IBDS_PERSONS.Params.ByName('PERS_Name1').AsString := 'ALL';


Sergey13   (2006-05-16 11:00:00) [7]

У меня вот так прошло вроде

select *
from PERSONS pers
where upper(pers.PERSON) like upper(:PERS_Name) or :PERS_Name = cast('ALL' as varchar(30))


Desdechado   (2006-05-16 10:49:00) [8]

есть подозрение, что параметров 2, хоть и с одинаковым именем
и что присваивать значение нужно обоим


Sergey13   (2006-05-16 10:45:00) [9]

IBDS_PERSONS.Params. ParamByName('PERS_Name').AsString := 'ALL';


Наверх

Титульная страница Поиск, карта сайта Написать письмо