绑定到 Sharepoint 多值字段的组合框的 MS Access 全选复选框

Posted

技术标签:

【中文标题】绑定到 Sharepoint 多值字段的组合框的 MS Access 全选复选框【英文标题】:MS Access Select All Check Box for a Combobox Bound to a Sharepoint Multivalue Field 【发布时间】:2016-09-28 22:27:16 【问题描述】:

好吧,经过几周的努力解决这个问题,并且(我认为)已经完成了 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

Snapshot of my test form

当我尝试在我的实际数据库中运行上述代码时,它会在到达 .MoveFirst 命令时引发错误。错误是运行时错误 3426:“此操作已被关联对象取消”。我很有信心它认为我正在尝试移动到另一条记录,同时仍在编辑当前记录(即使只有一个记录)。从这里,我发现,在测试数据库中运行代码时,表单左上角的那个小铅笔图标(我假设您正在编辑记录)被一个黑色三角形替换进入 .MoveFirst 命令。这在我的实际数据库中不会发生。我不知道为什么会出现这种差异,我也不完全理解它的含义。如果有人知道如何解决此问题,我将非常感谢您的意见。

我应该注意,我的代码只有在表单已经创建了要编辑的记录时才有效。我有一个解决方法,但是这个切线超出了这个问题的范围。

【问题讨论】:

【参考方案1】:

试试这个。 (我最初说过要检查 EOF,但经过进一步检查后,看起来你有一个 EDIT 紧跟一个 ADD,即 EDIT 没有做任何事情,因为你正在添加记录)。我以前也从未使用过 me.recordset,因为我总是明确定义它 - 下次必须尝试获取底层表单源。谢谢。

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

结束子

【讨论】:

谢谢,geeFlo,但我不认为这会奏效。如果我没记错的话,您的代码会将记录添加到我的表中,而我需要将记录添加到存储在表单创建的新记录的多值字段中的记录集中。但是,如果我不理解您的回答,请说出来。 @geeFlo .Edit 正在编辑您当前的记录,但随后您立即声明 .addnew 将您移动到新的空记录。看起来您可能想在作业部分重复您的其他字段,以便记录完整。即在 .addnew 之后,为每个其他字段分配状态以重复现有字段值,直到 FOR-NEXT 完成。 嗯。这是个好的观点。但是,我最初的问题出现在 .MoveFirst 语句中,因为那是引发错误的时候。所以即使我添加了额外的信息,我仍然会遇到这个错误。 哦,检查 .EOF 也许没有记录? 看,这很奇怪。我之前已经检查过,如果您之前没有填写表单的任何部分,那确实是一个问题。只要您编辑表单的不同部分(例如,添加标题),那里肯定有一条记录。

以上是关于绑定到 Sharepoint 多值字段的组合框的 MS Access 全选复选框的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MS Access 2010 中使用 VBA 选择多值组合框的值?

多值组合框在表单中创建多条记录

如何更新 ms access vba 中的多值组合框?

访问报告中的绑定组合框为空

访问 VBA - 使用组合框(多值字段)时类型不匹配

使用多值控制源隐藏组合框中的值