vba - 尝试通过从设计器中的 ControlSource 调用函数来填充 Access ContinuousForm 中的 ComboBox(每行不同的记录集)
问题描述
我试图通过调用 Combo Cox 设计器中数据选项卡的控制源字段中的函数来填充连续表单上的组合框。根据传递给每个函数调用的不同参数,每行上的每个组合框都将具有不同的记录集。
问题是它没有填充组合框。
在设计器中:
=LaterRevisions([DocumentCode],[LadRevision],[LadId])
功能:
(注意我已经在函数定义中注释掉了返回类型,因为它甚至没有执行函数!?(不会在函数体中触发断点))
Public Function LaterRevisions (DocumentCode As String, LadRevision As String, LadId As Integer) 'As ADODB.Recordset
On Error GoTo ErrHandler
Dim Record As Variant
Dim dbs As Object
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim qdf As QueryDef
Dim sql As String
Set dbs = CurrentDb()
Set qdf = dbs.QueryDefs("qryLaterRevisionsByRow")
sql = qdf.sql
Set cmd = New ADODB.Command
With cmd
.ActiveConnection = CurrentProject.Connection
.CommandText = sql
With .Parameters("DocumentCode")
.Type = adVarChar
.Value = DocumentCode
End With
With .Parameters("LadRevision")
.Type = adVarChar
.Value = LadRevision
End With
With .Parameters("LadId")
.Type = adInteger
.Value = LadId
End With
End With
cmd.Execute
Set rs = New ADODB.Recordset
With rs
.CursorLocation = adUseServer
.Open cmd, , adOpenForwardOnly, adLockReadOnly
End With
If Not rs.BOF And Not rs.EOF Then
Debug.Print rs.RecordCount ' does get records
'Set Me.[cboLatestrevision].Recordset = rs ' will set this recordset (but sets all rows to the same in continuous form)
Set LaterRevisions = rs ' function returns individual recordset for each row, but doesn't populate the combo
End If
ExitHandler:
Exit Function
ErrHandler:
' handle error
Resume ExitHandler
End Function
尽管在单步执行代码时,它清楚地显示了正在填充的记录集,并且当从 Form_Load 事件调用函数时,它填充了一个记录集(因此该函数返回一个)(参见下面的测试代码),它不会填充 Combo盒子。
Private Sub Form_Load()
Dim myVar As ADODB.Recordset
Set myVar = LaterRevisions("XXX", "YYY", 999)
For myI = 1 To myVar.RecordCount
Debug.Print myVar.Fields("LatestRevision") ' prints correct values
myVar.MoveNext
Next myI
End Sub
保存的查询(qryLaterRevisionsByRow):
PARAMETERS DocumentCode Text ( 255 ), LadRevision Text ( 255 ), LadId Long;
SELECT tblLaterRevisions.LatestRevision
FROM tblLaterRevisions
WHERE (((tblLaterRevisions.LatestRevision)>[LadRevision]) AND ((tblLaterRevisions.DocumentCode)=[DocumentCode]) AND ((tblLaterRevisions.LadId)=[LadId]));
我有这些参考资料:
我正在使用 Windows 7 企业版,MS Access 2010
解决方案
推荐阅读
- java - 如何从 Java 中的 consol 应用程序获取实时输出
- powerbi - 如何根据 ID 列和项目列划分同一列中的值?
- javascript - 如何在单个组件中访问事件处理程序中的相邻道具
- c++ - FindResource 按名称查找资源失败
- scikit-learn - GridSearchCV 估计器 LogisticRegression 的参数 gamma 无效
- c++ - 在课堂上使用 fstream 的问题
- php - PHP exec() 不返回任何内容
- c# - 如何重新设计我的 C# 应用程序以避免构造函数注入过载?
- java - 尝试从 XML 创建 POJO 时获取不受支持的媒体类型
- java - 这两个代码是等价的吗?