我正在处理一个VBA宏,它连接到我在SQL Server上的数据库并运行一些查询并将结果保存在CSV文件中......它在查询返回数据时正常工作但我有几天查询不返回任何结果,只是一个空表。我做了一个基于检查日期的临时解决方案,并根据它的宏运行该查询或不...我想使它现在在我的代码中的其他方式,以便我不需要每次手动更改日期...VBA宏在csv文件中保存SQL查询
我尝试这些解决方案:
If (objMyRecordset.EOF = False) Or (objMyRecordset.BOF = False) Then
而且这个
If objMyRecordset.RecordCount <> 0 Then
但问题是,我的记录是空的,因为查询不返回任何行,所以它让我错误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,或其他)。 – Ralph