|
|
|
Динамическая смена условия в запросе на выборку.
|
|||
|---|---|---|---|
|
#18+
Всем привет! Есть запрос с датами. Нужно открывать этот запрос с разными условиями по датам. Чтобы не плодить отдельно запрос по годам, отдельно по месяцам и отдельно по дням, хочу сохранять в каком-нибудь поле на форме строку с полным условием для запроса (либо "Month(Forms!MyForm![Месяц]", либо "Year(Forms!MyForm![Год]", где Месяц и Год отдельные поля на форме) и потом подставлять его в этот запрос при его открытии. Как это реализовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2003, 13:11 |
|
||
|
Динамическая смена условия в запросе на выборку.
|
|||
|---|---|---|---|
|
#18+
В селекте запроса пишешь: Код: plaintext 1. 2. 3. Открываешь запрос и все пучком. Чтобы новые условия использовать, закрываеш запрос, изменяешь условия, открываешь запрос. Либо использовать фильтр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2003, 13:15 |
|
||
|
Динамическая смена условия в запросе на выборку.
|
|||
|---|---|---|---|
|
#18+
Вопрос вот в чем. Этот запрос является подзапросом 2-го уровня. Потом эту выборку нужно еще джойнить по валютам, а потом все это перемножать на курс валюты и в результате выдавать определенную (общую) сумму в рублях. Так вот мне нужно иметь эту сумму в результате в одном из полей формы (в зависимости от периода, какой указан в условии). А предложение Код: plaintext 1. YourFieldDate=Forms![YourForm]![FieldDate] , а: Month(YourFieldDate)=Forms![YourForm]![FieldMonth] либо: Year(YourFieldDate)=Forms![YourForm]![FieldYear] либо.... и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2003, 13:48 |
|
||
|
Динамическая смена условия в запросе на выборку.
|
|||
|---|---|---|---|
|
#18+
Кстати, а если на форме создать два поля и при выборе условия отбора (по годам, по месяцу или по дням) запихивать в них начальную и конечную дату периода (т.е. если год - то Дата1=1.01.03 и Дата2=31.12.03, соответственно с месяцами также и с опред. датой), а в условии запроса просто поставить Between Дата1 And Дата2? Тогда не надо будет изменять условие запроса динамически, а просто брать значения из этих двух полей. Может кто-нибудь поддержит беседу? Как проще и как лучше это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2003, 14:13 |
|
||
|
Динамическая смена условия в запросе на выборку.
|
|||
|---|---|---|---|
|
#18+
Либо: Where MyDateFunction([myDATE])=true а в MyDateFunction() проверяешь. Наверное плохо - поскольку вызов ф-ии для каждой записи. Либо n ф-ий: (Month(YourFieldDate)=Forms![YourForm]![FieldMonth] AND fByMonth()) OR (Year(YourFieldDate)=Forms![YourForm]![FieldYear] AND fByYear()) ... ф-ии во втором вычисляются 1 раз. Наверное быстрее. Либо - динамически строишь ссы-куль строку. Тогда туда вообще передаешь только вычисленные значения. Минимум вызовов ф-ий из запроса (как однократно, так и позаписно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2003, 14:17 |
|
||
|
Динамическая смена условия в запросе на выборку.
|
|||
|---|---|---|---|
|
#18+
Похоже, что две граничных даты - это действительно оптимальный вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2003, 14:18 |
|
||
|
Динамическая смена условия в запросе на выборку.
|
|||
|---|---|---|---|
|
#18+
Ну дык сделай три поля в запросе: Год, Месяц, Число В первом будет: Year(YourFieldDate) Во втором: Month(YourFieldDate) и т.д. Дальше в условии года пишешь: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2003, 14:18 |
|
||
|
Динамическая смена условия в запросе на выборку.
|
|||
|---|---|---|---|
|
#18+
Если тебя устраивает вариант с BETWEEN, то это будет самое оптимальное. Если нет, то проще забахать небольшую собственную функцию. Тот вариант, что предложен мной в предыдущем посте - большой изврат. Если тебе надо, чтобы в зависимости от условия, если отбор идет по год, то отбираем год, а если отбор по месяцу, то отбираем месяц (пишу и понимаю, что эта чушь никому не нужна), тогда надо добавлять условие WHERE еще и отбором по мясяцу. Только вот он выберет все месяцы в любом годе, если год не задан. ;-) В общем, BETWEEN тебе в руки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2003, 14:23 |
|
||
|
Динамическая смена условия в запросе на выборку.
|
|||
|---|---|---|---|
|
#18+
2 TRoUbLEs: Хорошее решение, но не будет ли оно слишком сложным? Ведь такие IIF'ы нужно будет написать в каждом из трех полей? Причем этот запрос будет построен на основе запроса на объединение из трех таблиц. Когда то была у меня такая фича: запрос не выполнялся и выдавал ошибку, потому что "...слишком сложное выражение для вычислений." (примерно в таких фразах). И сам запрос будет выполнятся, ИМХО, медленней, чем в случае с граничными датами. Но, я попробую конечно. Спасибо за идеи! Спасибо всем за мысли и идеи! Я думаю, что я еще вернусь... З.Ы: Пока писал, TRoUbLEs опять напостил... Согласен, изврат (выборка по годам, месяцам и т.д.) который никому не будет нужен чаще, чем раза 2 в год или вообще один раз. Но просют, хотят, что поделать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2003, 14:36 |
|
||
|
Динамическая смена условия в запросе на выборку.
|
|||
|---|---|---|---|
|
#18+
Я думаю ты прав, TRoUbLEs. Можно повесить им календарик на форму и пусть выбирают граничные даты сами. И не надо извратом заниматься... Захотят за год - пусь выбирают 1 янв.года и 31 дек.года. Пожалуй так и сделаю... Спасибо еще раз! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2003, 14:41 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32310242&tid=1678565]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 340ms |

| 0 / 0 |
