2016-07-25 29 views
1

我在Access 2010中有一個數據庫,其中1st字段是唯一的成員編號。該字段已設置索引,不重複。如果在輸入表單上輸入了副本,則不會顯示任何錯誤消息,直到輸入唯一編號纔會有效。我需要能夠在數字字段上丟失焦點的錯誤代碼,以便消息框可以告訴用戶問題,然後將焦點設置回數字字段或讓用戶取消所有輸入。 這就是我,它會導致數據類型錯誤Access數據庫中的唯一成員編號

Private Sub Grumpy_No_BeforeUpdate(Cancel As Integer) 
    If DLookup(Str("[Grumpy_No]"), "Grumpy", Str("[Grumpy_No]") = Me!Str(Grumpy_No)) Then 
    MsgBox "Number has already been entered in the database." 
    Cancel = True 
    Me!Grumpy_No.Undo 
    End If 
End Sub 

任何線索,我要去的地方錯將是非常讚賞

+1

聽起來像你要求的[TextBox.BeforeUpdate事件](https://msdn.microsoft.com/en-us/library/office/ff845199.aspx) – HansUp

+0

對不起是一個痛苦,但我很安靜Access的新功能。我可以看到你對BeforeUpdate事件是正確的,但它似乎只想處理不是Integer的字符字段。我試過STR()函數,但不斷收到數據類型錯誤。我應該解釋我的俱樂部是一個名爲「脾氣暴躁的老混蛋」的摩托車俱樂部,桌子是「脾氣暴躁」,而場地是「Grumpy_No」,這是一個整數。 –

+0

這是我有: - Private Sub Grumpy_No_BeforeUpdate(Cancel As Integer) 如果DLookup(Str(「[Grumpy_No]」),「Grumpy」,Str(「[Grumpy_No]」)= Me!Str(Grumpy_No))然後 MsgBox「Number已經輸入到數據庫中。」 取消=真 Me!Grumpy_No.Undo End If End Sub 任何關於我哪裏出錯的線索都將非常感激。 –

回答

2

我看來像你在正確的方向,但你的標題需要修復你的DLookup表達式。它的第三個參數必須是單個字符串。我不明白爲什麼Str()是有用的---只是建立一個字符串。其實我會用DCount而不是DLookup,但是同樣的問題仍然適用。

Private Sub Grumpy_No_BeforeUpdate(Cancel As Integer) 
    If DCount("[Grumpy_No]", "Grumpy", "[Grumpy_No] = " & Me!Grumpy_No.Value) > 0 Then 
     MsgBox "Number has already been entered in the database." 
     Cancel = True 
     'Me!Grumpy_No.Undo '<- consider allowing the user to see the value which failed 
    End If 
End Sub 

注意,如果你可以讓Grumpy_No自動編號主鍵,Access將自動地提供獨特的價值,這樣你就不需要自己的代碼來檢查這些值。

+1

正是我需要的HansUp我現在有這樣的私人小組Grumpy_No_BeforeUpdate(取消作爲整數) 昏暗NewNum作爲字符串 NewNum = STR(我!Grumpy_No.Value) 如果我!Grumpy_No.Value> 0,則 如果DCOUNT( 「[Grumpy_No]」,「Grumpy」,「[Grumpy_No] =」&Me!Grumpy_No.Value)> 0 Then MsgBox「Grumpy Number」+ NewNum +「已經輸入數據庫。 取消=真 我!Grumpy_No.Undo「 結束如果 結束如果 結束小組 –

+0

唯一的問題是現在它運行該程序後(工作只是我怎麼想它)我現在得到一個訪問錯誤信息說:「該值違反了字段或記錄的驗證規則」我認爲這可能是表中沒有重複項,所以我將其更改爲重複項確定,但仍然出現錯誤。我在其他地方找不到任何驗證規則。 –

+0

堅果!這是另一個問題,雷。我懷疑這個問題是獨立於表單的,因此當它在數據表視圖中打開時嘗試向表中添加新行時,會得到相同的錯誤。我認爲你現在最好的做法是提交一個描述當前問題的新問題。 – HansUp