首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microsoft Access,在DataSheet子窗体中自动生成列

Microsoft Access,在DataSheet子窗体中自动生成列
EN

Stack Overflow用户
提问于 2013-04-04 06:25:20
回答 1查看 4.2K关注 0票数 2

我想在MS Access 2003中创建一个表单,允许用户从任何现有查询中进行选择,然后让它在表单中显示结果(作为DataSheet视图中的子表单)。然后,用户将能够选择一条或多条记录,并单击父窗体上的按钮以根据选择执行某些操作。我希望它能够处理任何查询,具有很少的限制,并显示查询的完整结果(所有列)。我可能有的唯一要求是,它必须包含用于某些操作的某些字段。例如,如果我有一个"send email“操作,查询将需要一个名为"email”或"to“和"subject”的字段。

在运行时更改VBA子窗体的DataSource不是问题,我在使用DataSheet之前已经这样做过。更改显示的列是一个问题。

在.NET WinForms应用程序中,这可以通过GridView控件上的“自动生成列”来完成,或者直接在代码中使用GridView.Columns集合。在VBA中,我看不到在DataSheet视图中添加/删除列的方法。我也看不到一种基于查询自动生成它们的方法。这些列似乎是由放置在窗体上的控件控制的(在窗体视图中),虽然可以使用VBA添加/删除控件,但是窗体必须放在设计视图中,并且需要独占访问数据库--这听起来非常混乱,我希望避免独占访问部分。

我是不是遗漏了什么?有什么简单的方法可以做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-05 05:51:30

这就是我要做的。在主窗体上创建一个空白subForm控件。要更改源和列,只需将源对象留空,然后当您使用代码设置它时,列将重置为您使用的任何源。因此,可以这样设置:

代码语言:javascript
复制
Private Sub setSource()
    Me.subForm.SourceObject = "Query.myQuery"
End Sub

然后,假设您知道所需的列,则可以执行以下操作来获取所选的项:

代码语言:javascript
复制
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

如果您不知道显式的列,您可以使用它遍历所选项目的列,并对每个名称运行一些分析,直到您确定它是您想要的列。

代码语言:javascript
复制
Dim i as Integer
For i = 0 To rs.Fields.Count - 1
        Debug.Print rs.Fields(i).Name
Next
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15799331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档