Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Фильтрация дел по дате
 
 автор: Аленка   (28.09.2008 в 13:06)   личное сообщение
 
 

Есть у меня таблица моих дел. Через запрос я получила поле, в котором указано, сколько дней осталось до выполнения дела или сколько дней прошло после выполнения.
Как в форме можно сделать такую фильтрацию, чтобы я могла видеть:
Все дела, до выполнения которых осталось от 1 до 30 дней.
от 1 до 7 дней.
от 1 до 3 дней.
1 день (дела на завтра).
0 дней (дела сегодня).

А еще лучше сделать так, чтобы я могла сама выбрать нужное количество дней и посмотреть все дела, до которых осталось от одного до другого количества дней.

Я сделала так, чтобы видеть дела за определенный день. Но это легко. А хотелось бы сделать так, чтобы я могла видеть дела за определенный период.
Фильтр у меня по столбцу "Осталось/Прошло дней". Если там 1 день остался, значит это дела на завтра, если 0, то дела на сегодня, если от 1 до 30 дней, значит я увижу дела за предстоящие 30 дней.

Спасибки

  Ответить  
 
 автор: pasat   (28.09.2008 в 13:35)   личное сообщение
15 Кб.
 
 

Может так

  Ответить  
 
 автор: Lukas   (28.09.2008 в 13:45)   личное сообщение
 
 

Где-то так, для будущих дел:
Добавляем в форму поле для фильтра, называем "fldFiltr", на событие "После обновления" :

Private Sub fldFiltr_AfterUpdate()
    Me.Filter = "[Осталось/Прошло дней]>=0 AND [Осталось/Прошло дней]<=" & Me.fldFiltr
    Me.FilterOn = True
End Sub

Не мешало бы проверять значения поля fldFiltr перед формированием строки фильтра.

  Ответить  
 
 автор: Аленка   (28.09.2008 в 16:44)   личное сообщение
 
 

Спасибки большое, ребят. Прям что нужно. Особенно примерчик pasat. Как раз то, что я хотела.

  Ответить  
 
 автор: Pasat   (28.09.2008 в 17:19)   личное сообщение
 
 

Во так лучше (не будут выводиться прошлые дела)
SELECT b.ID, b.Dela, b.Date, [date]-Date() AS Date2
FROM b
WHERE (((b.Date)>=Date()) AND (([date]-Date())<=Val([Forms]![Form1]![Text0])))

  Ответить  
 
 автор: Аленка   (28.09.2008 в 18:26)   личное сообщение
 
 

Pasat, я уже также сделала, чтобы исключить прошедшие дела. Но все равно спасибо.
И Lukas, Ваш вариант тоже использовала. Как ни странно, но я нашла применение обоим вариантам!
Спасибо, ребят.

  Ответить  
 
 автор: Аленка   (28.09.2008 в 19:34)   личное сообщение
 
 

а вот такой вопросик еще. Я хочу вызывать запрос с помощью кнопки. При этом в форме у меня два поля, в которые введены даты. И я хочу посмотреть все дела между этими датами. При этом хотелось бы, чтобы условие в запрос вводилось непосредственно при нажатии кнопки, а сам по себе запрос этого условия не содержал бы.
Это можно? Интересно, какой код должен быть у кнопки?

  Ответить  
 
 автор: Аленка   (28.09.2008 в 19:52)   личное сообщение
 
 

просто я хочу с помощью кнопок или ссылок просматривать дела на сегодня, на завтра, за период, все просроченные и т.п. Много условий.
И при этом я хочу иметь только один запрос и одну форму. Сейчас я это сделала, но с помощью нескольких запросов, так как условия-то все разные и в один запрос не запихнешь.
А хотелось бы, чтобы условие устанавливалось кодом или макросом при нажатии на соответствующую кнопочку, чтобы запрос был только один.

  Ответить  
 
 автор: Lukas   (28.09.2008 в 19:56)   личное сообщение
 
 

При таких условиях, наверное, было бы правильно формировать строку запроса в коде, присваивать строку запроса как источник строк формы.
Или, если позволит структура источника, менять строку фильтра формы в коде.

  Ответить  
 
 автор: Аленка   (28.09.2008 в 20:11)   личное сообщение
 
 

во, я как раз это и хочу. формировать строчку запроса в коде. Маленький примерчик можно? А я уж сама разберусь.
я не знаю, возможно это или нет, но с учетом того, что поля в запросе всегда будут одни и те же, можно ли в коде как-то обойтись без select (так как он всегда одинаков) и прописывать только строчку Where, в которую и вставлять условие запроса!

  Ответить  
 
 автор: Аленка   (28.09.2008 в 20:29)   личное сообщение
 
 

то есть вот запрос. обычный запрос.
SELECT b.ID, b.Dela, b.Date, [date]-Date() AS Date2
FROM b
и эта часть запроса меняться никогда не будет программно.

а вот такой запрос хочу получить с помощью кнопки
SELECT b.ID, b.Dela, b.Date, [date]-Date() AS Date2
FROM b
WHERE (((b.Date)=Date()));

то есть здесь только добавлено where, то есть условие.

При этом количество столбцов может меняться вручную. Соответственно, через код желательно не устанавливать Select. А наоборот, хочется запускать запрос и при его открытии устанавливать ему условие программно.

О, как завернула. Надеюсь, я объяснилась нормально?

  Ответить  
 
 автор: Lukas   (28.09.2008 в 21:44)   личное сообщение
15 Кб.
 
 

Пример с использованием фильтра формы.

  Ответить  
 
 автор: Аленка   (28.09.2008 в 22:41)   личное сообщение
 
 

Да, получается даже удобнее, чем через запрос. И все свои условия я смогла с помощью фильтра сделать.
СПАСИБО

  Ответить  
 
 автор: Pasat   (28.09.2008 в 23:32)   личное сообщение
 
 

Ничего не скажешь.
Сделано професионально.

Так одна ремарка
В литературе часто всречал: что там где возможно советуется лучше использывать сохраненные запросы

  Ответить  
 
 автор: Lukas   (29.09.2008 в 00:24)   личное сообщение
 
 

Поэтому и предложил вариант с фильтром для формы, источником данных которой служит сохраненный запрос.

  Ответить  
 
 автор: Аленка   (29.09.2008 в 00:33)   личное сообщение
 
 

А я все свои запросы, кстати, сохраняю. Я вообще терпеть не могу то, что я не могу увидеть визуально и по-человечески. Ну не программистка, я же говорила. Мне проще видеть слово, чем нули и единицы
Но здесь, кстати, запрос ведь сохраненный. не сохраненное только условие запроса, но это ведь и не требуется в данной ситуации.

  Ответить  
 
 автор: Аленка   (29.09.2008 в 00:35)   личное сообщение
 
 

А я вот еще добавила фильтрацию дел за определенный период. Но мне пишет TYPE MISMATCH
Все поля установлены как ДАТА.
Вот как я написала (сделала по примеру кнопки Дело на дату).
Me.Filter = "[Дата_выполнения] Between" & Format$(Me.Поле43, "\#mm\/dd\/yyyy\#") And Format$(Me.Поле45, "\#mm\/dd\/yyyy\#")

  Ответить  
 
 автор: Аленка   (29.09.2008 в 00:39)   личное сообщение
 
 

а если я делаю вот так:
Me.Filter = "[Дата_выполнения] Between Me.Поле43 And Me.Поле45"
То мне предлагается сначала ввести значения полей и тогда он все показывает как нужно.
но у меня же уже все значения введены.

  Ответить  
 
 автор: Аленка   (29.09.2008 в 00:42)   личное сообщение
 
 

А если поле43 заменяю на Date(), то все работает.

  Ответить  
 
 автор: Lukas   (29.09.2008 в 00:46)   личное сообщение
 
 

Нет, запрос не видит значения Me.Поле43 и Me.Поле45.
Надо писать так: Me.Filter = "[Дата_выполнения] Between Forms![frmDela]![Поле43] And Forms![frmDela]![Поле45]"

  Ответить  
 
 автор: Аленка   (29.09.2008 в 00:50)   личное сообщение
 
 

а я написала просто Поле43 и Поле45 - это плохо?
Наверное, если вдруг будет такое же поле в проекте в другой форме, может возникнуть ошибка?

  Ответить  
 
 автор: Lukas   (29.09.2008 в 00:58)   личное сообщение
 
 

Не вижу где, полный текст покажите.

  Ответить  
 
 автор: Lukas   (29.09.2008 в 00:50)   личное сообщение
 
 

А в этом случае надо писать так:
Me.Filter = "[Дата_выполнения] Between " & Format$(Me.Поле43, "\#mm\/dd\/yyyy\#") & " And " & Format$(Me.Поле45, "\#mm\/dd\/yyyy\#")

  Ответить  
 
 автор: Аленка   (29.09.2008 в 17:10)   личное сообщение
 
 

О, ВОТ так лучше всего. Спасибо

  Ответить  
 
 автор: Аленка   (29.09.2008 в 17:19)   личное сообщение
 
 

Блин, снова не получается.
Вот, что получается при любом работающем варианте.
Он в первый раз срабатывает и потом какую бы я дату в полях 43 и 45 не ставил, он все время фильтрует по датам, которые были указаны в первый раз и так до закрытия формы. То есть фильтр срабатывает только один раз. Остальные фильтры работают как часы.

Я говорю вот об этом фильтре. Сейчас я его сделала пока вот так.
Me.Filter = "[Дата_выполнения] Between Forms![f_Affairs]![Поле43] And Forms![f_Affairs]![Поле45] and [Отметка_о_выполнении] = 'не выполнено' "

  Ответить  
 
 автор: Lukas   (29.09.2008 в 21:07)   личное сообщение
 
 

А так:
Me.Filter = "([Дата_выполнения] Between Forms![f_Affairs]![Поле43] And Forms![f_Affairs]![Поле45]) AND ([Отметка_о_выполнении] = 'не выполнено')"
Добавил круглые скобки.

  Ответить  
 
 автор: Аленка   (29.09.2008 в 22:21)   личное сообщение
75 Кб.
 
 

Все равно. Теперь появляется окно с просьбой ввести значение для поля Дата1.
Вот файлик.

  Ответить  
 
 автор: Lukas   (29.09.2008 в 22:40)   личное сообщение
71 Кб.
 
 

А у меня заработало. Подробности в коде.

  Ответить  
 
 автор: Аленка   (29.09.2008 в 23:16)   личное сообщение
 
 

Что бы я без Вас делала?????????
Спасибо огромное.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList