4

我正在制作一个简单的访问表单(连续视图)。这在详细信息部分有一个复选框,在页脚中有一个命令按钮。

这样,用户可以使用复选框“选择”多个记录,然后单击按钮上的命令按钮以运行更新所选记录的脚本。无需永久存储这些检查值。

通常,我会在基础表中添加一个布尔字段并将复选框与该字段相关联。但是有没有办法在不修改表格的情况下做到这一点?即在内存中存储复选框值?

4

3 回答 3

3

不,那里没有。连续表单不是很多活动记录,它是一个活动记录,其中包含许多其他记录的视图。对未绑定控件的任何更新仅适用于当前记录。您可以使用记录选择器选择一组记录并使用它们:http ://wiki.lessthandot.com/index.php/Allow_the_User_to_Select_Multiple_Records_for_Processing

于 2013-01-18T16:11:18.393 回答
2

您可以在基于断开连接的记录集的表单中包含记录选择复选框。这是您在内存中创建的 ADO 记录集,未绑定到任何数据源。使用记录集中的主键,您的命令按钮的单击过程可以遍历记录集以检索“选定”记录的主键列表。如果该方法听起来有用,请参阅 Danny Lesandrini 在 Database Journal 上的这篇文章:创建内存中 ADO 记录集

我根据那篇文章中的代码创建了这个表单。主窗体包括一个基于断开连接记录集的子窗体,该记录集在子窗体的Form_Open.

基于断开记录集的表单

请注意,您实际上不需要ID在表单中显示主键 ( );只要它包含在记录集中,您就可以在遍历记录集时检索它。

Private Sub Form_Open(Cancel As Integer)
    Dim dbs As DAO.Database
    Dim fld As ADODB.Field
    Dim rstAdo As ADODB.Recordset
    Dim rstDao As DAO.Recordset
    Dim strSql As String

    Set rstADO = New ADODB.Recordset
    With rstAdo
        .Fields.Append "EmployeeID", adInteger, , adFldKeyColumn
        .Fields.Append "FirstName", adVarChar, 10, adFldMayBeNull
        .Fields.Append "LastName", adVarChar, 20, adFldMayBeNull
        .Fields.Append "Selected", adBoolean
        .CursorType = adOpenKeyset
        .CursorLocation = adUseClient
        .LockType = adLockPessimistic
        .Open
    End With

    Set dbs = CurrentDb
    strSql = "SELECT EmployeeID, FirstName, LastName " & _
             "FROM Employees ORDER BY LastName, FirstName"
    Set rstDao = dbs.OpenRecordset(strSql, dbOpenSnapshot)

    Do Until rstDao.EOF
        rstAdo.AddNew
        rstAdo!EmployeeID = rstDao!EmployeeID
        rstAdo!FirstName = rstDao!FirstName
        rstAdo!LastName = rstDao!LastName
        rstAdo!Selected = False
        rstAdo.Update
        rstDao.MoveNext
    Loop

    Set Me.Recordset = rstAdo
    rstDao.Close    
    Set rstDao = Nothing
    Set dbs = Nothing
End Sub

该代码示例对 ADO 使用早期绑定,这需要为Microsoft ActiveX 数据对象的版本设置引用。但是,通过对后期绑定进行适当的修改,它可以正常工作。

这种方法并不完全是轻量级的。但是,它允许您选择复选框,而无需将它们绑定到实际数据表中的“是/否”字段。当用户可能会覆盖共享表中的其他选择时,这在多用户应用程序中将是一个挑战。断开连接的记录集巧妙地避免了这种冲突。

于 2013-01-18T17:31:37.163 回答
0

你当然可以做到这一点。您只需将复选框绑定到 VBA 函数作为它的数据源。

该函数可以根据行的 PK 返回真/假,并将值存储在集合中。

我在这里有一个工作样本:

http://www.kallal.ca/msaccess/msaccess.html

抓住多选示例。

所以这里声称你不能这样做或者你需要一列或者需要使用一些断开连接的记录集的帖子都是 100% 错误的

于 2014-05-10T22:38:52.497 回答