尝试使用记录集书签更新记录 ID 时出现“编译错误:限定符必须是集合”错误

问题描述 投票:0回答:2

如何解决下面代码中指定行上的“编译错误:限定符必须是集合”?

我基本上有两张桌子:

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
ms-access vba relationship
2个回答
1
投票

您收到此错误是因为您尝试使用

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

-1
投票

我正在尝试使用用户控件创建登录表单(表单和报告)。

获取限定符一定是集合错误。

请帮助我

私有子命令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,“已拒绝”

结束如果 万一 万一 万一 结束子

© www.soinside.com 2019 - 2024. All rights reserved.