访问连续表单:添加控件而不修改基础表?

时间:2013-01-18 16:05:38

标签: ms-access ms-access-2007

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

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

我根据该文章的代码创建了此表单。主窗体包含一个基于断开连接的记录集的子窗体,该子窗体在子窗体Form_Open期间加载。

Form based on disconnected recordset

请注意,您实际上不需要在表单中显示主键(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 Data Objects 的版本设置引用。但是,对于后期绑定,它可以正常工作。

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

答案 2 :(得分:0)

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

该函数可以返回true / false,基于行的PK并将值存储在集合中。

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

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

抓住多选示例。

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