【发布时间】:2021-03-13 23:21:58
【问题描述】:
我有这个 VBA 代码,它在成功连接后发出 SQL Server 查询,但查询不返回任何记录(例如,-1)
Function invested_funds() As Integer
Dim c As ADODB.Connection
Dim rs As ADODB.Recordset
Dim connectionstring As String
Dim sql As String
connectionstring = "Provider=SQLOLEDB;Data Source=DESKTOP-2TTG3GQ\SQLEXPRESS;" & _
"Initial Catalog=DB;" & _
"Integrated Security=SSPI;"
Set c = New ADODB.Connection
Set rs = New ADODB.Recordset
c.Open connectionstring
sql = "select [DB].[dbo].[db].[CSRoot] " & _
"from [DB].[dbo].[db] "
If c.State = adStateOpen Then
Debug.Print ("Connected") 'This prints!
End If
Set rs = c.Execute(sql)
Debug.Print (rs.RecordCount)
invested_funds = CInt(rs.RecordCount)
End Function
但是,我知道记录存在,并且 SSMS 中完全相同的查询确实返回记录
select [DB].[dbo].[db].[CSRoot]
from [DB].[dbo].[db]
事实上有很多记录。
这怎么可能?
【问题讨论】:
-
不要依赖
RecordCount。尝试遍历记录集。 -
select [DB].[dbo].[db].[CSRoot] from [DB].[dbo].[db]与select CSRoot from [DB].[dbo].[db]不是同一个查询。第一个查询甚至不是有效的 t-sql 语法。更改您的 VBA 代码以使用第二个查询 -
@squillman 你是对的。那是我的一个错字。已编辑。感谢您指出。
-
我认为您编辑了问题的错误部分。
-
@Parfait 你完全正确!
RecordCount说 -1 但当我遍历集合时,我看到了我的记录。RecordCount不可靠是常识吗?随意将您的评论变成信用问题。
标签: sql-server excel vba