Access子窗体不显示ado记录集

时间:2014-02-10 16:16:34

标签: vba access-vba ado recordset subform

我正在尝试在数据表视图中的access07子窗体中显示ADO记录集。只是一个快照,只读。连接成功,记录集包含数据,但是,当我设置子表单记录集时,不显示任何字段。子窗体显示一个垂直滚动条,当滚动到底部时,它表示正确的记录数,但它没有显示,没有字段,没有列。

这一点非常简单,我很想念。有什么想法吗?

编辑: 以下是建立记录集的代码摘要。

Set cn = New ADODB.Connection
Set rsADO = New ADODB.Recordset

dbBackend = "C:\Users\Me\Desktop\TEST_Db_Backend.accdb"
sqlStr = "SELECT * FROM tblMaster;"
    strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbBackend & ";User Id=;Password=;"

    cn.CursorLocation = adUseClient
    cn.ConnectionString = strConnect
    cn.Open
    If cn.State = adStateOpen Then
        rsADO.Open sqlStr, cn, adOpenStatic, adLockReadOnly
End If

    Set Me.PreviewPane.Form.Recordset = rsADO

rsADO.Close
cn.Close
Set rsADO = Nothing
Set cn = Nothing

1 个答案:

答案 0 :(得分:5)

经过几个小时的劳动,我有一个可接受的解决方案,虽然不是我原本想要的。这是我的答案,我能说的最好......

ADO记录集不能直接绑定到数据表视图中的表单(或子表单),而且表单没有控件将记录集中的字段绑定到。我已经看到了相反意见的资源,但是我正在做的事情我不能让它发挥作用。

要解决此问题,我在设计视图中将文本框(带标签)添加到子表单的源对象表单中。添加的文本框数量是我愿意在子表单中显示的最大记录集字段数,因为我的记录集将具有可变数量的字段,我需要动态地将这些文本框分配给它们。

我使用原始帖子中的代码创建了记录集,然后循环遍历表单的控件以将它们分配给记录集。这是循环:

Const prevMax As Long = 25
Dim r As Long, rMax As Long
Dim ctrl As Object

    rMax = rsADO.Fields.Count - 1
    If rMax > prevMax Then rMax = prevMax
    r = 0
    For Each ctrl In Me.PreviewPane.Form.Controls
        If ctrl.ControlType = acTextBox Then
            If r <= rMax Then
                ctrl.ControlSource = rsADO.Fields(r).Name
                ctrl.Controls(0).Caption = rsADO.Fields(r).Name
                r = r + 1
            Else
                Me.PreviewPane.Form.Controls(ctrl.Name).ColumnHidden = True
            End If
        End If
    Next ctrl

它将每个文本框的ControlSource更改为相应的记录集字段,更改标签标题以匹配记录集字段名(在子表单中添加我想要的列名),并隐藏将出现在数据表视图中的其余文本框列。只要源对象表单的默认视图设置为datasheet,它就应该在子表单中显示记录集(在最大值内)。