Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Запрос с управляемым пользователем WHERE  [new]
kedzo
Member

Откуда: Москва
Сообщений: 964
Задача:

в форме есть поле, где я хочу указывать условие для запроса, что-то типа
>200
<200
>=100 and <=400
>=800
=1000

есть сохраненный запрос - как в него передать это условие?
13 сен 04, 16:43    [955642]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с управляемым пользователем WHERE  [new]
Kelme
Member

Откуда: Riga, Latvia
Сообщений: 1488
в каком виде доступен результат запроса, через DoCmd.OpenQuery или отображается на форме?
13 сен 04, 16:56    [955709]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с управляемым пользователем WHERE  [new]
kedzo
Member

Откуда: Москва
Сообщений: 964
в виде списка в форме
13 сен 04, 17:04    [955742]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с управляемым пользователем WHERE  [new]
Kelme
Member

Откуда: Riga, Latvia
Сообщений: 1488
ну тогда тебе надо в начале строки условия и после каждого лог. оператора вставлять имя поля, по которому происходит отбор, а затем для списка сделать след. :

me.Lst.RecordSource = "Select * From MyQuery WHERE " & обработаная строка условия
13 сен 04, 17:07    [955758]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с управляемым пользователем WHERE  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
kedzo
есть сохраненный запрос - как в него передать это условие?

модифицируй текст сохраненного запроса
13 сен 04, 17:07    [955759]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с управляемым пользователем WHERE  [new]
Hummer
Member

Откуда:
Сообщений: 2583
В запросе есть свойство SQL - можно его изменять (т.е. через QueryDef - я это делал в 97 в паралитике, позже не делал - хп в адп использую, но через adox, я думаю, тоже можно всё это получить).
При этом нужно следить за порядком инструкций - если у тебя есть сортировки или группировки - т.е. придётся делать разбор строки по ключевым словам.

Ну а если в запросе есть требуемое поле в выборке, то нет проблем написать select * from Query Where [условие по полям].
13 сен 04, 17:10    [955770]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с управляемым пользователем WHERE  [new]
Нерюх
Member

Откуда:
Сообщений: 129
dim Uslovie as string
querydef.sql="Select ..." & "where myVariable" & Uslovie
13 сен 04, 17:11    [955778]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с управляемым пользователем WHERE  [new]
Alexus12
Member

Откуда:
Сообщений: 2868
легкая задача
держи в коде константу с запросом до WHERE:
const SQL1="SELECT ...... FROM mytable"

затем в обработке нажатия кнопки "отчет"
анализируй введенные тобой ограничения
и пририсовывай к SQL1 WHERE:

if textbox1<>"" then SQLstring1="[myfield] " & textbox1
if textbox2<>"" then SQLstring2="[myfield] " & textbox1
и т.д.

в конце все собираешь через and / or и скобки
и пишешь в свой сохраненный запрос

dim q as dao.querydefs (???)
set q=currentdb.querydefs("имязапроса")
q.SQL=SQL1+" WHERE " + SQLstring1 + " or " + SQLstring2 .....

естественно, нужно проверять случай,
когда твои условия пусты, а то получишь
WHERE or or or an or


Точно таким же макаром строятся запросы с переменным (отбираемым пользователем) числом полей
и группировкой по ним
13 сен 04, 17:16    [955801]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с управляемым пользователем WHERE  [new]
kedzo
Member

Откуда: Москва
Сообщений: 964
ок. всем спасибо.
думал мож кто попроще способ подскажет. сидел ждал :) а то думаю начну копать в направлении модификации запроса, а кто-нибудь знает простой и элегантный способ, которого я не вижу.

ну и ладно
13 сен 04, 17:21    [955827]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с управляемым пользователем WHERE  [new]
Hummer
Member

Откуда:
Сообщений: 2583
2 Alexus12
Вот есть у меня сохранённый запрос. В нём есть группировки и сортировки, но нет полей для условия Where (т.е. условие по тем полям, которых нет в селекте для того, чтобы не было дублирования записей, именно для этого стоит группировка по выбранным полям).
Эта задача решается модификацие текста запроса с установкой where в нужное место, а не конкатенацией строк.

P.S. Пользователь не должен создавать запросы - или вы предлагаете описывать ему всю структуру таблиц в БД?:)
13 сен 04, 17:34    [955884]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с управляемым пользователем WHERE  [new]
lobodava
Member

Откуда: Москва
Сообщений: 386
to kedzo:

Это видел уже? Там тоже есть варианты для указания условий через AND, OR, NOT... но пока только для текста. Руки до разбора сторки ">=100 and <=400" для чисел и ">=09/09/2004" для дат пока не добрались :( Но эти условия там делаются по-другому, не так красиво, но зато работает. Тут недавно для ADP слегка переделал - тоже хорошо работает. Может чего пригодится.
В самом конце страницы там есть пример для скачивания в MSA 2000 и 97. Правда толстые они - по 500 kb, потому что с тестовыми данными.

Если напишешь интерпретатор строки для числовых условий, дай посмотреть. А?
14 сен 04, 22:48    [959647]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с управляемым пользователем WHERE  [new]
kedzo
Member

Откуда: Москва
Сообщений: 964
страничку видел.
интерпретартор пока писать не стал, объехал 2 полями и жестким AND - задача это позволяла. Но чувство неудовлетворенности осталось
будет время, займусь.
15 сен 04, 09:17    [959947]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с управляемым пользователем WHERE  [new]
Bely
Member

Откуда: Москва
Сообщений: 1903
kedzo
ок. всем спасибо.
думал мож кто попроще способ подскажет. сидел ждал :) а то думаю начну копать в направлении модификации запроса, а кто-нибудь знает простой и элегантный способ, которого я не вижу.

ну и ладно


Модифицировать запросы - самое последнее дело. :)

Я бы сделал так:
Вар.1) Создавал бы динамический SQL запрос на основе указанного сохраненного запроса (уже было)
szSql = "SELECT * FROM qrMyQuery WHERE " & szWhereCondition

Вар.2) Если вариант 1 не подходит, то создал бы таблицу, в которой бы поместил текст SQL запросов и на их основе компановал бы выражения.
Вот...
15 сен 04, 13:59    [961391]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить