Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отбор записей в субформе, критерий отбора меняется флажком 
V
    Опции темы
Woodlin
Дата 3.9.2009, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 15.7.2009
Где: Челябинская облас ть, г. Пласт

Репутация: 1
Всего: 1



  Всем здравствуйте!
  Столкнулся с проблемой: задумал с помощью первой субформы отбтрать записи во второй субформе, созданной на основе отчёта. Предполагалось, что если в первой субформе флажок = True, то поле КБК добавляется в условие отбора во второй субформе. Проблема в том что таких КБК может быть много.

Подскажите как это можно сделать.




Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  _________________________________.zip 276,10 Kb
PM MAIL ICQ   Вверх
bopoha
Дата 3.9.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



1. Первый вариант:
пробежаться по таблице "Выбираемые КБК" и собрать строку значений КБК через запятую, для отмеченных строк.
Например,
Код

05311625071010000140, 05311625071010000140, 03311204060020000120


фильтр для подчиненной формы может быть таким:
Код

[Код бюджетной классификации] in (05311625071010000140, 05311625071010000140, 03311204060020000120)


2. Второй вариант (рекомендую): 
фильтр для подчиненной формы может быть таким:
Код

[Код бюджетной классификации] in (SELECT [Выбираемые КБК].КБКFROM [Выбираемые КБК] WHERE [Выбираемые КБК].Флажок = true)


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

Код

    '-- Сохранить
    Me.Refresh

    '-- обновить.
    '-- для формы Свод должен существовать модуль формы
    Dim frmMain As Form_Свод
    
    Set frmMain = Me.Parent
    If frmMain Is Nothing Then Exit Sub
    frmMain.подчиненнаяВыводДанных.Form.Requery


З.Ы. Чтобы пройтись по записям формы пользуйтесь конструкцией:
Код

Dim rst as DAO.Recordset

Set rst = Me.RecordsetClone

'-- ....

PM MAIL WWW ICQ Skype GTalk   Вверх
Woodlin
Дата 4.9.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 15.7.2009
Где: Челябинская облас ть, г. Пласт

Репутация: 1
Всего: 1



bopoha

"Второй вариант" фильтра работает только я видимо когда задавал вопрос лишнего вырезал из своего примера формы.

Мне нужно отбирать записи с учётом двух субформ с флажками. Пробовал сам написать код SQL для фильтра, но получается некоррертно
Код

[Код бюджетной классификации] in (SELECT [Выбираемые КБК].КБК FROM [Выбираемые КБК] WHERE [Выбираемые КБК].Флажок = true) and [Код ОКАТО] in (select [Выбираемые ОКАТО].Окато FROM [Выбираемые ОКАТО] where  [Выбираемые ОКАТО].Флажок =true)


пробовал также вместо оператора and вставлять or, тоже не получается.
PM MAIL ICQ   Вверх
bopoha
Дата 7.9.2009, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Почему некорректно? Что не так работает?
PM MAIL WWW ICQ Skype GTalk   Вверх
Woodlin
Дата 7.9.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 15.7.2009
Где: Челябинская облас ть, г. Пласт

Репутация: 1
Всего: 1



bopoha

В присоединённом файле с примером моей "стряпни" одна субформа с "флажками", где идёт отбор КБК (Код бюджетной классификации), а для работы у меня идёт отбор и по Кодам ОКАТО.

В итоге должны быть две субформы: 1 Флажок-КБК
                                                             2 Флажок-Код ОКАТО

Ваш вариант с одной субформой "Флажок-КБК" работает отлично

У меня же с двумя субформами получается казус, вот код:
 
Код

[Код бюджетной классификации] in (SELECT [Выбираемые КБК].КБК FROM [Выбираемые КБК] WHERE [Выбираемые КБК].Флажок = true) and [Код ОКАТО] in (select [Выбираемые ОКАТО].Окато FROM [Выбираемые ОКАТО] where  [Выбираемые ОКАТО].Флажок =true)

 когда в одной из субформ ни один флажок не установлен запрос ни одной записи не выводит.

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

Спасибо большое за помощь
PM MAIL ICQ   Вверх
bopoha
Дата 7.9.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Цитата(Woodlin @  7.9.2009,  12:54 Найти цитируемый пост)
когда в одной из субформ ни один флажок не установлен запрос ни одной записи не выводит.

Тогда нужно использовать OR вместо AND
PM MAIL WWW ICQ Skype GTalk   Вверх
Woodlin
Дата 9.9.2009, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 15.7.2009
Где: Челябинская облас ть, г. Пласт

Репутация: 1
Всего: 1



bopoha

Цитата

Тогда нужно использовать OR вместо AND


Пробовал, OR не подходит, выбираются лишние записи.

Мне думается нужно добавить поле, в котором подсчитывается количество установленных флажков, если установленных флажков Ноль, то...  Таи как-нибудь сделать несколько вариантов фильтра, вроде бы их три должно быть. Только проблема теперь Count отчего то не хочет считать флажки 
PM MAIL ICQ   Вверх
Akina
Дата 9.9.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(Woodlin @  9.9.2009,  14:27 Найти цитируемый пост)
Count отчего то не хочет считать флажки  

Видать не от того объекта Count...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bopoha
Дата 9.9.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Цитата(Woodlin @  9.9.2009,  13:27 Найти цитируемый пост)

Пробовал, OR не подходит, выбираются лишние записи.

Почему они лишние? Т.е. если галочки выбраны и там и там, но нужно одновременное совпадение?
PM MAIL WWW ICQ Skype GTalk   Вверх
Woodlin
Дата 10.9.2009, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 15.7.2009
Где: Челябинская облас ть, г. Пласт

Репутация: 1
Всего: 1



bopoha

Цитата

Пробовал, OR не подходит, выбираются лишние записи.

Почему они лишние? Т.е. если галочки выбраны и там и там, но нужно одновременное совпадение?




ага, нужно одновременное совпадение.
PM MAIL ICQ   Вверх
bopoha
Дата 10.9.2009, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Вот так должно работать. На мой взгляд будет притормаживать.
Код

iif( SELECT count(*) FROM [Выбираемые КБК] WHERE [Выбираемые КБК].Флажок = true) > 0
     , [Код бюджетной классификации] in (SELECT [Выбираемые КБК].КБК FROM [Выбираемые КБК] WHERE [Выбираемые КБК].Флажок = true)
     , true) 
and 
iif( (select count(*) FROM [Выбираемые ОКАТО] where  [Выбираемые ОКАТО].Флажок =true) > 0
        , [Код ОКАТО] in (select [Выбираемые ОКАТО].Окато FROM [Выбираемые ОКАТО] where  [Выбираемые ОКАТО].Флажок =true)
        , true)


Это сообщение отредактировал(а) bopoha - 10.9.2009, 12:51
PM MAIL WWW ICQ Skype GTalk   Вверх
Woodlin
Дата 15.9.2009, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 15.7.2009
Где: Челябинская облас ть, г. Пласт

Репутация: 1
Всего: 1



bopoha

Спасибо за помощь. Получилось сделать всё в модуле:

1: подвесил на флажок
Код

Private Sub Флажок_Click()
    DoCmd.RunCommand acCmdSaveRecord
    Call Макрос2
End Sub


2: собственно сам фильтр
Код

Function Макрос2()
Dim ftm As Form
Dim KBK_cnt As Integer         'количество записей КБК с вкл. флажком
Dim OKATO_cnt As Integer       'количество записей Окато с вкл. флажком


Set frm = Forms!Свод!подчиненнаяВыводДанных.Form

KBK_cnt = DCount("[Флажок]", "[Выбираемые КБК]", "[Флажок]=true")
OKATO_cnt = DCount("[Флажок]", "[Выбираемые ОКАТО]", "[Флажок]=true")

If KBK_cnt > 0 And OKATO_cnt = 0 Then
   frm.Filter = "[Код бюджетной классификации] in (SELECT [Выбираемые КБК].КБК FROM [Выбираемые КБК] WHERE [Выбираемые КБК].Флажок = true)"
End If

If KBK_cnt = 0 And OKATO_cnt > 0 Then
   frm.Filter = "[Код ОКАТО] in (select [Выбираемые ОКАТО].Окато FROM [Выбираемые ОКАТО] where  [Выбираемые ОКАТО].Флажок =true)"
End If

If KBK_cnt > 0 And OKATO_cnt > 0 Then
   frm.Filter = "[Код бюджетной классификации] in (SELECT [Выбираемые КБК].КБК FROM [Выбираемые КБК] WHERE [Выбираемые КБК].Флажок = true) and [Код ОКАТО] in (select [Выбираемые ОКАТО].Окато FROM [Выбираемые ОКАТО] where  [Выбираемые ОКАТО].Флажок =true)"
End If

If KBK_cnt = 0 And OKATO_cnt = 0 Then
   frm.Filter = "[Код бюджетной классификации] in (SELECT [Выбираемые КБК].КБК FROM [Выбираемые КБК] WHERE [Выбираемые КБК].Флажок = true) and [Код ОКАТО] in (select [Выбираемые ОКАТО].Окато FROM [Выбираемые ОКАТО] where  [Выбираемые ОКАТО].Флажок =true)"
End If
frm.FilterOn = True
End Function


Может быть и не очень изящно, но работает

Это сообщение отредактировал(а) Woodlin - 15.9.2009, 08:27
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0864 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.