我正在尝试在数据表视图中的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
答案 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,它就应该在子表单中显示记录集(在最大值内)。