好吧,经过几周试图解决这个问题,并且(我认为)在99%的路上,我不得不承认失败,加入Stack Overflow并发布我的问题。如果我的问题礼仪不是很棒,我会道歉,但是这里就是这样;
正如标题所暗示的,我正在尝试为Access 2010表单中的组合框创建一个全选复选框。此组合框绑定到多值字段,该字段是SharePoint列表的一部分(我们数据库中的所有表都存储为SharePoint列表并链接到Access文件.Access文件实际上是前端)。
我已经设法让这个在没有链接到SharePoint的测试数据库中工作,但我似乎无法让它在我们的实际链接数据库中工作。以下是单击复选框时运行的测试数据库中的代码。请注意,[Test]是我在此示例中定义的多值字段的名称。它是一个查找字段,从数据库中的另一个简单表中获取其可能的值。
Private Sub testcheck_Click()
Dim counter As Integer
Dim rst As DAO.Recordset
Set rst = Me.Recordset
If testcheck.Value = True Then
With rst
.MoveFirst
.Edit
For counter = 0 To Me.testcombo.ListCount - 1
With !Test.Value
.AddNew
.Value = Val(Me.testcombo.Column(1, counter))
.Update
End With
Next counter
.Update
End With
ElseIf testcheck.Value = False Then
Me.testcombo.Value = Array()
End If
End Sub
当我尝试在我的实际数据库中运行上面的代码时,它会在到达.MoveFirst命令时抛出错误。错误是运行时错误3426:“此操作已被关联对象取消”。我很有信心它仍然认为我正在尝试移动到另一个记录,同时仍然编辑当前记录(即使只有一个)。从这里开始,我发现当在测试数据库中运行代码时,表单左上角的那个小铅笔图标(我假设你正在编辑记录)被黑色三角形替换掉了进入.MoveFirst命令。这在我的实际数据库中不会发生。我不知道为什么会出现差异,我也不完全明白这意味着什么。如果有人知道如何解决这个问题,我将非常感谢您的意见。
我应该注意,只有表单已经创建了要编辑的记录,我的代码才有效。我有一个解决方法,但切线超出了这个问题的范围。
答案 0 :(得分:0)
试试这个。 (我最初曾说要检查EOF,但经过进一步检查后,看起来你有一个EDIT,紧接着是一个ADD,即编辑没有做任何事情,因为你正在添加记录)。我之前从未使用过me.recordset,因为我总是明确地定义它 - 必须在下次尝试抓取底层表单源。 THX。
Private Sub testcheck_Click()
Dim counter As Integer
Dim rst As DAO.Recordset
Set rst = Me.Recordset
If testcheck.Value = True Then
With rst
For counter = 0 To Me.testcombo.ListCount - 1
.AddNew
!Test = Val(Me.testcombo.Column(1, counter))
.Update
Next counter
End With
ElseIf testcheck.Value = False Then
Me.testcombo.Value = Array()
End If
End Sub