|
|
|
| Форумы/
Сообщений: всего:55832, сегодня:0, за неделю:28, за месяц:129, за год:129
|
|
Использование СУБД Ms Access, программирование на VB, VBA
Данный форум посвящен различным вопросам создания приложений баз данных на платформах - Microsoft Access, Microsoft Visual Basic.
|
|
|
|
|
|
|
|
|
|
На главной форме 3 флажка, в подчиненной форме надо отфильтровать записи по состоянию флажков, каждый флажок = фильтр по определенному полю. Два поля я сумела,а вот три?
Private Sub Флажок1_AfterUpdate()
Dim MyFilter As String
Dim MyVar1 As String
Dim MyVar2 As String
If Флажок21 = True Then
MyVar1 = "[Остаток] <> 0"
Else
MyVar1 = " "
End If
If ПоКлиенту = True Then
MyVar2 = "[Клиент] = Forms![СостояниеЗаказа]![Клиент]"
Else
MyVar2 = " "
End If
If MyVar1 = " " And MyVar2 = " " Then
Forms![СостояниеЗаказа]![подчиненная форма Состояние].Form.FilterOn = False 'Отмена предыдущего фильтра ежели применялся
End If
If MyVar1 <> " " And MyVar2 = " " Then
MyFilter = MyVar1
End If
If MyVar1 = " " And MyVar2 <> " " Then
MyFilter = MyVar2
End If
If MyVar1 <> " " And MyVar2 <> " " Then
MyFilter = MyVar1 + " and " + MyVar2
End If
|
| 03.12.2007 13:16 |
|
|
Попробуйте так, например:
strCriteria AS String
For i=1 To 3
Select Case i
case 1
if Flag1 Then
strCriteria = "MyField1 =" & Me!FieldData1
End If
Case 2
if Flag2 Then
strCriteria = "MyField2 =" & Me!FieldData2
End If
Case 3
if Flag3 Then
strCriteria = "MyField3 =" & Me!FieldData3
End If
End Select
if Nz(strCriteria,vbNullString) <> vbNullString then
strCriteria = strCriteria & " AND " & strCriteria
End If
Next
if nz(strCriteria,vbNullString) <> vbNullString then
Me.Filter = strCriteria
Me.FilterOn = True
Else
Me.FilterOn = False
End If
|
| 03.12.2007 14:42 |
|
|
strCriteria = "MyField1 =" & Me!FieldData1 так: strCriteria = "Остаток <>" & 0 ? У меня фиксированные значения фильтров при включенном соответствующем флажке, но при попытке склеить в одну строку через AND ругается, если пустой фильтр(не включен один из соответствующих флажков) |
| 03.12.2007 16:43 |
|
|
| картинка |
| Присоединенный файл:zakaz.jpg (Размер: 76320 байт, Скачиваний:150) |
| 03.12.2007 16:49 |
|
|
s="" If Флажок1 Then s = s + " And Таблица.Поле1 = " & ПолеФормы1 If Флажок2 Then s = s + " And Таблица.Поле2 = " & ПолеФормы2 If Флажок3 Then s = s + " And Таблица.Поле3 = " & ПолеФормы3 If s<>"" Then s=Mid(s,6) 'при необходимости: удалить первый AND |
| 03.12.2007 17:21 |
|
|
| нет поля,есть кокретное значение фильтра |
| 03.12.2007 17:35 |
|
|
| | andlara писал: | | так: strCriteria = "Остаток <>" & 0 ? | Нет. Для данного выражения надо "Остаток <> 0" Me!FieldData1 - это имя поля на форме фактическое значение которого надо использовать в фильтре. Если используются переменные то нужно так: strCriteria = "MyField1 = " & MyVar1
|
| 03.12.2007 17:50 |
|
|
| А Forms![СостояниеЗаказа]![Клиент] - не поле? |
| 03.12.2007 19:41 |
|
|
СПАСИБО ВСЕМ! Точно, один из фильтров поле, но включается по флажку. Я попробую и отпишусь. Видимо получится комбинация из предложенных вариантов. Я нашла на форуме вот такой вариант
Dim MyFilter As String
Dim i As Byte
Dim s As String
For i = 1 To 3
If Controls("Флажок" & i) Then
s = s + "and " + Controls("Флажок" & i).Tag
Debug.Print s
End If
Next i
MyFilter = s
Debug.Print MyFilter
Прописала в дополнительных свойствах флажка фильтры, но...получаю AND and [Клиент] Like ' * ' and Склад =0 в результате. Может "+" поменять на "&" ?
|
| 04.12.2007 09:13 |
|
|
Именно по этой причине и требуется:
Next i If s<>"" Then s=Mid(s,6) 'при необходимости: удалить первый AND MyFilter = s |
| 04.12.2007 13:31 |
|
|
Если я правильно разобрался, то так должно работать
Private Sub Флажок1_AfterUpdate()
Dim zl_strFilter As String, zl_strCriteria As String
Dim zl_blnFilter As Boolean
If Me!Флажок21 = True Then
zl_strCriteria = "[Остаток] <> 0"
Else
zl_strCriteria = vbNullString
End If
zl_strFilter = zl_strCriteria
If Me!ПоКлиенту = True Then
zl_strCriteria = "[Клиент] = " & Me![Клиент]
Else
zl_strCriteria = vbNullString
End If
If zl_strFilter <> vbNullString Then
If zl_strCriteria <> vbNullString Then
zl_strFilter = zl_strFilter & " AND " & zl_strCriteria
End If
zl_blnFilter = True
ElseIf zl_strCriteria <> vbNullString Then
zl_strFilter = zl_strFilter
zl_blnFilter = True
End If
With Me![подчиненная форма Состояние].Form
If zl_blnFilter Then .Filter = zl_strFilter
'Отмена или включение фильтра
.FilterOn = zl_blnFilter
End With
End Sub
PS. Лучше, чтобы контролы и переменные имели бы более осмысленные имена |
| 04.12.2007 15:09 |
|
|
Я попробовала этот вариант , но пишет "Введите значение параметра "БСК"(название клиента). Почему?, ведь фильтр получился правильным и debug печатает [Остаток] <> 0 AND [Клиент] = БСК |
| 04.12.2007 15:53 |
|
|
Next i
If s<>"" Then s=Mid(s,6) 'при необходимости: удалить первый AND
MyFilter = s
Добавила и получила фильтр клад =0 |
| 04.12.2007 16:02 |
|
|
СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!
Супер, заработало
Private Sub Флажок3_AfterUpdate()
On Error GoTo Err_Флажок3_AfterUpdate
Dim MyFilter As String
Dim i As Byte
Dim s As String
For i = 1 To 3
If Controls("Флажок" & i) Then
s = s + "and " + Controls("Флажок" & i).Tag
' Debug.Print s
End If
Next i
If s <> "" Then s = Mid(s, 5)
MyFilter = s
Debug.Print MyFilter
' Forms![СостояниеЗаказа]![подчиненная форма Состояние].Form.FilterOn = False 'Отмена предыдущего фильтра ежели применялся
Forms![СостояниеЗаказа]![подчиненная форма Состояние].Form.Filter = MyFilter
Forms![СостояниеЗаказа]![подчиненная форма Состояние].Form.FilterOn = True
Exit_Флажок3_AfterUpdate:
Exit Sub
Err_Флажок3_AfterUpdate:
MsgBox Err.Description
Resume Exit_Флажок3_AfterUpdate
End Sub
|
| 04.12.2007 16:37 |
|
|
| | andlara писал: | | пишет "Введите значение параметра "БСК"(название клиента). Почему?, ведь фильтр получился правильным | У Вас наверное, значение поля [Клиент] - текстовое, поэтому в фильтре надо писать так
zl_strCriteria = "[Клиент] = '" & Me![Клиент] & "'"
|
| 04.12.2007 16:56 |
|
|
Да, текстовое. Спасибо. Я теперь могу передать этот фильтр на кнопку для печати отобранных записей? |
| 05.12.2007 09:21 |
|
|
Попробуйте |
| 05.12.2007 10:02 |
|
 
|
|