[英]Executing SQL query from VBA run-time error 3704
我正在嘗試在 VBA 中運行以下 SQL,但我收到“當 object 關閉時不允許操作”運行時錯誤。
這個 SQL 腳本在 SSMS 中工作,所以它一定是我在 VBA 中缺少的東西(這不是我的強項。)。
如果有人知道我哪里出錯了,將不勝感激。
Set Conn = CreateObject("ADODB.Connection")
Set recset = CreateObject("ADODB.Recordset")
'set parameters
ServerSource = Sheets("Servers + Databases").Range("F27").Value 'choose the server the database is located
Year = Sheets("Region").Range("C4").Value 'choose the year
Period = Sheets("Region").Range("C5").Value 'choose the period
'insert server name and database name
sConnect = "Provider=SQLOLEDB.1;" & _
"Password=ExcelRep0rt;" & _
"User ID=ExcelReport;" & _
"Data Source=" & ServerSource & ";" & _
"Use Encryption for Data=False"
Conn.Open sConnect
'SQL query
SQLQry = " DECLARE @table table(dbname sysname COLLATE Latin1_General_CI_AS)" & _
" INSERT INTO @table(dbname)" & _
" SELECT NAME COLLATE Latin1_General_CI_AS FROM sys.databases where name like '%AccountsLive'" & _
" DECLARE @Sql NVARCHAR(MAX) = NULL;" & _
" SELECT @Sql = COALESCE(@Sql + ' UNION ALL ' + CHAR(13) + CHAR(10), '' ) +" & _
" 'SELECT ST_ALOC_POINTER COLLATE DATABASE_DEFAULT AS ''Cust_Code'', ST_TRANTYPE COLLATE DATABASE_DEFAULT AS ''Transaction'', ST_HEADER_REF COLLATE DATABASE_DEFAULT AS ''Reference'', ST_GROSS AS ''Local_Gross'', ST_CURRENCYCODE COLLATE DATABASE_DEFAULT AS ''Currency'', ST_CURR_VALU AS ''Foreign_Gross'', ST_DESCRIPTION COLLATE DATABASE_DEFAULT AS ''Description'' FROM '" & _
" + QUOTENAME(dbname) COLLATE Latin1_General_CI_AS + '.dbo.SL_TRANSACTIONS" & _
" WHERE ST_YEAR = '' & Year & ''" & _
" and ST_PERIODNUMBER = '' & Period & ''" & _
" and ST_ALOC_POINTER like ''%LC%''" & _
" and ST_GROSS <> ''0''" & _
" and ST_TRANTYPE <> ''INV''" & _
" and ST_TRANTYPE <> ''CRN''" & _
" Union ALL" & _
" SELECT ST_ALOC_POINTER COLLATE DATABASE_DEFAULT AS ''Cust_Code'', ST_TRANTYPE COLLATE DATABASE_DEFAULT AS ''Transaction'', ST_HEADER_REF COLLATE DATABASE_DEFAULT AS ''Reference'', ST_GROSS AS ''Local_Gross'', ST_CURRENCYCODE COLLATE DATABASE_DEFAULT AS ''Currency'', ST_CURR_VALU AS ''Foreign_Gross'', ST_DESCRIPTION COLLATE DATABASE_DEFAULT AS ''Description'' FROM '" & _
" + QUOTENAME(dbname) COLLATE Latin1_General_CI_AS + '.dbo.SL_TRANSACTIONS" & _
" WHERE ST_YEAR = '' & Year & ''" & _
" and ST_PERIODNUMBER = '' & Period & ''" & _
" and ST_ALOC_POINTER like ''%CR%''" & _
" and ST_GROSS <> ''0''" & _
" and ST_TRANTYPE <> ''INV''" & _
" and ST_TRANTYPE <> ''CRN'''" & _
" FROM @table" & _
" EXEC( @Sql );"
'import table - choose range of where to put the table
Set recset = New ADODB.Recordset
recset.Open SQLQry, Conn
Range("B10").CopyFromRecordset recset
recset.Close
Conn.Close
Set recset = Nothing
在@QHarr 的幫助下,在 SQL 的開頭添加SET NOCOUNT ON
解決了這個特殊問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.