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

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

ADODataSet - Parameters


Silver_ ©   (2003-04-11 15:30:00) 

ADODataSet1.CommandText имеет значение

Select * from table1
where :param1=True

в проге делаю
ADODataSet1.Close;
ADODataSet1.Parameters.ParamByName("param1").Value:=True;
ADODataSet1.Open;


в ответ получаю

...Sintax error (missing operator) in query expression " WHERE ?= True" ...


выделеную строчку в коде заменяю (что является аналогом :) )
ADODataSet1.Parameters.Items[0].Value:=True;

и опять 25 :(
В чем трабл то???


Silver_   (2003-04-11 17:23:00) [1]

Ребята ПРОШУ ПРАЩЕНИЯ замучал всех, а всё изза того что хотел упростить понимание моего кода

НАШЕЛ где грабли были

Я привел следующий запрос

SELECT * FROM Table1
WHERE((:UseFromDate = False) OR (CurrDate >= :FromDate))
AND ((:UseTillDate = False) OR (CurrDate <= :TillDate))


а у меня было так
SELECT * FROM Table1
GROUP BY ...
WHERE((:UseFromDate = False) OR (CurrDate >= :FromDate))
AND ((:UseTillDate = False) OR (CurrDate <= :TillDate))


WHERE добавил потом и не заметил что НЕ ТУДА сунул надо было перед GROUP BY ...

ещё раз прошу ПРОЩЕНИЯ!!!
и СПАСИБО за отклики, теперь уверен мастера не оставят в трудную минуту


Mike Kouzmine   (2003-04-11 17:13:00) [2]

Вопрос False AND любое значение - что будет


AlexSerp   (2003-04-11 17:12:00) [3]

Попробуй все таки вместо
:UseFromDate = False
сделать
1 =:UseFromDate
и в параметре передавать 1 или 0


Silver_   (2003-04-11 17:07:00) [4]


> AlexSerp © (11.04.03 17:00)


это было упрощенно потом привел более полноценно
SELECT * FROM Table1
WHERE((:UseFromDate = False) OR (CurrDate >= :FromDate))
AND ((:UseTillDate = False) OR (CurrDate <= :TillDate))


если UseFromDate = False диапазон неограничен слева
если UseTillDate = False диапазон неограничен справа


> Соловьев © (11.04.03 16:59)
> с ? проверил или нет?

Да даже в списке Parameters в Design-Time не появляются


AlexSerp   (2003-04-11 17:00:00) [5]

Вот этого я и не понимаю.
Как в условии WHERE дать просто параметр?
Неужели в Аксессе можно просто написать параметр не сравнивая его ни с чем?
Пардон, конечно, но в Аксессе не работал.


Соловьев   (2003-04-11 16:59:00) [6]

с ? проверил или нет?


Silver_   (2003-04-11 16:58:00) [7]


> Жук © (11.04.03 16:47)
> Я бы просто динамически сформировал текст запроса.

не то чтоб настаивал но не отступать перед трудностями то :)
нада добить этот трабл есть возможность почему-бы не воспользоваться


Silver_   (2003-04-11 16:55:00) [8]


> Соловьев © (11.04.03 16:45)
>
> > Select * from table1
> > where ?param1 or (field1=?param2)
>
> обрати внимание на ?


не понял там ":" всегда так делал правда не в АДО, или я не о том :)


Silver_   (2003-04-11 16:48:00) [9]

кстати почему я думаю что дело не в запросе,
потому что после добавления параметров в запрос я забыл присвоить им значения из проги и Дельфя ругнулся точно так-же как после того как я это исправил


Жук   (2003-04-11 16:47:00) [10]

Я бы просто динамически сформировал текст запроса.


Соловьев   (2003-04-11 16:45:00) [11]


> Select * from table1
> where ?param1 or (field1=?param2)

обрати внимание на ?


Silver_   (2003-04-11 16:43:00) [12]


> Соловьев © (11.04.03 16:23)

MS Access


> Жук © (11.04.03 16:25)
> Select * from table1
> where 1=:param1 Если надо истину, то ADODataSet1.Parameters.ParamByName("param1"). AsInteger:=1;

вы уверены что он тама (у ADODataSet) есть
ADODataSet1.Parameters.ParamByName("param1"). AsInteger


> Только не понятно к чему всё это ?

нада запрос такой

SELECT * FROM Table1
WHERE((:UseFromDate = False) OR (CurrDate >= :FromDate))
AND ((:UseTillDate = False) OR (CurrDate <= :TillDate))

если UseFromDate = False диапазон неограничен слева
если UseTillDate = False диапазон неограничен справа

ДА ДЕЛО НЕ В ЗАПРОСЕ ОН ПРАВЕЛЬНО РАБОТАЕТ (без параметров)


Жук   (2003-04-11 16:25:00) [13]

Select * from table1
where 1=:param1
Если надо истину, то ADODataSet1.Parameters.ParamByName("param1").AsInteger:=1;
Только не понятно к чему всё это ?


Соловьев   (2003-04-11 16:23:00) [14]

СУБД???

Select * from table1
where ?param1 or (field1=?param2)


Silver_   (2003-04-11 16:23:00) [15]

Да и вобще бог с ним с этим запросом почему он параметры не признает типа их ваще не задавал


Silver_   (2003-04-11 16:21:00) [16]


>
> Select * from table1
> where :param1=True

это упрощенный пример само сабой нет особого смысла вот по другому:

Select * from table1
where :param1 or field1=:param2


пояснения: :)
т.е. если param1=True тогда "плевать" хотелось на ограничения field1=:param2 если param1=False тогда выдавать тока field1=:param2

тогда ошибка выглядит так

...Sintax error (missing operator) in query expression " WHERE ?or field2= ?" ...


AlexSerp   (2003-04-11 15:43:00) [17]

Всегда считал, что надо так

Select * from table1
where поле условие :param1

Например
Select * from table1
where field1 >= :param1


Соловьев   (2003-04-11 15:38:00) [18]

А так?

Select * from table1
where :param1


Соловьев   (2003-04-11 15:37:00) [19]

это ты типа поле подставляешь или что?


Silver_   (2003-04-11 15:34:00) [20]

кстати трасировщиком когда прохожу параметримеет нужное значение
а Дельфя полюбому выдает мол нету у него значения


Наверх

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