Access为子窗体设置数据源

设有一个数据库Db,其有窗体frm,表tbl,
frm中有一个子窗体控件chd;
******************************************************************以上是前置条件
LZ已尝试在frm的【打开】事件中对一个DAO.Recordset对象的数据源设置为tbl的内容,形式如下
Dim SQL as String
SQL="SELECT * FROM tbl"

Dim rs as DAO.Recordset
Set rs=CurrentDb.OpenRecordset(SQL,dbopendynaset)

求解:如何将子窗体chd的数据源设置为这个rs的数据?因为考虑到动态灵活和数据安全,不愿意将chd直接和tbl绑定。

Dim SQL as String
SQL="SELECT * FROM tbl"
Dim rs as DAO.Recordset
Set rs=CurrentDb.OpenRecordset(SQL,dbopendynaset)
'补上后面这行代码即可将记录集与窗体绑定
Set Me.chn.Form.Recordset=rs


其实DAO已经非常古老了。如果用下面的的代码将数据表与子窗体绑定将会更简便有效:

Private Sub Form_Open(Cancel As Integer)
Me.chn.Form.RecordSource = "SELECT * FROM tbl"
End Sub

追问

3Q,目前只看到了DAO


但是,再请教一下:为毛还是报错啊,如图

追答

我给出的代码,已经测试过了。没问题的。
出错的原因有很多种可能,请将你出错的完整代码贴出来,我全面检查一下,如果有窗体的设计视图截图会更好一些。从表面上看可能是,控件名引用错误,例如,子窗体名称不正确等

追问

就是一个自己想到的问题 - 如果的神得空,可否用ADO示范一下,我追加分哦~

追答

因为子窗体未绑定任何“源对象”,运行我的代码当然会报错。

问题可以这样解决

先创建一个窗体,取名ChldTest,里面添加相应数量的非绑定文本框(我加了3个非绑定文本框Text0,Text2,Text4),窗体数据源为空白,窗体默认视图为“数据表”。这个窗体将作为你的子窗体的“源对象” 具体见图

假设数据表“ABC” 有3个字段分别为A ,B,C

为你的主窗体添加下了打开事件过程即可

Private Sub Form_Open(Cancel As Integer)
    With Me.Child0
        .SourceObject = "Form.ChldTest"   ‘使用某个窗体作为子窗体的源对象
        .Form!Text0.ControlSource = "A"    ’绑定字段
        .Form!Text2.ControlSource = "B"
        .Form!Text4.ControlSource = "C"
        .Form.RecordSource = "select * from ABC"  '绑定记录集
    End With
End Sub

当然如果使用数据表或预置的查询作为子窗体的源对象将会更加方便(无需设计子窗体),例如:

Private Sub Form_Open(Cancel As Integer)
    With Me.Child0
        .SourceObject = "Table.ABC"  '使用表作为子窗体的源对象
    End With
End Sub

又或者预置一个查询1(select * from Tbl)

Private Sub Form_Open(Cancel As Integer)
    With Me.Child0
        .SourceObject = "Query.查询1"  '使用查询作为子窗体的源对象
    End With
End Sub

 至于ADO动态生成记录集(事先不知道要使用什么表、什么字段)然后将记录集与子窗体绑定(方法类似VB将DataGrid、MSHFLEXGRID控件与记录集绑定),它需要编写大把大把的代码,不是百度分就可以打发的!事实上这种解决方案,是可以开发成第三方控件,做商业销售的。有兴趣的话自己研究吧,技术上完全可行我这里就不提供了。

温馨提示:答案为网友推荐,仅供参考
相似回答