尝试使用ADODB记录集在VBA中处理RecordSet计数,但它似乎不能让计数正常工作。
我在具有唯一ID的工作表中记录了50条记录,其中一些已经存在于数据库中,而另一些则不存在,代码本身就是遍历每个单元格并获取其值单元格并通过SQL select语句运行它,如果有一个命中,那么说发现如果没有那么说什么。
不幸的是,似乎所有内容都会返回相同的结果,即使我知道的id也不存在。
代码吼叫
Sub NO6_ChequeCheck()
Dim con As ADODB.Connection
Dim rec As ADODB.Recordset
Set con = New ADODB.Connection
Set rec = New ADODB.Recordset
Dim sql As String
Dim client As String
Dim myRange As Range
Dim myCell As Range
Set myRange = Range("A2:A52")
Dim i As Integer
i = 2
With con
.Provider = "MSDASQL"
.ConnectionString = "DSN=localhostTest"
.Open
End With
For Each myCell In myRange
client = myCell.text
sql = "SELECT * FROM crm_client_cheques WHERE id = '" & client & "' "
rec.Open sql, con
If rec.RecordCount = 0 Then
Cells(i, "H").Value = "Nothing"
Else
Cells(i, "H").Value = "Found"
End If
rec.Close
i = i + 1
Next myCell
我遇到的主要问题是,如果我将该0切换为50并将其与=符号混淆并将其更改为<或者>然后结果将改变为任何一个,这导致我相信它不会重新记录记录,所以它只是每次堆叠所以它总是在每个循环中上升而不会回到0。
我试过告诉它关闭并且没有任何相同的东西,并且移动了各种代码,但没有任何帮助。
所有帮助appriciated
答案 0 :(得分:3)
您需要检查sql查询是否返回任何记录。你可以通过
来做到这一点 If Not (rec.BOF And rec.EOF) Then 'There are no records
Cells(i, "H").Value = "Nothing"
else
Cells(i, "H").Value = "Found"
End if