У меня есть SQL, который я могу использовать в Excel 2013, чтобы получить информацию из базы данных Access, и он работает с использованием SQL непосредственно в соединении, но теперь я хочу запустить его из VBA, чтобы я мог использовать некоторые переменные в SQL.
Я нашел эту ссылку, изменил ее, и она работает на некоторых более простых операторах SQL, но не на других.
выполнить SQL запрос с VBA и заполнить лист с данными
Я получаю ошибку:
Выполнить Времени ошибка -2147217883 (80040e25) подряд ручки всех должны быть освобождены, прежде чем новые могут быть получены.
Я много искал по этой ошибке и пробовал разные вещи, но, очевидно, не понимаю. Я знаю, что SQL-длинный/сложный, но он работает в Access и Excel напрямую.
текущий код:
Sub Get_SQLData()
'modified from from /q/execute-sql-query-with-vba-and-fill-sheet-with-data-66862/"C:mydb.accdb"
strCon = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & strFile
Set cn = CreateObject("ADODB.Connection")
cn.Open strCon
'JAJ set my SQL RAW first
strSQL = "SELECT RAWDATA_Incidents.ID, RAWDATA_Incidents.[Incident Number], RAWDATA_Incidents.[Categorization Tier 1], RAWDATA_Incidents.[Categorization Tier 2], RAWDATA_Incidents.[Categorization Tier 3], RAWDATA_Incidents.Priority, RAWDATA_Incidents.Urgency, RAWDATA_Incidents.Impact, RAWDATA_Incidents.[Reported Date], RAWDATA_Incidents.[Service Type], RAWDATA_Incidents.[Closure Product Category Tier1], RAWDATA_Incidents.[Closure Product Category Tier2], RAWDATA_Incidents.[Closure Product Category Tier3], ClosureProductName.ClosureProductName, RAWDATA_Incidents.Status, RAWDATA_Incidents.[Closed Date], RAWDATA_Incidents.[Product Name], OpsCatTreeFaultMode.FaultMode, BusinessService.MMServiceID, ([RAWDATA_Incidents]![Closed Date]-[RAWDATA_Incidents]![Reported Date])*1440 AS Expr2, IIf([RAWDATA_Incidents]![Priority]='Critical' Or [RAWDATA_Incidents]![Priority]='High',788,394) AS Expr3, BusinessService.Name, BSDependsOnAC.MMServiceID, CI.CIName, AccessChannel.Name, BusinessService.ID " _
& "FROM OpsCatTreeFaultMode INNER JOIN (RAWDATA_Incidents INNER JOIN (CI INNER JOIN ((ITSystemService INNER JOIN (BusinessService INNER JOIN ((AccessChannel INNER JOIN ACDependsOnITSS ON AccessChannel.ACID = ACDependsOnITSS.ACID.Value) INNER JOIN BSDependsOnAC ON AccessChannel.ACID = BSDependsOnAC.ACID.Value) ON BusinessService.ID = BSDependsOnAC.MMServiceID.Value) ON (ITSystemService.ITSSID = ACDependsOnITSS.ITSSID.Value) AND (ITSystemService.ITSSID = ACDependsOnITSS.ITSSID.Value)) INNER JOIN ClosureProductName ON ITSystemService.ITSSID = ClosureProductName.ITSS.Value) ON CI.CIID = ITSystemService.CIID) ON RAWDATA_Incidents.[Closure Product Name] = ClosureProductName.ClosureProductName) ON OpsCatTreeFaultMode.OpsCatTreeName = RAWDATA_Incidents.[Categorization Tier 3]"
Set rs = CreateObject("ADODB.RECORDSET")
rs.activeconnection = cn
rs.Open strSQL
Sheet1.Range("A1").CopyFromRecordset rs ' fails here - gives handles error.
rs.Close
cn.Close
Set cn = Nothing
End Sub
любая помощь будет оценили.