2015-01-07 3 views
0

Глобальное значение whereAtt не удерживает значение при входе в метод после обновления. Есть ли проблема с тем, как я вызываю глобальные переменные или настройки моего кода?Глобальная переменная, не удерживающая значение

Option Compare Database 
Option Explicit 
Dim whereAtt As String 


Private Sub cmbAnalyst_AfterUpdate() 

If cmbAnalyst.ListIndex <> -1 Then 
    whereAtt = whereAtt & " And Analyst = 'me.cmbAnalyst'" 
    Call queryBuilder 
End If 
End Sub 

Private Sub Form_Load() 
whereAtt = "Select * from tblActionLog where LogID is not null" 
cmbAnalyst.RowSource = "SELECT DISTINCT Analyst FROM tblActionLog" 
Call queryBuilder 
End Sub 

Public Sub queryBuilder() 
testTable.RowSource = whereAtt 
End Sub 

ответ

0

Вы должны использовать:

Public whereAtt As String 

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

Option Compare Database 
Option Explicit 
Public whereAtt As String 


Private Sub cmbAnalyst_AfterUpdate() 
    If cmbAnalyst.ListIndex <> -1 Then 
     whereAtt = whereAtt & " And Analyst = 'me.cmbAnalyst'" 
     queryBuilder(whereAtt) 
    End If 
End Sub 

Private Sub Form_Load() 
    whereAtt = "Select * from tblActionLog where LogID is not null" 
    cmbAnalyst.RowSource = "SELECT DISTINCT Analyst FROM tblActionLog" 
    queryBuilder(whereAtt) 
End Sub 

Public Sub queryBuilder(whereAtt as String) 
    testTable.RowSource = whereAtt 
End Sub 
1

Ваш код изменяет положение WHERE в SELECT заявлении как это ...

whereAtt = whereAtt & " And Analyst = 'me.cmbAnalyst'" 

Это условие ограничивает строки, возвращаемые запросом, только теми, у которых есть буквальная текстовая строка 'me.cmbAnalyst', хранящаяся в tblActionLog.Analyst.

Я подозреваю, что вы хотите те строки, где tblActionLog.Analyst соответствует значению, выбранному в этом поле со списком cmbAnalyst.

Если это верно, то построить строку включить значение в поле со списком вместо его имени:

whereAtt = whereAtt & " And Analyst = '" & Me.cmbAnalyst.Value & "'" 

Относно «whereAtt не держит значение, когда я шагнуть в после метода обновления», Я не понимаю, что там происходит. Похоже, вы добавили еще один «И Analyst = ...» сегмент запроса каждый раз после обновления. Но я не понимаю, почему значение , гдеAtt исчезнет полностью.

Я предлагаю вам добавить Debug.Print заявления до и после строки, где вы изменяете whereAtt:

Debug.Print "Before: " & whereAtt 
Debug.Print "cmbAnalyst.Value: " & Me.cmbAnalyst.Value 
whereAtt = whereAtt & " And Analyst = '" & Me.cmbAnalyst.Value & "'" 
Debug.Print "After: " & whereAtt 

Будет надеяться, что ситуация будет ясна при просмотре Debug.Print выхода в открывшемся окне. Если нет, покажите нам, что показывает Debug.Print.

+0

Большое спасибо HansUp. Информативно и полезно! – SaladSnake

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