【问题标题】:Compile error after a function is returning a recordset函数返回记录集后编译错误
【发布时间】:2018-08-20 18:16:39
【问题描述】:

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

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 返回一个记录集,我可以这样做

Debug.Print getRelatedCustomers(entryId).RecordCount

它确实返回了正确的数字,但是在设置 RsCustomersDb = getRelatedCustomers(entryId) 之后它不会编译。我在这里想念什么?

【问题讨论】:

    标签: ms-access adodb recordset


    【解决方案1】:

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

    一般情况下,您不应在 VBA 中使用整数,除非您确实需要用于旧版 API 的整数。 long 可以存储更多,更快,并且在内存中具有相同的大小。阅读更多here

    【讨论】:

    • 谢谢,这是我的菜鸟错误。我解决了这个问题,但在声明 Dim i As Long 之后,它仍然给我.RecordCount 上的编译错误!但是你的提示让我走上了正确的轨道,我最终所做的就是按照这个线程link:dim rstCount as LongrstCount = CLng(rsCustomersDb.RecordCount) 中的建议强制转换 RecordCount 值。这个问题似乎与 ADO 和 64 位机器有关。
    猜你喜欢
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多