Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 函数返回记录集后发生编译错误_Ms Access_Adodb_Recordset - Fatal编程技术网

Ms access 函数返回记录集后发生编译错误

Ms access 函数返回记录集后发生编译错误,ms-access,adodb,recordset,Ms Access,Adodb,Recordset,我想我有一个相当简单的问题,因为我只是在学习访问,但在论坛上找不到任何解决方案。在我的代码中,有一个函数返回一个记录集,它做得很好,但当我设置指向该记录集的指针时,它并没有指向。我的文件中的相关代码如下: Private Sub Form_Open(Cancel As Integer) EntryId = Forms.Item("fCustlist").Recordset.Fields("Custlist_Entry_Id") setCustomersRecordset setFormElem

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

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

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

ADODB recordcount属性是一个很长的属性。您应该使用
Dim i作为Long
,而不是
Dim i作为Integer


通常,不应该在VBA中使用整数,除非您确实需要一个整数用于遗留API。长内存可以存储更多、更快、大小相同的内存。阅读更多。

谢谢,我犯了一个新手错误。我修复了这个问题,但是在声明
Dim I As Long
之后,它仍然给了我.RecordCount上的编译错误!但是你的提示让我走上了正确的轨道,我最终按照此线程中的建议对RecordCount值进行了转换:
dim rstCount as Long
rstCount=CLng(rsCustomersDb.RecordCount)
问题似乎与ADO和64位机器有关。
Debug.Print getRelatedCustomers(entryId).RecordCount