Microsoft Access,在 DataSheet 子表单中自动生成列
Posted
技术标签:
【中文标题】Microsoft Access,在 DataSheet 子表单中自动生成列【英文标题】:Microsoft Access, auto generate columns in DataSheet subform 【发布时间】:2013-04-03 22:25:20 【问题描述】:我想在 MS Access 2003 中创建一个表单,让用户从任何现有查询中进行选择,然后让它在表单中显示结果(作为 DataSheet 视图中的子表单)。然后,用户将能够选择一个或多个记录并单击父表单上的按钮以根据选择执行某些操作。我希望它能够处理任何查询,限制很少,并显示查询的完整结果(所有列)。我可能有的唯一要求是它包含某些操作的某些字段。例如,如果我有一个“发送电子邮件”操作,查询将需要一个名为“电子邮件”的字段,或者可能是“收件人”和“主题”。
在运行时更改 DataSheet 子表单的 DataSource 不是问题,我在使用 VBA 之前已经这样做了。让显示的列发生变化是个问题。
在 .NET WinForms 应用程序中,这可以通过 GridView 控件上的“自动生成列”来完成,或者直接在代码中使用 GridView.Columns 集合。在 VBA 中,我看不到从 DataSheet 视图中添加/删除列的方法。我也看不到根据查询自动生成它们的方法。看起来这些列是由放置在表单上的控件控制的(在表单视图中),虽然可以使用 VBA 添加/删除控件,但表单必须放在设计视图中并且需要对数据库的独占访问权限 - - 听起来很乱,我想避免独占访问部分。
我错过了什么吗?有没有简单的方法可以做到这一点?
【问题讨论】:
【参考方案1】:这就是我的处理方式。在主窗体上创建一个空白 subForm 控件。要更改源和列,只需将源对象留空,然后当您使用代码设置它时,列将重置为您使用的任何源。所以这样设置:
Private Sub setSource()
Me.subForm.SourceObject = "Query.myQuery"
End Sub
然后要获取选定的项目,假设你知道你想要什么列,你会做这样的事情:
Private Sub getSelected()
Dim rs As Recordset
Dim f As Form
Set f = Me.subForm.Form
Set rs = f.RecordsetClone
Debug.Print f.SelTop
rs.MoveLast
rs.MoveFirst
rs.Move f.SelTop - 1
Debug.Print rs!ID
End Sub
如果您不明确知道该列,您可以使用它来遍历所选项目的列并对每个名称运行一些分析,直到确定它是您想要的列。
Dim i as Integer
For i = 0 To rs.Fields.Count - 1
Debug.Print rs.Fields(i).Name
Next
【讨论】:
谢谢!没想到那个SourceObject,它可以是表、查询,甚至是Recordset。 没问题。很高兴它有帮助 太棒了!如果您正在寻找一种在表单上获取数据透视查询数据(具有动态列数)的方法,这个带有子表单对象的 SourceObject 设置可以在几秒钟内完成。 Access 2013 中删除了表单设计的枢轴功能,因此所有显示它的视频都已过时,我在 Microsoft 网站上没有找到任何与枢轴查询和表格相关的文档。以上是关于Microsoft Access,在 DataSheet 子表单中自动生成列的主要内容,如果未能解决你的问题,请参考以下文章
将 Microsoft SQL Server 中的文件表链接到 Microsoft Access 2016 中的表
参考 Microsoft.Office.interop.access.dao.dll 导致错误 C#
RODBC 与 ms-access 错误 07002 17 [Microsoft][ODBC Microsoft Access Driver]COUNT 字段不正确