使用VBA代码绑定或操纵Access数据表

时间:2012-10-18 04:13:53

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

我正在使用Access 2007作为原型应用程序。我有一个两个数据库testUi.accdb(

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

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

1 个答案:

答案 0 :(得分:2)

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

2)我知道这个过于简化但是...在表单的加载事件:设置Me.Recordset = rs(rs是你的记录集对象)

3)您无法在许多网格控件上循环插入行对象和数据的数据表。

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

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

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

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

<强> EDIT1
回应下面的评论,这里是一些示例代码。我认为你需要创建一个显式的记录集对象,你在下面的评论中没有这样做。

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