sql-server - 将 sql 输出存储在 vba 变量中
问题描述
我有一个 sql 查询,我想将它存储在一个 vba 变量中,然后获取输出的行数。
我有以下内容:
Dim PortInfo As Variant
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim ConnectionString As String
Dim lStr As String
Dim LastRow As Long
strServer = "DB-01"
ConnectionString = "Provider=SQLOLEDB;Data Source=" & strServer & ";" & _
"Integrated Security=SSPI;"
cnn.Open ConnectionString
lStr = "SELECT [PORTINFOID],[PORTNAME] FROM [a].[dbo].[portinfo]"
rst.Open lStr, cnn
If Not rst.EOF And Not rst.BOF Then
For i = 0 To rst.Fields.Count - 1
PortInfo = PortInfo & rst.Fields(i).name & vbTab
Next
Do Until rst.EOF
For i = 0 To rst.Fields.Count - 1
PortInfo = PortInfo & rst.Fields(i) & vbTab
Next
rst.MoveNext
Loop
End If
rst.Close
MsgBox PortInfo
LastRow = ???
通过以上,我得到以下信息:
首先,我不确定PortInfo
变量是否应该是Variant
. 如果应该是,我怎样才能让输出以列/行的方式出现,以便我可以获得结果表的行数。
解决方案
一些建议:
PortInfo
变量可以是类型String
。- 在连接字符串中使用服务器名称时,该
strServer
变量已过时。 - 数据库也可以是连接字符串的一部分。
vbTab
用作列分隔符时,用作vbCrLf
行分隔符。- 要计算行数,只需增加
LastRow
每条记录的变量。 - 声明变量时不要使用
New
,因为这些无法清除。 - 最后清除对象变量。
- 在每个模块中使用
Option Explicit
来强制自己声明所有变量(如i
)。
例如,代码可能如下所示:
Dim PortInfo As String
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim ConnectionString As String
Dim lStr As String
Dim LastRow As Long
Dim i As Integer
ConnectionString = "Provider=SQLOLEDB;Data Source=DB-01;" & _
"Initial Catalog=a;Integrated Security=SSPI;"
lStr = "SELECT [PORTINFOID],[PORTNAME] FROM [dbo].[portinfo]"
Set cnn = New ADODB.Connection
cnn.Open ConnectionString
Set rst = New ADODB.Recordset
rst.Open lStr, cnn
With rst
If Not .EOF And Not .BOF Then
For i = 0 To .Fields.Count - 1
PortInfo = PortInfo & .Fields(i).Name
If i < .Fields.Count - 1 Then
PortInfo = PortInfo & vbTab
Else
PortInfo = PortInfo & vbCrLf
End If
Next
End If
Do Until .EOF
LastRow = LastRow + 1
For i = 0 To .Fields.Count - 1
PortInfo = PortInfo & .Fields(i)
If i < .Fields.Count - 1 Then
PortInfo = PortInfo & vbTab
Else
PortInfo = PortInfo & vbCrLf
End If
Next
rst.MoveNext
Loop
End With
rst.Close
Set rst = Nothing
cnn.Close
Set cnn = Nothing
MsgBox PortInfo
MsgBox "This have been " & LastRow & " records.", vbInformation, "I'm done."
推荐阅读
- awk - 递归文件包括
- html - 网站 CSS 动画闪烁的问题
- reactjs - 在 React 中获得了单击按钮的 id,但随后想在 if 中使用该 id
- r - 如何在搜索表单上找到 html_node?
- kotlin - 来自 recyclerview 的 Kotlin 意图 onclick。holder.title.context 上的错误
- python - 当我附加标签 tf.function 时,Tensorflow while_loop 抛出错误
- woocommerce - WooCommerce 问题,部分订单已付款但仍处于“待处理订单”状态
- spring - 如何在 Spring Boot 中为 Quartz 表使用自定义表名
- css - CSS网格输入大小增加
- github - 在 wiki 编辑上触发 Github 操作?