【问题标题】:Data bind or Manipulate an Access Datasheet Using VBA Code使用 VBA 代码绑定或操作 Access 数据表
【发布时间】:2012-10-19 22:44:31
【问题描述】:

我将 Access 2007 用于原型应用程序。我有两个数据库 testUi.accdb(其中

包含我的所有表单)和 testDb.mdb(包含我的数据库)。 现在我想在我的一个子表单中使用数据表。 谁能帮我解答这些问题?

  1. 我可以手动构建没有表格的数据表吗?
  2. 如何通过 VBA 代码使用 DAO 或 ADO 将数据与此数据表绑定
  3. 是否可以使用 VBA 代码循环数据表?获取或设置每一行的值?
  4. 如果上述方法不可行,那么有什么替代方法 在 Access 中使用像网格这样的数据表?

【问题讨论】:

  • 没有表格,您希望将此数据表绑定到什么?
  • 我想执行查询/提取记录集并将其与数据表绑定(如数据库拆分环境!)

标签: ms-access ms-access-2007 vba


【解决方案1】:

1) 数据表表单只能绑定到 DAO 记录集对象或 ADO 记录集对象。您可以通过设置 RecordSource 将它们隐式绑定到 DAO 记录集对象,也可以在代码中手动执行,如 #2 所示。您只能使用代码绑定到 ADO 记录集,然后数据表的某些默认选项(如过滤和排序)将不起作用。

2) 我知道这过于简化了,但是...在表单的加载事件中:Set Me.Recordset = rs(rs 是您的记录集对象)

3) 您不能像在许多网格控件上那样循环插入行对象和数据的数据表。

4) 您可以使用 Microsoft 的 ActiveX 控件,例如 Grid 控件或 ListView 控件。

您可能实现此目的的一种方法是使用“制造的 ADO 记录集”,然后将表单绑定到该记录集。这将使用我在 #1 和 #2 中列出的选项。

在任何情况下,Access 数据表表单都不会像许多网格控件那样动态添加和配置足够的单元格/列来显示数据。这意味着您需要事先在表单上有足够的文本框,然后使用代码将它们绑定到 DAO 或 ADO 记录集中的字段。您不需要的任何列都必须使用代码隐藏。标签标题必须使用代码填写,以便它们成为正确的列标题。简而言之,虽然数据表视图实际上非常强大,但它根本不是网格控件。

如果您曾经使用过 .NET,那么创建一个可以为您提供所需内容的 AddIn 或 dll 可能会相当简单(尽管不是微不足道的)。唯一的问题是 .NET 的 DataGridView 不能绑定到 DAO 或 ADO 记录集,因此您必须编写代码来获取 DAO 或 ADO 记录集并将该记录集“转换”为 ADO.NET DataTable。或者,您可以编写这样的方式,以便您的 .NET 表单通过获取数据库和查询信息并使用它来检索所需数据来进行数据访问。

编辑1
为了响应您下面的 cmets,这里有一些示例代码。我认为您需要创建一个显式记录集对象,而您在下面的评论中没有这样做。

Option Compare Database
Option Explicit

Private Sub Form_Load()
    Dim db As DAO.Database
    Set db = OpenDatabase("E:\Access\Testdb.mdb")
    Dim rs As DAO.Recordset
    Set rs = db.OpenRecordset("Select * from tblMarket", dbOpenSnapshot)
    Set Me.Market1.Form.Recordset = rs
    Set rs = Nothing
End Sub

【讨论】:

  • 感谢您的宝贵时间!我通过设置 Recordset 厌倦了选项#2,它只显示 3 个空白行(表有 3 行!)而不显示数据。 ** 'Dim db As Dao.Database Set db = OpenDatabase("E:\Access\Testdb.mdb")** Set Me.Market1.Form.Recordset = db.OpenRecordset("Select * from tblMarket", dbOpenSnapshot)'
  • 您的文本框是否绑定到 tblMarket 中的字段?
  • 是的,我有两个文本框,其中控制源属性设置为 ID,MarketName。我需要设置其他属性吗?
  • 太棒了!完美运行!谢谢HK1。
猜你喜欢
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
  • 2018-12-07
相关资源
最近更新 更多