我使用查询生成器对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
答案 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