2013-07-05 2 views
0

Открываю форму с фильтром. Когда я создаю новую запись с использованием этой формы, я хочу, чтобы поле получало то же значение по умолчанию, что и фильтр. (Так что новая запись будет частью текущего результата фильтра). Когда я открываю форму, я сохраняю значение фильтра в tempvar.Установите значение по умолчанию для полей в форме, аналогичном фильтру

Как я могу достичь этого простым способом?

Я попытался два последних способа получить текущий фильтр от этого вопроса: Access 2003 VBA Get Active filter?

я не понял бывший.

Я еще не запрограммировал Visual Basic и не использовал Access в какой-либо значительной степени. Поэтому мне может понадобиться довольно подробное объяснение.

Большое спасибо

+0

В настоящее время я открываю форму, нажимая на одно из полей другой таблицы, используя макрос. макрос открывает форму, относящуюся к другой таблице, которая фильтрует ее по значению в только что нажатом поле. Значение i для введенного поля i сохраняется в объекте [tempvar] (http://msdn.microsoft.com/en-us/library/office/bb257080%28v=office.12%29.aspx). Я надеюсь, что это было яснее. – snobjorns

ответ

0

К сожалению, Access не имеет этой функциональности. И вы должны изучить VBA, чтобы реализовать это.

Я думаю, будет сложно проанализировать фильтр. По моему мнению, было бы проще установить значение фильтра и defaul для каждого поля. Существует функция реализации функции открытия формы и некоторых методов публичной формы для установки значений.

Функция для открытия формы может выглядеть следующим образом:

Dim frm as Form_SomeForm 

DoCmd.OpenForm "SomeForm", , , , , acHiden 

Set frm = Forms("SomeForm") 

frm.SetControlFilter("UserName", "=", "Foo") 
frm.SetControlFilter("Age", "=", "123") 
... 

frm.ApplyFilter() 

frm.Visible = True 

модуль формы "SomeForm" может выглядеть следующим образом:

Dim m_stFiler as String 

Public Sub SetControlFilter(ByVal stCtrl As String, ByVal stExp As String, ByVal stValue as String) 
    Dim ctl As Control 

    '-- set default value 
    set ctl = Me("stCtrl") 

    ctl.DefaultValue = "=""" & stValue & """" 

    '-- build filter 
    If m_stFiler <> "" Then m_stFiler = m_stFiler & " AND " 
    m_stFiler = m_stFiler & ctl.ControlSource & " " & stExp & " "" & stValue & "" " 

End Sub 

Public Sub ApplyFilter() 
    Me.Filter = m_stFiler 
    Me.FilterOn = True 
End Sub 
+0

Благодарим вас за ответ. Поскольку я никогда не программировал VBA, я не в полной мере понимаю, что делает ваш код. Однако, если это работает, есть еще одна вещь, которую мне нужно реализовать: я хочу, чтобы фильтр применялся как динамический в том смысле, что он соответствует значению поля, которое я нажимаю в первой форме. – snobjorns

+0

Быстрый вопрос: должен ли второй Codeblock вставляться в класс form_Someform, в недавно созданный модуль SomeForm или новый модуль класса SomeForm? – snobjorns

+0

Ooops, я допустил ошибку: m_stFiler = ctl.ControlSource. Должно быть m_stFiler = m_stFiler & ctl.ControlSource ... – Sergey

0

Sergeys Ответ положил мне на правильном пути.

Я должен был сделать некоторые твики.

он работал только на одном поле, и я должен был назвать methodsas это:

Call frm.SetControlFilter("Age", "=", "123") 

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

Dim stCon As String 
stCon = stCtrl 
'-- set default value 
Set ctl = Me(stCon) 

Thanks A Lot

+0

Я допустил ошибку. Уже исправлено. См. Выше. – Sergey

Смежные вопросы