函数返回记录集后出现编译错误

Compile error after a function is returning a recordset

我想我有一个相当简单的问题,因为我只是在学习 Access,但无法从论坛中找到任何解决方案。在我的代码中有一个函数正在 returning 一个记录集并且它做得很好,但是当我设置一个指向该记录集的指针时它没有指向。我文件中的相关代码如下:

Private Sub Form_Open(Cancel As Integer)

EntryId = Forms.Item("fCustlist").Recordset.Fields("Custlist_Entry_Id")
setCustomersRecordset
setFormElements

End Sub

Private Sub setCustomersRecordset()
Dim rsCustomersDb As ADODB.Recordset
Dim i As Integer

Set rsCustomersDb = getRelatedCustomers(EntryId)

For i = 1 To rsCustomersDb.RecordCount '<--COMPILE ERROR: Type mismatch
'.....
Next i

End Sub

Public Function getRelatedCustomers(EntryId As Long) As ADODB.Recordset
Dim sql As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

sql = "SELECT blah blah blah"

Set cn = CurrentProject.AccessConnection
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open sql, cn, , adLockReadOnly

Set getRelatedCustomers = rs
End Function

我正在使用 getRelatedCustomers return 记录集,我可以

Debug.Print getRelatedCustomers(entryId).RecordCount

return 正确的数字,但在设置 RsCustomersDb = getRelatedCustomers(entryId) 后它不编译。我在这里错过了什么?

ADODB 记录数 属性 很长。您应该使用 Dim i As Long,而不是 Dim i As Integer

通常,您不应在 VBA 中使用整数,除非您确实需要遗留 API 的整数。 long 可以存储更多,速度更快,并且在内存中大小相等。阅读更多 here.