|
|
|
| Есть форма, на форме подчиненная форма, которая берет данные из запроса. Среди прочих данных есть поле с количествами (длинное целое).
Хотелось бы сделать в запросе условие отбора по этому полю (типа фильтр). В поле со списком на главной форме, в источнике строк для списка, пишу что-то типа:
*;"Все позиции";>0;"Больше 0";0;"Равно 0";<0;"Меньше 0"
|
В запросе ссылаюсь на это поле.
Ниработаит А как сделать правильно? | |
|
| |
|
|
|
| Текст запроса?
Как передаете значение?
Может лучше использовать фильтр формы? | |
|
| |
|
42 Кб. |
|
| Вот прицепил базку во вложение.
Всего четыре количества: остаток на на начало учета, фактический, резерв и свободный. Хотелось сделать фильтрацию отдельно по каждому столбцу: все позиции, больше 0, равно 0, меньше 0.
Раньше подобную задачу решал заменой источника данных подчиненной формы заранее настроенным запросом, но тут уж очень много запросов получается...
***
Пытался прикрутить вот это:
Часто встает задача в условии SQL запроса использовать значение из переменной.
На прямую это невозможно сделать, но можно подставить в условие название функции которая возвращает значение требуемой переменной.
Public Function GetValue()
GetValue = variablename
End Function
|
тоже ничего не получилось... | |
|
| |
|
|
|
| Там же (у вас в базе) есть обработка поиска.
Кстати, событие перед обновлением надо убрать.(повтор на изменение)
Так же надо сделать и для списков.
Типа на событие обновление списка:
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
|
Ну и другие по аналогии. | |
|
| |
|
|
|
| Все это конечно здорово и даже работает, НО! фильтры сбрасывают друг друга, т.е. не получается применить несколько фильтров одновремено!
Нужели нельзя как-то передать условия отбора в запрос из списка на главной форме!? | |
|
| |
|
|
|
| Фильтр формируй строкой!
Сегодня нет поду рукой акса. Работающий Пример привести не смогу.
Ну типа:
Сделай процедуру 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
Как-то так.
Можно и в запрос. Но писать больше. :) | |
|
| |
|
|
|
| все равно фильтры сбрасывают друг друга и поиск :(
Мне бы просто научиться бы передавать значения (все позиции, >0, =0, <0) из поля со списком в условия отбора запроса... | |
|
| |
|
|
|
| фильтр - это строка в который ты описываешь некие условия. строку можно формировать программно.
вот где-то так
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
еще можно менять сам запрос на котором основана форма - но это уже изврат, хотя .... | |
|
| |
|
|
|
| Копай фильтры. Не должно сбрасывать.
AND или OR - смотри сам. | |
|
| |