Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2011, 14:39   #1
ovt256
Форумчанин
 
Регистрация: 01.04.2011
Сообщений: 226
По умолчанию Фильтрация записей на форме (A2007)

Условие:
Имеем несколько организаций. У каждой организации есть некое оборудование. Оборудование вводится в экслуатацию, некоторое время работает и выводится из эксплуатации. Другими словами, есть дата ввода в эксплуатацию и дата вывода. Для оборудования, которое в настоящее время находится на эксплуатации, дата вывода из эксплуатации не указана (пустое значение). Дата ввода в эксплуатацию заполнено всегда. Для просмотра организаций и принадлежащего им оборудования созданы главная (Firm) и подчиненная формы. На главной форме есть поле edCurrYear для ввода года. Это поле никак не связано с БД.
Задача:
Необходимо отфильтровать записи в главной форме таким образом, чтобы при пустом поле выводились все организации, а при заполненном - только те, у которых имелось рабочее оборудование на конец указанного года (пусть даже оно было введено в эксплуатацию 31.12). Фильтрация записей должна происходить по событию изменения значения в поле edCurrYear

По имеющимся в БД данным должно получиться следующее:
1. При пустом поле или при значении 2011 форма должна отображать 4 организации
2. При значении 2010 - ни одного

Проблема:
Форма не фильтрует записи. При этом, если открыть форму в режиме просмотра, менять значения в поле edCurrYear (Текущий год), то запрос qFirm, на базе которого построена главная форма данные фильтрует, как положено. Правда при этом отладочное поле "Выражение 3", которое должно отображать значение поля edCurrYear в каждой строке, остается пустым.
Есть подозрение, что проблема в несоответствии типов сравниваемых величин при фильтрации. Однако попытка преобразовать строковое значение поля текущего года к Integer вызывает ошибку: либо неверное выражение, либо оно слишком сложное.

В чем мой косяк?
Вложения
Тип файла: rar Форма3.rar (84.8 Кб, 19 просмотров)
Если руки золотые, то не важно, откуда они растут.
ovt256 вне форума Ответить с цитированием
Старый 08.04.2011, 16:51   #2
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Добрый день
попробуйте так
запрос формы:
Код:
SELECT Firm.ID, Firm.NameShort, Firm.AddressPost, Firm.NameHead, IIf(Year([Equipment]![DateBeg])<=[Формы]![Firm]![edCurrYear],True,False) AS Выражение2, ([Формы]![Firm]![edCurrYear]) AS Выражение3, Format([DateBeg],"yyyy") AS dtcomp
FROM Firm INNER JOIN Equipment ON Firm.ID = Equipment.NameShort
WHERE (((IIf(IsNull([Формы]![Firm]![edCurrYear]),True,IIf(IsNull([Equipment]![DateEnd]),IIf(Year([Equipment]![DateBeg])<=([Формы]![Firm]![edCurrYear]),True,False),IIf(([Формы]![Firm]![edCurrYear]) Between Year([Equipment]![DateBeg]) And Year([Equipment]![DateEnd]),True,False))))=True))
GROUP BY Firm.ID, Firm.NameShort, Firm.AddressPost, Firm.NameHead, IIf(Year([Equipment]![DateBeg])<=[Формы]![Firm]![edCurrYear],True,False), ([Формы]![Firm]![edCurrYear]), Format([DateBeg],"yyyy");

и в событие :

Код:
Private Sub edCurrYear_AfterUpdate()
If IsNull(edCurrYear) Or edCurrYear = "" Then
Me.FilterOn = False
Else
Me.Filter = "dtcomp=" & edCurrYear
Me.FilterOn = True
 End If      '
End Sub
Дмитрий
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 08.04.2011, 17:02   #3
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Лишнее в запросе формы сами поубирайте, просто не стал разбираться чего куда откуда
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 08.04.2011, 21:28   #4
ovt256
Форумчанин
 
Регистрация: 01.04.2011
Сообщений: 226
По умолчанию

Спасибо, Дмитрий!

Но почему Вы решили часть условий вынести в фильтр, а часть оставить в запросе? Есть какое-то правило, особенность Access'a или это Ваше ноу хау? Хочу понять, чтобы взять этот метод на вооружение.
Если руки золотые, то не важно, откуда они растут.
ovt256 вне форума Ответить с цитированием
Старый 08.04.2011, 21:55   #5
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от ovt256 Посмотреть сообщение
Спасибо, Дмитрий!

Но почему Вы решили часть условий вынести в фильтр, а часть оставить в запросе? Есть какое-то правило, особенность Access'a или это Ваше ноу хау? Хочу понять, чтобы взять этот метод на вооружение.
Просто я считаю что это правильней
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 08.04.2011, 22:27   #6
ovt256
Форумчанин
 
Регистрация: 01.04.2011
Сообщений: 226
По умолчанию

Строго говоря, предложенный Вами запрос (за минусом всего лишнего) дублирует записи организаций, если оборудование вводилось в разные года, поскольку в GROUP BY введена дополнительная группировка по Format([DateBeg],"yyyy". Я поразмыслю над Вашим способом разделения условий.
Еще раз спасибо за идею!
Если руки золотые, то не важно, откуда они растут.
ovt256 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
фильтрация данных и добавление новых записей макросом U_Oksana Microsoft Office Excel 10 24.01.2011 23:29
Фильтрация записей в списке по значениям в полях со списком khvostatyy Microsoft Office Access 3 14.03.2010 16:49
Фильтрация повторяющихся записей euronymous SQL, базы данных 3 04.02.2010 15:17
Фильтрация записей в таблице TaTT DoGG БД в Delphi 49 28.03.2009 19:04
Фильтрация записей с помощью Grid'а. Repz БД в Delphi 1 02.05.2008 04:55