如何解决下面代码中指定行上的“编译错误:限定符必须是集合”?
我基本上有两张桌子:
items
(ID
,title
,amount
)和relationships
(parentId
,clientId
)。我基本上只是尝试在 items
中创建一条新记录,然后也创建一个新的 relationships
表记录。
我不确定如何将新的
items
记录(刚刚创建)分配到新的 relationships
记录的 childId
字段。
Private Sub Command18_Click()
Debug.Print ("*** Starting ***")
' New Record
Dim rsItems As Recordset
Set rsItems = CurrentDb.OpenRecordset("items")
rsItems.AddNew
rsItems![title] = "title"
rsItems![amount] = 123
rsItems.Update
' Get new ID
rsItems.Bookmark = rsItems.LastModified
newId = rsItems.Bookmark
Debug.Print ("New ITEM record with ID " & newId)
' Relationships
Dim rsRelationship As Recordset
Set rsRelationship = CurrentDb.OpenRecordset("relationships")
rsRelationship.AddNew
'Debug.Print ("Relationships Field Types: " & TypeName(gcItemParentId) & ", " & TypeName(rsItems.LastModified!ID))
rsRelationship![parentId] = gcItemParentId 'taken from text box on main form that holds current parent ID
rsRelationship![clientId] = rsItems.LastModified!["ID"] ' *** ERROR HERE ***
rsRelationship.Update
' Get new ID
rsRelationship.Bookmark = rsRelationship.LastModified
newId = rsItems.Bookmark
Debug.Print ("New RELATIONSHIP record with ID " & newId)
' Refresh Form
Me.Refresh
' Cleanup
rsItems.Close
rsRelationship.Close
Set rsItems = Nothing
Set rsRelationship = Nothing
End Sub
您收到此错误是因为您尝试使用
LastModified
和 Bookmark
来表示记录中的 ID,而不仅仅是记录记录集中的位置。他们做不到。
因此,您需要的是
newId = rsItems.Bookmark
,而不是 newId = rsItems!ID
。一旦您获得了刚刚添加的记录的主键,您就可以将其与 rsRelationship!clientId = newId
一起使用。 (您可能还应该向 RelationshipID
表添加一个名为 Relationships
[尽管名称并不真正重要] 的主键字段。在 Access 中,[在 Access 意义上] 具有可执行关系的所有表都必须具有主键,通常,几乎所有表都应该具有它们,无论技术上是否需要它们。主要是因为理论上可以具有可执行关系的所有表都应该具有它们;与手写代码相比,Access 在维护数据完整性和创建易于使用的链接方面要好得多通常是。)
整个代码看起来像这样,调试语句、错误处理和冗余注释被删除:
Private Sub Command18_Click()
Dim rsItems As Recordset
Set rsItems = CurrentDb.OpenRecordset("items")
rsItems.AddNew
rsItems!title = "title"
rsItems!amount = 123
rsItems.Update
' Go back to the record we just saved
rsItems.Bookmark = rsItems.LastModified
newId = rsItems!ID
Dim rsRelationship As Recordset
Set rsRelationship = CurrentDb.OpenRecordset("relationships")
rsRelationship.AddNew
rsRelationship!parentId = gcItemParentId
rsRelationship!clientId = newId
rsRelationship.Update
Me.Refresh
rsItems.Close
rsRelationship.Close
End Sub
我正在尝试使用用户控件创建登录表单(表单和报告)。
获取限定符一定是集合错误。
请帮助我
私有子命令4_Click() 将 FRM 变暗为整数 昏暗的报告为整数
FRM = DLookup("表单", "User_Account", "UserName='" & Me.UserName & "'") 报告 = DLookup("报告", "User_Account", "UserName='" & Me.UserName & "'")
'~~~执行~~~~~~
如果 IsNull(Me.UserName) 那么 MsgBox "请输入正确的用户名!", vbCritical, "拒绝" 我.用户名.SetFocus
ElseIf IsNull(Me.Password) 那么 MsgBox "请输入正确的密码!", vbCritical, "拒绝" Me.TxtPassword.SetFocus
其他 If (IsNull(DLookup("UserName", "User_Account", "UserName='" & Me.UserName & "'"))) 或 _ IsNull(DLookup("密码", "User_Account", "密码='" & Me.TxtPassword & "'")) 然后 MsgBox "请输入正确的用户名和密码!", vbCritical, "拒绝" 我.用户名 = "" Me.TxtPassword = "" 我.用户名.SetFocus
其他 If DLookup("Password", "User_Account", "UserName='" & Me.UserName & "'") <> Me.TxtPassword 那么 MsgBox“用户名或密码不正确!”,vbCritical,“拒绝” 我.用户名 = "" Me.TxtPassword = "" 我.用户名.SetFocus
其他 如果 FRM = -1 或报告 = -1 或 AI = -1 或 AO = -1 那么 DoCmd.OpenForm“导航表单”
If FRM = -1 Then
DoCmd.OpenForm "Navigation Form"
FRM![Navigation Form]!Forms.Enabled = True
End If
If Reports = -1 Then
DoCmd.OpenForm "Navigation Form"
Reports![Navigation Form]!Reports.Enabled = True
End If
其他 MsgBox "您没有权限" & vbCrLf & vbcrld & _ “请联系数据库管理员”,vbInformation,“已拒绝”
结束如果 万一 万一 万一 结束子