2016-11-23 56 views
0

我试图建立Excel和SQL之间的链接,但是运行VBA代码时出现以下错误消息“命令文本未设置为命令对象”。我对VBA很陌生,有谁能看到我哪里出错了吗?连接SQL和Excel

仅供参考我在Sheet2.Range( “A2”)

这里是我的VBA代码复制的SQL代码。

Sub Update() 

Dim link As New ADODB.Connection 
Dim login As String 
Dim SQLSyntax As String 
Dim Basket As New ADODB.Recordset 

login = "DRIVER=SQL Server Native Client 10.0;SERVER=xxxxxx;UID=sa;PWD=xxxxx;APP=2007 Microsoft Office system;WSID=PC3;DATABASE=ST_L1;" 
SQLSyntax = Sheet2.Range("A2").Text 

link.Open login 
Basket.Open SQLSyntax, link 

Basket.Close 
link.Close 

End Sub 

我的SQL代码(在SQL中工作正常)。

Select P.spn as [Number],P.[Group],P.Name, isnull(T.Calls,0) as [Calls in last 2 months (excluding internals)], isnull(L.[Internal Calls],0) as [Internal Calls] ,isnull(M.[Last call],0)as [Last call] from ST_L1.dbo.Numbers P 
left join 
(Select COUNT(*)as [Calls],SPN from ST_L1.dbo.Main where CLI not in (Select CLI from ST_L1.dbo.internalCLI) 
and start between convert (date,getdate()-62)and convert (date,getdate()) 
group by SPN)T on T.SPN = P.spn 
left join (Select max(start)[Last call],SPN from ST_L1.dbo.Main 
group by SPN)M on M.SPN = P.spn 
left join 
(Select COUNT(*)as [Internal Calls],SPN from ST_L1.dbo.Main where CLI in (Select CLI from ST_L1.dbo.internalCLI) 
and start between convert (date,getdate()-62)and convert (date,getdate()) 
group by SPN)L on L.SPN = P.spn 
where LEFT(P.spn,4) not in ('0870') and P.[Group] in 
('BlaBla', 'BlaBla2') 
order by T.Calls asc,M.[Last call] 
+0

哪条线返回错误?它是否是Basket.Open SQLSyntax,link'? –

+0

是的,对不起,Basket.Open SQLSyntax,链接返回错误。 –

回答

0

永远不会打开记录集?

Set basket = link.Execute("SELECT * FROM Table1;") 
+0

嗨@DougCoats感谢您的回复。我在上面的VBA代码中用'Set Basket = link.Execute(SQLSyntax)'替换了'Basket.Open SQLSyntax,link'。它导致相同的“命令文本没有设置为命令对象”错误不幸的是:( –

+0

@ASuperTramp也许你应该在Visual Studio中直接解析SQL,而不是拉动表单工作表?可能会出现格式化问题 –

+1

This现在已经修复,这是一个格式问题,非常感谢你的帮助。 –