我的代碼為我的 UserID 欄位生成自動編號時遇到問題。我正在嘗試通過 VBA 生成我的用戶 ID,因為 Access 的自動編號實際上并沒有按順序排列。
由于某種原因,我的代碼不會填寫自動編號,而是 UserID 始終以 0 結尾,這是默認值。不知道我錯過了什么。
任何幫助將不勝感激!!
Private Sub RegistrationBtn_Click()
Dim db As Database
Dim rst As DAO.Recordset
Dim strMember As String
strMember = "" & Me!CallSign
Autonumber = Nz(DMax("[UserID]", "[Memberstbl]"), 0) 1
If Len(strMember) = 0 Then Exit Sub
Set db = CurrentDb
Set rst = db.OpenRecordset("Memberstbl", dbOpenDynaset)
With rst
.FindFirst "CallSign = '" & strMember & "'"
If .NoMatch Then
.AddNew
!UserID = Autonumber
!CallSign = strMember
MsgBox "Welcome to the UNCC"
DoCmd.OpenForm "Logonfrm"
DoCmd.Close acForm, "Registration"
Else
MsgBox "That Call Sign is already in use!"
End If
.Close
End With
Set rst = Nothing
Set db = Nothing
End Sub
uj5u.com熱心網友回復:
我認為您遇到的問題是您沒有使用.Update
. 嘗試:
If .NoMatch Then
.AddNew
!UserID = Autonumber
!CallSign = strMember
.Update 'Needed to "commit" the adding of the new record
uj5u.com熱心網友回復:
好的,讓卡車在這里倒車一點。
用戶輸入呼號。檢查呼號是否存在 - 如果是,則不要繼續。
如果呼號不存在,則生成新號碼和新記錄。
然后將表格啟動到新記錄以填寫其他資訊。
換句話說,我們不能,也不要在“添加模式”下啟動第二種形式,否則你會得到兩條記錄(這解釋了你的另一個問題 - 兩條記錄)。所以我們不能也不想將第二種形式啟動到新記錄,因為我們將假設我們已經創建了該記錄,對嗎?
所以,第一個代碼 - 檢查現有的呼號 - 如果我們有綠燈添加呼號記錄(以及新生成的號碼),讓我們 100% 分開而不嘗試組合該操作。
所以,第一段代碼應該是這樣的:
Dim strTable As String
Dim strMember As String
strTable = "Memberstbl"
If Nz(Me.CallSign, "") = "" Then
MsgBox "Please enter a call sign", vbCritical, "Enter Call sign"
Exit Sub
End If
' get here, user entered a call sign.
' check if exists.
Dim strWhere As String
strWhere = "CallSign = '" & Me.CallSign & "'"
If Nz(DLookup("CallSign", strTable, strWhere), "") <> "" Then
MsgBox "That call sign is already in use, try another", vbInformation, "In use"
Exit Sub
End If
' if we reach here, then user entered a call sign, and it not in use.
' create new reocrd, new UserID, and then launch form to this record.
Dim NewUserID As Long
NewUserID = Nz(DMax("UserID", strTable), 0) 1
Dim rstMember As DAO.Recordset
Set rstMember = CurrentDb.OpenRecordset(strTable)
With rstMember
.AddNew
!UserId = NewUserID
!CalSign = Me.CallSign
.Update
.Close
End With
' now launch form to this new record
DoCmd.OpenForm "Logonfrm", , , "UserID = " & NewUserID
DoCmd.Close acForm, Me.Name
請確保 Logonfrm 設定為 data entry = "no"。(如果您設定為是,那么表單只能添加記錄 - 但我們已經在代碼中這樣做了)。
uj5u.com熱心網友回復:
請參閱 6 月 7 日的評論,但如果您想繼續嘗試這些事情。確保 UserID 仍然不是自動編號,并確保 UserID 具有與外鍵相同的資料型別。這兩種情況我都見過。然后確保 UserID 仍然是 UsersTable 的主鍵。此時您可以建立關系,但級聯更新存在問題。我的 Access 2016 副本拒絕級聯更新,但允許級聯洗掉。除了錯誤訊息之外,我看不到任何問題,因為訪問已經使更改主鍵變得困難。見這里:https ://support.microsoft.com/en-us/office/guide-to-table-relationships-30446197-4fbe-457b-b992-2f6fb812b58f#:~:text=When you enforce referential% 20完整性,即 reference the primary key。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/508017.html