我正在制作一个简单的Access表单(连续视图)。这在“详细信息”部分中有一个复选框,在页脚中有一个“命令”按钮。
这样,用户可以使用复选框“选择”多个记录,然后单击按钮上的命令按钮以运行更新所选记录的脚本。无需永久存储这些检查值。
通常,我会在底层表中添加一个布尔字段,并将该复选框与该字段相关联。但有没有办法在不修改表格的情况下做到这一点?即将复选框值存储在内存中?
答案 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
期间加载。
请注意,您实际上不需要在表单中显示主键(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%错误