2016-09-28 48 views
1

好几个星期后,试图找出这一点,(我想)得到99%的方式,我不得不承认失败,加入堆栈溢出,并发布我的问题。我很抱歉,如果我的问题礼仪不是很好,但是在这里;MS Access选择所有复选框的绑定到共享点多值字段的组合框

正如标题所暗示的,我试图为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命令。这在我的实际数据库中不会发生。我不知道为什么这种差异,我不完全明白它的含义。如果任何人有一个如何解决这个问题的想法,我会非常感激的意见。

我应该注意,我的代码只适用于窗体已经创建了一条记录进行编辑。我有一个解决办法,但这个切线超出了这个问题的范围。

回答

0

试试这个。 (我原本是说要检查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 

末次

+0

谢谢,geeFlo,但我不认为这会工作。如果我没有弄错,代码会将记录添加到我的表中,而我需要的是将记录添加到存储在窗体创建的新记录的多值字段中的记录集。如果我不理解你的答案,请说出来。 @geeFlo – apynn

+0

.Edit正在编辑您当前的记录,但是您立即声明.addnew会将您移至新的空记录。看起来你可能想在作业部分重复其他字段,以便记录完整。即在.addnew之后,每个其他字段的状态分配重复现有的字段值,直到FOR-NEXT完成。 – geeFlo

+0

嗯。这是个好的观点。但是,我最初的问题出现在.MoveFirst语句中,因为这是错误发生的时间。所以即使我添加了额外的信息,我仍然会遇到这个错误。 – apynn