2012-04-02 84 views
3

我在Access中有一個奇怪的情況。通常,Null錯誤的無效使用是一件非常簡單的事情 - 爲一個字符串變量或其他類型賦值null。但是我在一個看起來不應該發生的地方出現錯誤。以下是代碼片段:MsAccess中的DoEvents語句中的「空使用空值」錯誤

bch = Form_Akces.txtMaxCisla.BackColor 
If Err <> 0 Then Stop 
Form_Akces.txtMaxCisla.BackColor = vbYellow 
If Err <> 0 Then Stop 
DoEvents 
If Err <> 0 Then Stop ' This is where I get the error 
With qdf_GPsp 

什麼是怎麼發生的事情是,我得到這個錯誤只是有時,通常只在我第一次在一段時間運行代碼。如果我關閉數據庫並立即重新打開它,通常我不會得到錯誤。這讓我瘋狂了很長一段時間,所以我把所有這些「如果錯誤<> 0然後停止」語句,試圖追蹤它發生的地方。這是一個實時系統,用戶知道只需重新啓動應用程序,但這是一個龐大的PIA,並且引導很尷尬。

任何人都可以想到一些事情來嘗試或檢查?我不完全是Access中的業餘愛好者,但這遠遠超出我曾經遇到過的任何事情。爲什麼DoEvents語句應該會產生這樣的錯誤超出了我的想象,特別是因爲即使在前面的語句中,我也沒有做任何事情,應該會產生這樣的錯誤,直到處理器有機會拋出錯誤。如果我拿出DoEvents,我只會在相同的線下得到相同的錯誤。 txtMaxCisla是Form_Akces表單上的一個未綁定的文本字段,包含此代碼的例程將從其中調用。只有在啓動時 - 一旦一切都被加載並運行,這再也不會發生。它只發生一次 - 沒有模式,我已經能夠檢測到。

通過大量的編譯,反編譯,重新編譯,壓縮和修復循環,它已經持續了幾個月,沒有明顯的變化,除了有時會發生在其他地方,再次沒有理由我可以看到。

  • 更新*

沒有運氣 - 它仍然崩潰,並絕對沒有理由,我可以看到。下面的代碼現在:

Public Sub ReloadMaxNumbers(tmc As TextBox) 
Dim rst As DAO.Recordset, x$, xb$, xe$, bch& 
On Error GoTo 0 
If Err <> 0 Then Stop 
DoEvents 
If Err <> 0 Then Stop 
... 

代碼停在第二次測試中,後的DoEvents,用同樣的錯誤,「無效的使用Null」。我意識到這個代碼是完全延遲的,但它是追溯的結果,試圖找到錯誤的根源。沒有這個,它就會在某個地方進一步崩潰,同樣的錯誤。在這一點上,我想不出別的什麼來嘗試。

+0

我有同樣的問題,如果我找到解決方案,我會給你反饋。 – celerno 2013-08-10 01:38:19

回答

1

我對你的代碼中的Form_Akces感到困惑。如果我創建一個名爲Akces的表單,則表單的代碼模塊名爲Form_Akces。但是您在表格Form_Akces上表示「」。所以我很困惑Form_Akces是窗體的名稱還是窗體的代碼模塊。也許訪問也困惑。

無論哪種方式,因爲你說的代碼是窗體的代碼模塊中,我建議你代替MeForm_Akces

編輯:我誤解你的情況。您向我們展示的代碼實際上來自另一個代碼模塊中的過程,而不是表單的代碼模塊。在這種情況下,我會做這樣的事情的外部過程DoSomething

Public Sub DoSomething(ByRef frm As Form) 
    bch = frm.txtMaxCisla.BackColor 
    frm.txtMaxCisla.BackColor = vbYellow 
    DoEvents 
    ' whatever else you need 
End Sub 

然後窗體的代碼模塊中,您撥打的DoSomething:

DoSomething Me 

如果DoSomething只能對每一個單一的控制時間,你可以只傳遞一個對該控件的引用。

Public Sub DoSomething(ByRef ctl As Control) 

這種做法將使DoSomething重新用於其他形式的無需任何改變,因爲目標表單名稱不是「硬連線」進入程序。此外,如果您重命名您的Akces表單,它不會中斷。在第二種變體中,它也會適應對控件名稱的更改。

+0

謝謝,漢斯,我想我沒有說清楚。此代碼位於從Form_Akces代碼模塊調用的獨立模塊中。 Form_Akces.txtMaxCisla.BackColor引用名爲Akces的表單上的文本字段。我不認爲Access對此感到困惑,因爲它提供了各種下拉列表中的適當元素。我不能使用ME,但我肯定可以將語法更改爲Forms(「Akces」)。txtMaxCisla.BackColor - 你認爲這有幫助嗎?事實上,我只是改變了它,但由於錯誤偶爾發生,我可能需要一段時間才能確定是否有幫助。 – 2012-04-02 14:51:36

+0

>重要的是要記住這兩個表達式不是同義詞: > Forms(「Akces」)。txtMaxCisla.BackColor > Form_Akces.txtMaxCisla.BackColor – 2012-04-02 15:36:38

+0

我刪除了這個。 – HansUp 2012-04-02 15:43:21