查询 SQL Table 并将结果存储在数组中
Query SQL Table And Store Results In Array
我想查询 SQL 服务器 Table 并将该查询的结果存储在一个数组中。我只从一个字段返回 Distinct()
,所以它应该非常简单。我的语法产生错误
Invalid Qualifier
在这行代码 Set r = conn.Execute
中突出显示了单词 conn
我应该如何重写此语法以仍然使用 ADO
但能够成功 运行 这个程序?
Public Function ReturnData()
Dim c As ADODB.Connection
Dim r As ADODB.Recordset
Dim f As ADODB.Field
Dim conn As String
Dim arrResults() As Variant
Set c = New ADODB.Connection
With c
.Provider = "sqloledb.1"
With .Properties
.Item("Data Source") = "ServerName"
.Item("Initial Catalog") = "Database"
.Item("PassWord") = "password"
.Item("User ID") = "user"
End With
.Open
Set r = conn.Execute("SELECT Distinct(Name) from registered where cancelled IS NULL;")
i = 0
r.MoveFirst
Do Until rst.EOF
arrResults(i) = rst.Fields(0)
i = i + 1
Loop
rst.Close
Set rst = Nothing
c.Close
End Function
你知道 conn 是一个字符串,c 是一个连接 - 你能做到吗 c.execute
尝试
Set r = c.Execute(...
我不确定您是否需要命令对象,如果需要,请参阅
https://msdn.microsoft.com/en-us/library/ms675065%28v=vs.85%29.aspx
查看如何为您的连接创建命令并执行它
无论如何,目前您正在尝试 'execute' 字符串 - 字符串是原始类型并且不会在数据库上执行 - 我认为您只是混合了 c 和 conn - 让我们知道如何它去
另一种将记录集放入数组的方法是使用 Split
和 Recordset.GetString
。它无论如何都避免了循环。这是一个例子。
Public Sub RsToArray()
Dim adoCon As ADODB.Connection
Dim adoRs As ADODB.Recordset
Dim vaLocations As Variant
Set adoCon = New ADODB.Connection
adoCon.Open sConn
Set adoRs = adoCon.Execute("SELECT DISTINCT LocationName FROM Locations")
vaLocations = Split(adoRs.GetString, vbCr)
Debug.Print Join(vaLocations, "|")
adoRs.Close
adoCon.Close
Set adoRs = Nothing
Set adoCon = Nothing
End Sub
我想查询 SQL 服务器 Table 并将该查询的结果存储在一个数组中。我只从一个字段返回 Distinct()
,所以它应该非常简单。我的语法产生错误
Invalid Qualifier
在这行代码 Set r = conn.Execute
中突出显示了单词 conn
我应该如何重写此语法以仍然使用 ADO
但能够成功 运行 这个程序?
Public Function ReturnData()
Dim c As ADODB.Connection
Dim r As ADODB.Recordset
Dim f As ADODB.Field
Dim conn As String
Dim arrResults() As Variant
Set c = New ADODB.Connection
With c
.Provider = "sqloledb.1"
With .Properties
.Item("Data Source") = "ServerName"
.Item("Initial Catalog") = "Database"
.Item("PassWord") = "password"
.Item("User ID") = "user"
End With
.Open
Set r = conn.Execute("SELECT Distinct(Name) from registered where cancelled IS NULL;")
i = 0
r.MoveFirst
Do Until rst.EOF
arrResults(i) = rst.Fields(0)
i = i + 1
Loop
rst.Close
Set rst = Nothing
c.Close
End Function
你知道 conn 是一个字符串,c 是一个连接 - 你能做到吗 c.execute
尝试
Set r = c.Execute(...
我不确定您是否需要命令对象,如果需要,请参阅
https://msdn.microsoft.com/en-us/library/ms675065%28v=vs.85%29.aspx
查看如何为您的连接创建命令并执行它
无论如何,目前您正在尝试 'execute' 字符串 - 字符串是原始类型并且不会在数据库上执行 - 我认为您只是混合了 c 和 conn - 让我们知道如何它去
另一种将记录集放入数组的方法是使用 Split
和 Recordset.GetString
。它无论如何都避免了循环。这是一个例子。
Public Sub RsToArray()
Dim adoCon As ADODB.Connection
Dim adoRs As ADODB.Recordset
Dim vaLocations As Variant
Set adoCon = New ADODB.Connection
adoCon.Open sConn
Set adoRs = adoCon.Execute("SELECT DISTINCT LocationName FROM Locations")
vaLocations = Split(adoRs.GetString, vbCr)
Debug.Print Join(vaLocations, "|")
adoRs.Close
adoCon.Close
Set adoRs = Nothing
Set adoCon = Nothing
End Sub