![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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=:param1ADODataSet1.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]кстати трасировщиком когда прохожу параметримеет нужное значение
а Дельфя полюбому выдает мол нету у него значения