我无法解决这个问题,我在SQL Server管理中运行语句并返回所有记录集,但是当我通过代码运行完全相同的语句时,它总是只返回第一个数据集。
我在SQL Fiddle中尝试了相同的简单SELECT
语句,它的工作方式应该是什么,可能是什么原因?
以下是展示我要做的事情的SQL Fiddle
SELECT column1, column2
FROM Table1
WHERE column2 = '1234';
数据的外观,
|column1(nvarchar(50)) | column2(nvarchar(50))|
-----------------------------------------------
|Section1 | 1234 |
|Section2 | 1234 |
|Section3 | 1234 |
|Section3 | 1234 |
-----------------------------------------------
运行代码后它的结束方式。
|column1(nvarchar(50)) | column2(nvarchar(50))|
-----------------------------------------------
|Section1 | 1234 |
-----------------------------------------------
我正在使用的代码。
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sConnString As String
sConnString = "PROVIDER=SQLOLEDB;" & _
"Data Source=190.190.10.XXX,1433;" & _
"Initial Catalog=my_DB;" & _
"User Id=sa;" & _
"Password=my_Password;"
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.Open sConnString
strSQL = "SELECT Section_Data, Words_Data FROM Words_TBL WHERE Words_Data = '1234'"
rs.Open strSQL
If rs.EOF = False Then
x = rs.GetRows
Else
For i = LBound(x) To UBound(x)
Debug.Print x(i, 0)
Next i
答案 0 :(得分:1)
使用GetRows方法将Recordset中的记录复制到 二维数组。 第一个下标标识字段和 第二个标识记录号。数组变量是 在GetRows方法时自动标注大小为正确的大小 返回数据。
For i = LBound(x) To UBound(x)
Debug.Print x(i, 0)
Next i
应该是
For i = LBound(x, 2) To UBound(x, 2)
Debug.Print x(0, i)
Next i
答案 1 :(得分:0)
我会使用CopyFromRecordset方法将所有数据复制到一个范围。更快,但你需要首先遍历所有字段名称以创建标题。