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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Не получается задать условие отбора из списка
 
 автор: Alex   (17.07.2014 в 14:45)   личное сообщение
 
 

Есть форма, на форме подчиненная форма, которая берет данные из запроса. Среди прочих данных есть поле с количествами (длинное целое).
Хотелось бы сделать в запросе условие отбора по этому полю (типа фильтр). В поле со списком на главной форме, в источнике строк для списка, пишу что-то типа:
*;"Все позиции";>0;"Больше 0";0;"Равно 0";<0;"Меньше 0"

В запросе ссылаюсь на это поле.
Ниработаит А как сделать правильно?

  Ответить  
 
 автор: Дядя Федор   (17.07.2014 в 15:56)   личное сообщение
 
 

Текст запроса?
Как передаете значение?
Может лучше использовать фильтр формы?

  Ответить  
 
 автор: Alex   (17.07.2014 в 16:15)   личное сообщение
42 Кб.
 
 

Вот прицепил базку во вложение.
Всего четыре количества: остаток на на начало учета, фактический, резерв и свободный. Хотелось сделать фильтрацию отдельно по каждому столбцу: все позиции, больше 0, равно 0, меньше 0.
Раньше подобную задачу решал заменой источника данных подчиненной формы заранее настроенным запросом, но тут уж очень много запросов получается...
***
Пытался прикрутить вот это:
Часто встает задача в условии SQL запроса использовать значение из переменной. 
На прямую это невозможно сделать, но можно подставить в условие название функции которая возвращает значение требуемой переменной. 

Public Function GetValue() 
GetValue = variablename 
End Function

тоже ничего не получилось...

  Ответить  
 
 автор: Дядя Федор   (17.07.2014 в 16:40)   личное сообщение
 
 

Там же (у вас в базе) есть обработка поиска.
Кстати, событие перед обновлением надо убрать.(повтор на изменение)
Так же надо сделать и для списков.
Типа на событие обновление списка:

Select Case Me.ФилПоОстнач
Case 1:
 Forms("Товары").ПФзапТовары.Form.FilterOn = False
 
Case 2:
 Forms("Товары").ПФзапТовары.Form.Filter = "[Колнанечало]>0"
 Forms("Товары").ПФзапТовары.Form.FilterOn = true
Case 3:
 Forms("Товары").ПФзапТовары.Form.Filter = "[Колнанечало]=0"
 Forms("Товары").ПФзапТовары.Form.FilterOn = true
Case 4:
 Forms("Товары").ПФзапТовары.Form.Filter = "[Колнанечало]<0"
 Forms("Товары").ПФзапТовары.Form.FilterOn = true

End Select




Ну и другие по аналогии.

  Ответить  
 
 автор: Alex   (18.07.2014 в 10:16)   личное сообщение
 
 

Все это конечно здорово и даже работает, НО! фильтры сбрасывают друг друга, т.е. не получается применить несколько фильтров одновремено!
Нужели нельзя как-то передать условия отбора в запрос из списка на главной форме!?

  Ответить  
 
 автор: Дядя Федор   (18.07.2014 в 10:31)   личное сообщение
 
 

Фильтр формируй строкой!
Сегодня нет поду рукой акса. Работающий Пример привести не смогу.
Ну типа:
Сделай процедуру SetFilter;
EE на событие обновление всех= фильтров
Public Sub SetFilter()
Dim FiltrStr As String
FiltrStr=""
If Me.ФилПоОстнач<>"" then
Select Case Me.ФилПоОстнач
Case 1:

Case 2:
FiltrStr = FiltrStr & " AND [Колнанечало]>0"
Case 3:
FiltrStr = FiltrStr & " AND [Колнанечало]=0"
Case 4:
FiltrStr = FiltrStr & " AND [Колнанечало]<0"
End Select
end if
If me.СЛЕДУЮЩИЙ_СПИСОК <>"" then
Select Case Me.СЛЕДУЮЩИЙ_СПИСОК
Case 1:

Case 2:
FiltrStr = FiltrStr & " AND Условие"
Case 3:
...
Case 4:
...
End Select
end if

'Так же другие списки
'В конце:
If FiltrStr<>"" then
'Обрезаем лидирующий " AND "
FiltrStr=mid(FiltrStr,6)
Forms("Товары").ПФзапТовары.Form.Filter = FiltrStr
end if
Forms("Товары").ПФзапТовары.Form.FilterOn = (FiltrStr<>"")
End Sub

Как-то так.
Можно и в запрос. Но писать больше. :)

  Ответить  
 
 автор: Alex   (18.07.2014 в 13:18)   личное сообщение
 
 

все равно фильтры сбрасывают друг друга и поиск :(
Мне бы просто научиться бы передавать значения (все позиции, >0, =0, <0) из поля со списком в условия отбора запроса...

  Ответить  
 
 автор: kot_k_k   (18.07.2014 в 14:23)   личное сообщение
 
 

фильтр - это строка в который ты описываешь некие условия. строку можно формировать программно.
вот где-то так
filter_str=me.Filter ' сохранили текущий фильтр
.............
filter_str= filter_str & "OR pole_17> " & me.pole_filter_17 ' нарастили еще условие.
.....
filter_str= filter_str & " OR pole_18<" & me.pole_filter_18 ' нарастили еще условие.
.....
me.filter= filter_str ' обновили фильтр
me.filterOn=true


еще можно менять сам запрос на котором основана форма - но это уже изврат, хотя ....

  Ответить  
 
 автор: Дядя Федор   (18.07.2014 в 14:38)   личное сообщение
 
 

Копай фильтры. Не должно сбрасывать.
AND или OR - смотри сам.

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