2013-09-30 94 views
1

我收到溢出錯誤在訪問時,這條線運行的MS Access溢出錯誤

intAT = Nz(DLookup("at_ID", "qryAT", "at_sc_ID=" & Me.sc_ID & " AND at_OT=0"), 0) 

如果我只是行前加Debug.Print Nz(DLookup("at_ID", "qryAT", "at_sc_ID=" & Me.sc_ID & " AND at_OT=0"), 0),將打印身份證號碼就好了,但在分配期間仍然錯誤下一行。

我還可以通過向查詢添加一個標準來限制所有結果,使其在特定日期和時間之前發生的結果。它只能在特定的時間之前限制查詢,而不是在較早的時間之後。如果在此之後的任何記錄都包含在內,則會再次溢出。我查看了那段時間之後輸入的數據,這一切似乎都很好,但我不確定我應該在尋找什麼。與導致它失敗的第一條記錄相關聯的at_ID32838,如果有幫助的話。

+0

將'intAT'轉換爲double。 – Santosh

回答

4

我的猜測是intAT被聲明爲整數類型。但是32,838對Integer來說太大了。 (整數可以保持數字從-32,768到32,767)因此,它觸發錯誤#6,「溢出」

改爲使用長整數。

Dim lngAT As Long 
lngAT = Nz(DLookup("at_ID", "qryAT", "at_sc_ID=" & Me.sc_ID & " AND at_OT=0"), 0) 
+0

我相信,按照Access 2007,int被隱式標註爲一個長整型。 – Elias

+0

似乎這樣做。但是,爲了避免將來出現這個問題,你有什麼想法,爲什麼它可以在高達32837的數字下正常工作? 32837明顯大於32767. – philthyfool

+0

你是說'DLookup'返回的at_ID值在32768和32837之間(含),並且這些都存儲在'intAT'沒有錯誤?我不相信這是可能的*如果intAT'被聲明爲Integer。 – HansUp