2011-01-21 12 views
1

我們在客戶的網站上遇到此故障。訪問不會停止「計算...」,直到您將鼠標移動到某個控件上爲止

在一個工作站(Access2K3,恰好有一個觸摸屏)上,用戶通過其中一個關鍵窗體報告顯示在左下角的「Calculating ...」正在掛起或凍結。

我們看了看,發現這是真實的,只是我們注意到可以通過將鼠標左右晃動一下再「釋放」屏幕。然後縮小到一個特定的文本框。只要你將鼠標移動到這個文本框上,你就可以釋放屏幕,一切正常。

該文本框顯示一些只讀的財務數據。自然,文本框在被釋放之前是空白的,此後它顯示正確的數據。

沒有MouseMove,MouseDown或MouseUp事件用於此控件,也不適用於任何其他控件。 Textbox的控件源當然不是微不足道的,它由一個IF組成,也使用VBA函數。然而,類似的複雜控件資源會在應用程序的其他地方重複使用,並且不會造成問題,甚至這種特定的控件也不會在其他計算機上造成任何問題。

有沒有其他人經歷過這個?

也出於調試目的 - 有沒有什麼方法可以一步一步地找出究竟發生了什麼,當Access報告它正在「計算...」幾分鐘結束?

+0

兩個想法......文本框中是否有其他事件(非鼠標),如OnCurrent?而且,你是否嘗試過使用不同的觸摸屏(或將窗口移到其他地方)?也許有一些錯誤/卡在屏幕上,它變得「幸運」並在某處激活控件。 – BIBD 2011-01-21 16:37:37

+0

應用程序凍結時的CPU負載是多少? Maxed出或不? – HansUp 2011-01-21 17:22:13

+0

您的應用程序是否在任何地方設置了Echo或SetWarnings? – HansUp 2011-01-21 17:26:46

回答

3

我在使用條件格式時遇到了類似的問題。當我碰到這個問題,我用兩種不同的方法解決它:

  1. 溝的條件格式,並通過代碼(即手動應用的格式,通過Form_Current事件,相關的控制的After_Update事件等)。顯然,如果您試圖區分連續綁定形式的控件,這將不起作用。在這些情況下,我會使用其他選項

  2. 手動添加和刪除條件格式本身。我不完全確定這是爲什麼會起作用,但它確實如此。我會給你一個快速示例功能,顯示該技術:

Private Const DefaultHLColor As Long = 10092543 'RGB(255, 255, 153); Light Yellow 

'--------------------------------------------------------------------------------------- 
' Procedure : HighlightRow 
' DateTime : 2/22/2008 3:27 
' Author : Mike 
' Purpose : Highlight the detail section of a continuous form. 
' Usage  : 1) Add a textbox bound to a unique field (preferrably the primary key) 
'    to a form set to continuous view. 
'    2) Set Enabled = No, Locked = Yes, BackColor = {Detail Section BackColor}, 
'     BackStyle = Normal, SpecialEffect = Flat, ForeColor = BackColor 
'    3) Expand the textbox to fill the entire detail section, Send to Back. 
'    4) Move it down one pixel ([Ctrl] + [{down arrow key}]) 
'    5) Add the following to the form's OnCurrent event: 
'    =HighlightRow([{TextBoxName}]) 
' Notes  : We could simply Refresh the form in the OnCurrent event, but Access 
'    (2002, at least) does not have a rock solid implementation of conditional 
'    formatting. The problem with Refreshing the form occurs when we select 
'    a record (which gets highlighted), then we scroll the form so the 
'    highlighted record is no longer visible, then select a new record, and 
'    scroll back to the previous record to see that, sadly, it is still 
'    highlighted. 
'--------------------------------------------------------------------------------------- 
' 
Function HighlightRow(Ctl As TextBox, Optional HLColor As Long = DefaultHLColor) 'vv 
    On Error GoTo Err_HighlightRow 

    Application.Echo False 
    With Ctl 
     .FormatConditions.Delete 
     If Ctl.Parent.CurrentRecord <> 0 Then 
      If Not IsNull(.Value) And Not IsEmpty(.Value) Then 
       If IsNumeric(.Value) Then 
        .FormatConditions.Add acFieldValue, acEqual, .Value 
       Else 
        .FormatConditions.Add acFieldValue, acEqual, """" & .Value & """" 
       End If 
       .FormatConditions(0).BackColor = HLColor 
       .FormatConditions(0).ForeColor = HLColor 
       .FormatConditions(0).Enabled = False 
      End If 
     End If 
    End With 

Exit_HighlightRow: 
    Application.Echo True 
    Exit Function 
Err_HighlightRow: 
    LogError Err.Number, Err.Description, "HighlightRow" 
    Resume Exit_HighlightRow 
End Function 
0

您可以將狀態欄文本設置爲任何你喜歡的。嘗試在處理任務結束時使用此行

Application.Echo True 「Your Text Goes Here」 

不知道爲什麼它會清除鼠標!

1

我知道這個問題已經得到解答,但是我發現了一種奇怪的解決方法,可以幫助人們。

在我在Access 2007中的大型報告中,條件格式導致它在狀態欄中僅顯示「計算...」打開時卡住,與上面的問題類似。不過,我發現它只會在試圖在側邊欄中選擇它時打開報告。

我創建了一個窗體,用作帶有觸發OpenReport命令的按鈕+嵌入式宏的虛擬工具欄。當以這種方式打開時,報告立即打開!這確實是一個奇怪的事情,但它允許我保持條件格式。

希望這可以幫助其他人,只是不要忘記,當你在設計模式,如果你嘗試切換到報告模式,它會掛起。關閉它並使用人造工具欄按鈕。

編輯:進一步從上面,我已經意識到,這個工程,因爲按鈕打開它在打印預覽模式。它掛在報告模式下。

0

這似乎是Access 2013中的新增功能。我重新應用了所有條件格式並解決了問題。

1

我正是這個問題(Access 2010)。我有一個表單和一個子表單。該子表單具有條件格式以突出顯示所選記錄,但我在每個字段上都有格式化。 在窗體上有一個[edit]按鈕,它執行subform.allowedits = true

當我按下按鈕並且不要將鼠標移動到子窗體上時,沒有問題。當我按下編輯按鈕並立即將鼠標移動到子窗體上的條件格式化字段上時,它會一直閃爍/刷新,直到將鼠標從子窗體或子窗體上的非cond.formatted字段移開。

以上似乎工作,但此方法(使用一個控件來顯示選定狀態)的缺點是,當您將控件的顏色設置爲黑色和其他控件具有黑色文本時,您不能閱讀文本。

當然,一個簡單的解決方案是不要將背景變成黑色,但另一個「問題」是當您對文本框進行對焦時,背景不再通過文本框可見,並且看起來不太好。

當我只格式化一個控件它的作品。 當我使用上面的代碼來應用格式化所有控件(不再需要額外的控件)時,問題又回來了。

相關問題