我正在使用Access 2007作为原型应用程序。我有一个两个数据库testUi.accdb(
包含我的所有表单)和testDb.mdb(包含我的数据库)。 现在我想在我的一个子表单中使用数据表。 有人可以帮我解决这些问题吗?
答案 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