当我使用VBA从Access调用查询时,我不知道该查询中有多少条记录。为什么?

时间:2015-10-07 17:21:59

标签: vba excel-vba ms-access access-vba excel

我使用查询生成器对MS Access 2010进行了查询,现在我从VBA调用它。但是当我尝试使用recordcount来知道此查询中有多少条记录时,结果为-1。

代码:

<VirtualHost *:80>
ServerName mysite.local
ServerAlias www.mysite.local
DocumentRoot /home/kolya/workspace/mysite/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

2 个答案:

答案 0 :(得分:2)

RecordCount很棘手。根据提供程序,数据源类型和选项,它可能不可靠。

对于ADO记录集,您更有可能使用客户端游标获得可靠的RecordCount

Set DB = New ADODB.Connection
DB.CursorLocation = adUseClient '<- add this
DB.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DB_Dir & ";Persist Security Info=False"

我认为你的程序 consulta 参数是一个SQL语句。如果这是正确的,请为CommandType使用 adCmdText (而不是 adCmdStoredProc ):

Set Query = New ADODB.Command
'Set Query.ActiveConnection = DB ' Set not needed here ...
Query.ActiveConnection = DB
Query.CommandText = consulta
'Query.CommandType = adCmdStoredProc
Query.CommandType = adCmdText

如果这些更改不足以让您获得可靠的RecordCount,请使用MoveLast确保记录集已完全填充,然后才会要求RecordCount

Set RST = Query.Execute
RST.MoveLast
MsgBox "RecordCount: " & RST.RecordCount

如果您需要将记录集指针放在第一行以准备剩余的操作,请稍后添加RST.MoveFirst

答案 1 :(得分:0)

当我以前计算记录时遇到问题时,问题在于记录集的打开方式,而不是连接。 cursor type需要保持静态才能正常工作。这可能与HansUp所引用的连接对象中的游标位置非常相似。

rec.Open querystr, con, 3
rec.movelast
cnt = rec.RecordCount
rec.movefirst