【发布时间】:2016-08-03 23:06:47
【问题描述】:
我正在开发一个 VBA 宏,它连接到我在 SQL Server 上的数据库并运行一些查询并将结果保存在 CSV 文件中......它在查询返回数据时工作正常,但我有几天查询没有t 返回任何结果,只是一个空表。我根据检查日期做了一个临时解决方案,并根据它宏运行该查询或不运行该查询...我现在想在我的代码中以其他方式进行操作,这样我就不需要每次手动更改日期...
我尝试了这些解决方案:
If (objMyRecordset.EOF = False) Or (objMyRecordset.BOF = False) Then
还有这个
If objMyRecordset.RecordCount <> 0 Then
但问题是我的 Recordset 是空的,因为查询没有返回任何行,所以它在 objMyRecordset.Open 中显示错误
例如,我想添加一行这样的代码:
'// Pseudo Code
If (the query doesn't return result) Then
( just the headers will be save on my file )
Else
(do the rest of my code)
End If
这是我的代码。请问有什么建议吗?非常感谢。
Sub Load_after_cutoff_queryCSV()
Dim objMyConn As ADODB.Connection
Dim objMyCmd As ADODB.Command
Dim objMyRecordset As ADODB.Recordset
Dim fields As String
Dim i As Integer
Set objMyConn = New ADODB.Connection
Set objMyCmd = New ADODB.Command
Set objMyRecordset = New ADODB.Recordset
'Open Connection
objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=*****;User ID=*****;Password=*****;"
objMyConn.Open
'Set and Excecute SQL Command
Set objMyCmd.ActiveConnection = objMyConn
objMyCmd.CommandText = "SELECT * FROM [vw_X86_LOAD_AFTER_CUTOFF_REPORT_GAMMA]"
objMyCmd.CommandType = adCmdText
'Open Recordset
Set objMyRecordset.Source = objMyCmd
objMyRecordset.Open
Workbooks.Open Filename:="C:\Reports\load_after_cutoff_postGamma.csv"
Workbooks("load_after_cutoff_postGamma.csv").Sheets("load_after_cutoff_postGamma").Activate
ActiveSheet.Range("A2").CopyFromRecordset objMyRecordset
For i = 0 To objMyRecordset.fields.Count - 1
Worksheets("load_after_cutoff_postGamma").Cells(1, i + 1) = objMyRecordset.fields(i).name
Next i
Workbooks("load_after_cutoff_postGamma.csv").Sheets("load_after_cutoff_postGamma").Cells.EntireColumn.AutoFit
Workbooks("load_after_cutoff_postGamma.csv").Close SaveChanges:=True
MsgBox "Your file has been saved as load_after_cutoff_postGamma.csv"
【问题讨论】:
-
即使查询结果为空记录集,您也应该能够毫无问题地执行和运行查询。因此,如果命令
.Open导致错误,那么问题一定是其他问题。另外,您介意在服务器的帖子中添加适当的标签吗(sql-2008r2、sql-2012 或其他)。