Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос с управляемым пользователем WHERE / 13 сообщений из 13, страница 1 из 1
13.09.2004, 16:43:38
    #32692316
kedzo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с управляемым пользователем WHERE
Задача:

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

есть сохраненный запрос - как в него передать это условие?
...
Рейтинг: 0 / 0
13.09.2004, 16:56:25
    #32692357
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с управляемым пользователем WHERE
в каком виде доступен результат запроса, через DoCmd.OpenQuery или отображается на форме?
...
Рейтинг: 0 / 0
13.09.2004, 17:04:07
    #32692379
kedzo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с управляемым пользователем WHERE
в виде списка в форме
...
Рейтинг: 0 / 0
13.09.2004, 17:07:12
    #32692389
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с управляемым пользователем WHERE
ну тогда тебе надо в начале строки условия и после каждого лог. оператора вставлять имя поля, по которому происходит отбор, а затем для списка сделать след. :

me.Lst.RecordSource = "Select * From MyQuery WHERE " & обработаная строка условия
...
Рейтинг: 0 / 0
13.09.2004, 17:07:18
    #32692390
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с управляемым пользователем WHERE
kedzoесть сохраненный запрос - как в него передать это условие?
модифицируй текст сохраненного запроса
...
Рейтинг: 0 / 0
13.09.2004, 17:10:08
    #32692398
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с управляемым пользователем WHERE
В запросе есть свойство SQL - можно его изменять (т.е. через QueryDef - я это делал в 97 в паралитике, позже не делал - хп в адп использую, но через adox, я думаю, тоже можно всё это получить).
При этом нужно следить за порядком инструкций - если у тебя есть сортировки или группировки - т.е. придётся делать разбор строки по ключевым словам.

Ну а если в запросе есть требуемое поле в выборке, то нет проблем написать select * from Query Where [условие по полям].
...
Рейтинг: 0 / 0
13.09.2004, 17:11:32
    #32692404
Нерюх
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с управляемым пользователем WHERE
dim Uslovie as string
querydef.sql="Select ..." & "where myVariable" & Uslovie
...
Рейтинг: 0 / 0
13.09.2004, 17:16:42
    #32692419
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с управляемым пользователем WHERE
легкая задача
держи в коде константу с запросом до 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


Точно таким же макаром строятся запросы с переменным (отбираемым пользователем) числом полей
и группировкой по ним
...
Рейтинг: 0 / 0
13.09.2004, 17:21:52
    #32692436
kedzo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с управляемым пользователем WHERE
ок. всем спасибо.
думал мож кто попроще способ подскажет. сидел ждал :) а то думаю начну копать в направлении модификации запроса, а кто-нибудь знает простой и элегантный способ, которого я не вижу.

ну и ладно
...
Рейтинг: 0 / 0
13.09.2004, 17:34:28
    #32692480
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с управляемым пользователем WHERE
2 Alexus12
Вот есть у меня сохранённый запрос. В нём есть группировки и сортировки, но нет полей для условия Where (т.е. условие по тем полям, которых нет в селекте для того, чтобы не было дублирования записей, именно для этого стоит группировка по выбранным полям).
Эта задача решается модификацие текста запроса с установкой where в нужное место, а не конкатенацией строк.

P.S. Пользователь не должен создавать запросы - или вы предлагаете описывать ему всю структуру таблиц в БД?:)
...
Рейтинг: 0 / 0
14.09.2004, 22:48:37
    #32694739
lobodava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с управляемым пользователем WHERE
to kedzo:

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

Если напишешь интерпретатор строки для числовых условий, дай посмотреть. А?
...
Рейтинг: 0 / 0
15.09.2004, 09:17:16
    #32694914
kedzo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с управляемым пользователем WHERE
страничку видел.
интерпретартор пока писать не стал, объехал 2 полями и жестким AND - задача это позволяла. Но чувство неудовлетворенности осталось
будет время, займусь.
...
Рейтинг: 0 / 0
15.09.2004, 13:59:52
    #32695697
Bely
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с управляемым пользователем WHERE
kedzoок. всем спасибо.
думал мож кто попроще способ подскажет. сидел ждал :) а то думаю начну копать в направлении модификации запроса, а кто-нибудь знает простой и элегантный способ, которого я не вижу.

ну и ладно

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

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

Вар.2) Если вариант 1 не подходит, то создал бы таблицу, в которой бы поместил текст SQL запросов и на их основе компановал бы выражения.
Вот...
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос с управляемым пользователем WHERE / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]