我正在制作一个简单的Access表单(连续视图).这在“详细信息”部分中有一个复选框,在页脚中有一个“命令”按钮.
这样,用户可以使用复选框“选择”多个记录,然后单击按钮上的命令按钮以运行更新所选记录的脚本.无需永久存储这些检查值.
通常,我会在底层表中添加一个布尔字段,并将该复选框与该字段相关联.但有没有办法在不修改表格的情况下做到这一点?即将复选框值存储在内存中?
解决方法
您可以在表单中包含记录选择复选框
断开连接的记录集.这是您在内存中创建的ADO记录集,不受任何数据源的约束.使用记录集中的主键,命令按钮的单击过程可以遍历记录集以检索“选定”记录的主键列表.如果这种方法听起来很有用,请参阅Danny Lesandrini在 Database Journal: Create In-Memory ADO Recordsets上的这篇文章
断开连接的记录集.这是您在内存中创建的ADO记录集,不受任何数据源的约束.使用记录集中的主键,命令按钮的单击过程可以遍历记录集以检索“选定”记录的主键列表.如果这种方法听起来很有用,请参阅Danny Lesandrini在 Database Journal: Create In-Memory ADO Recordsets上的这篇文章
我根据该文章的代码创建了这个表单.主窗体包括一个基于断开连接的记录集的子窗体,该子窗体在子窗体的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",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数据对象的版本设置引用.但是,它可以适用于后期绑定的适当修改.
这种方法并不是轻量级的.但是,它允许您使用选择复选框,而不将它们绑定到实际数据表中的“是/否”字段.当用户可能覆盖共享表中的每个其他选择时,这将是多用户应用程序中的挑战.断开连接的记录集巧妙地避免了这种冲突.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。