2015-09-18 43 views
1

我正在通過MS Access 2010開發數據庫應用程序。 我已將一個未綁定的二進制複選框添加到報告,目的是用戶可以從兩個記錄源(查詢)中選擇一個,報告。 複選框Control Source屬性爲空,Triple State設置爲No如何讓複選框在Access 2010報表上運行?

但是,在打開報告 時,複選框永久變灰,無論點擊多少次! 此外,在每個單個點擊複選框my_checkbox_Click()觸發兩次其值在NullTrue之間切換! Null值似乎被解釋爲False,如果事件沒有在每次單擊時雙擊,則可能是OK。

如何讓我的複選框都出現正確 - 作爲一個二進制複選框,之間肯定和否定切換 - 和功能正常,發射_Click()只有一次每次點擊? 如果這是一個沒有解決方案的已知問題,哪種方法是最佳的解決方案?

我的代碼:

Private Sub Report_Load() 
    Debug.Print vbCrLf & "Report_Load" 
    Me.my_chk.Value = False 
    set_data_source 
End Sub 

Private Sub my_chk_Click() 
    Debug.Print vbCrLf & "my_chk_Click" 
    set_data_source 
End Sub 

Private Sub set_data_source() 
    Debug.Print vbCrLf & "set_data_source" 
    Debug.Print "Me.my_chk.Value", Me.my_chk.Value 
    Debug.Print "Me.my_chk.ControlSource ", Me.my_chk.ControlSource 
    Debug.Print "Me.my_chk.TripleState ", Me.my_chk.TripleState 
    Me.RecordSource = IIf(Me.my_chk.Value, "my_yes_qry", "my_no_qry") 
    Me.Requery 
    Debug.Print "Me.RecordSource", Me.RecordSource 
End Sub 

立即窗口:

Report_Load 

set_data_source 
Me.my_chk.Value   False 
Me.my_chk.ControlSource   
Me.my_chk.TripleState   False 
Me.RecordSource    my_no_qry 

' click once on checkbox 

my_chk_Click 

set_data_source 
Me.my_chk.Value   Null 
Me.my_chk.ControlSource   
Me.my_chk.TripleState   False 
Me.RecordSource    my_no_qry 

my_chk_Click 

set_data_source 
Me.my_chk.Value   -1 
Me.my_chk.ControlSource   
Me.my_chk.TripleState   False 
Me.RecordSource    my_yes_qry 

' click once on checkbox 

my_chk_Click 

set_data_source 
Me.my_chk.Value   Null 
Me.my_chk.ControlSource   
Me.my_chk.TripleState   False 
Me.RecordSource    my_no_qry 

my_chk_Click 

set_data_source 
Me.my_chk.Value   -1 
Me.my_chk.ControlSource   
Me.my_chk.TripleState   False 
Me.RecordSource    my_yes_qry 

唯一的好消息是,Requery一個RecordSource更改後不正確(如果使用過於簡單)影響的數據。

另一件事,儘管我的複選框沒有一個AfterUpdateEvents下上市,如果我

Private Sub my_chk_AfterUpdate() 
    Debug.Print vbCrLf & "my_chk_AfterUpdate" 
    set_data_source 
End Sub 

替換上面my_checkbox_Click()處理程序,我得到

Report_Load 

set_data_source 
Me.my_chk.Value False 
Me.my_chk.ControlSource   
Me.my_chk.TripleState   False 
Me.RecordSource    my_no_qry 

' click once on checkbox 

my_chk_AfterUpdate 

set_data_source 
Me.my_chk.Value -1 
Me.my_chk.ControlSource   
Me.my_chk.TripleState   False 
Me.RecordSource    my_yes_qry 

' click once on checkbox 

my_chk_AfterUpdate 

set_data_source 
Me.my_chk.Value -1 
Me.my_chk.ControlSource   
Me.my_chk.TripleState   False 
Me.RecordSource    my_yes_qry 

它,因爲你可以看,現在不起作用,因爲現在,即使AfterUpdate每次點擊觸發一次,複選框值不會改變!

在在access-programmers.co.uk/forums 有人建議(關於形式,不報告)使用花哨的編碼

Nz(Me.my_chk = True, False) 

,我試過,但它在結果沒有差異。

回答

1

您確定可以檢查報告上的複選框嗎?我不是!但一個有趣的可能性可以發現here

在表單的情況下,它是灰色的,因爲它是未綁定的,並且未設置值。解決方法是創建一個表單變量並將其設置爲。加載表單時,將變量設置爲False並將複選框設置爲變量。在AfterUpdate()事件複選框的,使用控制的值來設置的變量。然後運行set_data_source。你可能會想運行set_data_source也形式加載時。

Option Explicit 

Dim booSourceUsual as boolean 

Private Sub MyForm_Load() 
    booSourceUsual = False 
    Me!my_chk.Value = booSourceUsual 
    Call set_data_source 
End Sub 

Private Sub my_chk_AfterUpdate() 
    booSourceUsual = Me!my_chk.Value 
    Call set_data_source 
End Sub 
+0

我的報告的複選框,從來沒有從灰色改變。我不知道這是一個普遍的事實,爲什麼是這樣,或者我應該知道的。 –

+0

我想你的建議,但它不工作(用於報告)。 –

+0

「......我應該知道的......」 - 嘿,我從你的帖子中瞭解到,報告可能包含點擊事件。總是要學習,永遠不要知道。 – Smandoli