我正在制作一个简单的访问表单(连续视图)。这在详细信息部分有一个复选框,在页脚中有一个命令按钮。
这样,用户可以使用复选框“选择”多个记录,然后单击按钮上的命令按钮以运行更新所选记录的脚本。无需永久存储这些检查值。
通常,我会在基础表中添加一个布尔字段并将复选框与该字段相关联。但是有没有办法在不修改表格的情况下做到这一点?即在内存中存储复选框值?
我正在制作一个简单的访问表单(连续视图)。这在详细信息部分有一个复选框,在页脚中有一个命令按钮。
这样,用户可以使用复选框“选择”多个记录,然后单击按钮上的命令按钮以运行更新所选记录的脚本。无需永久存储这些检查值。
通常,我会在基础表中添加一个布尔字段并将复选框与该字段相关联。但是有没有办法在不修改表格的情况下做到这一点?即在内存中存储复选框值?
不,那里没有。连续表单不是很多活动记录,它是一个活动记录,其中包含许多其他记录的视图。对未绑定控件的任何更新仅适用于当前记录。您可以使用记录选择器选择一组记录并使用它们:http ://wiki.lessthandot.com/index.php/Allow_the_User_to_Select_Multiple_Records_for_Processing
您可以在基于断开连接的记录集的表单中包含记录选择复选框。这是您在内存中创建的 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 数据对象的版本设置引用。但是,通过对后期绑定进行适当的修改,它可以正常工作。
这种方法并不完全是轻量级的。但是,它允许您选择复选框,而无需将它们绑定到实际数据表中的“是/否”字段。当用户可能会覆盖共享表中的其他选择时,这在多用户应用程序中将是一个挑战。断开连接的记录集巧妙地避免了这种冲突。
你当然可以做到这一点。您只需将复选框绑定到 VBA 函数作为它的数据源。
该函数可以根据行的 PK 返回真/假,并将值存储在集合中。
我在这里有一个工作样本:
http://www.kallal.ca/msaccess/msaccess.html
抓住多选示例。
所以这里声称你不能这样做或者你需要一列或者需要使用一些断开连接的记录集的帖子都是 100% 错误的