简体   繁体   English

尝试使用VBA从SQL Server检索数据时出现运行时错误'-2147217900(80040e14)

[英]Run-time error '-2147217900 (80040e14) while trying to retrieving data from SQL Server using VBA

I am trying to connect to SQL Server from Excel VBA using the following code. 我正在尝试使用以下代码从Excel VBA连接到SQL Server。 But when I run the below query, I get an error 但是当我运行以下查询时,出现错误

Run-time error '-2147217900 (80040e14). 运行时错误'-2147217900(80040e14)。

Here is my code: 这是我的代码:

    Dim objMyConn As ADODB.Connection
    Dim objMyCmd As ADODB.Command
    Dim objMyCmd1 As ADODB.Command
    Dim objMyRecordset As ADODB.Recordset
    Dim rngUsedRange

    Set objMyConn = New ADODB.Connection
    Set objMyCmd = New ADODB.Command

    Set objMyRecordset = New ADODB.Recordset
    Set rngUsedRange = ActiveSheet.UsedRange

'Open Connection'

    objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=10.5.3.16;Initial Catalog=PROTELECOM_AMERICAN_TOWERS;Trusted_connection=yes;"
    objMyConn.Open

'Set and Excecute SQL Command'
    Set objMyCmd.ActiveConnection = objMyConn
objMyCmd.CommandText = ";WITH CTE AS(SELECT BAN.BAN_IDFR, BAN.BAN_NBR, BAN.BAN_STATUS FROM PROTELE_BAN BAN INNER JOIN PROTELE_BILL BILL ON BAN.BAN_IDFR = BILL.BAN_IDFR" & _
"GROUP BY BAN.BAN_IDFR,BAN.BAN_NBR,BAN.BAN_STATUS)SELECT DISTINCT V.ORG_NAME [VENDOR NAME], CTE.BAN_NBR [BAN#], SVR.SER_ACCT_NBR [WTN#],W.COST_CENTER[COST CENTER],W.COST_CODE[COST CODE], BA.ECOM_ID [VENDOR ID],BC.SERVICE_TYPE [SERVICE TYPE], CONVERT(VARCHAR(10),MAX(B.BILL_DATE),101) AS [BILL DATE],SUM(BC.AMOUNT) AMOUNT, B.EXTRACT_STATUS [EXTRACT STATUS],CONVERT(VARCHAR(10),B.EXTRACT_DATE,101) AS [EXTRACTED DATE]" & _
"FROM CTE INNER JOIN PROTELE_BILL B ON CTE.BAN_IDFR = B.BAN_IDFR" & _
"INNER JOIN PROTELE_BILL_CHARGE BC ON B.BILL_IDFR = BC.BILL_IDFR" & _
"INNER JOIN PROTELE_BAN_WTN_MAPPING MAPP ON B.BAN_IDFR = MAPP.BAN_IDFR" & _
"INNER JOIN PROTELE_SVR_WTN SVR ON SVR.SVR_ACCT_IDFR=BC.SVR_ACCT_IDFR" & _
"INNER JOIN PROTELE_SVR_WTN_DETAILS W ON CTE.BAN_IDFR = W.BAN_IDFR AND SVR.SVR_ACCT_IDFR = W.SVR_ACCT_IDFR AND B.BAN_IDFR=W.BAN_IDFR" & _
"INNER JOIN PROTELE_BAN_VENDOR BV ON CTE.BAN_IDFR = BV.BAN_IDFR" & _
"INNER JOIN PROTELE_BAN BA ON CTE.BAN_IDFR = BA.BAN_IDFR" & _
"INNER JOIN PROTELE_LOCATION C ON C.LOCA_IDFR = BV.VNDR_LOCA_IDFR" & _
"INNER JOIN PROTELE_VENDOR V ON C.ORG_IDFR = V.ORG_IDFR WHERE BC.SVR_ACCT_IDFR=W.SVR_ACCT_IDFR AND (B.EXTRACT_DATE BETWEEN '02/05/2016' AND '02/06/2016')" & _
"GROUP BY CTE.BAN_NBR, B.EXTRACT_DATE, BA.ECOM_ID,B.BILL_DATE,B.EXTRACT_STATUS,BC.SERVICE_TYPE,W.COST_CENTER,W.COST_CODE, SVR.SER_ACCT_NBR,V.ORG_NAME" & _
"ORDER BY CTE.BAN_NBR, V.ORG_NAME;"
objMyCmd.CommandType = adCmdText
'Open Recordset'
    Set objMyRecordset.Source = objMyCmd
    objMyRecordset.Open
    For intColIndex = 0 To objMyRecordset.Fields.Count - 1
    Selection.Offset(0, intColIndex).Value = objMyRecordset.Fields(intColIndex).Name
    Next

'Copy Data to Excel'
    ActiveSheet.Range("A2").CopyFromRecordset objMyRecordset

The one thing that jumps to my attention is your concatenations. 引起我注意的一件事是您的连接。 You don't seem to be padding spaces or return characters between your concats. 您似乎在concat之间没有空格或返回字符。

For example, when you do this: 例如,当您这样做时:

sql = "select one, two, three" & _
      "from x"

it will render the output as: 它将输出呈现为:

select one, two, threefrom x

Which should error. 哪个应该出错。

Can you add spaces at the end of each string and see if that helps? 您可以在每个字符串的末尾添加空格,看看是否有帮助? With the exception of that, I don't see any glaring issues with the code. 除此之外,我看不到代码有任何明显的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 无法使用VBA连接到SQL Server(运行时错误(80040e14)) - Cannot connect to sql server with VBA (Run-time error (80040e14)) 运行时错误“-2147217900 (80040e14)”:“1”附近的语法不正确 - Run-time error' -2147217900 (80040e14)': Incorrect syntax near '1' 尝试从 SQL Server 检索数据时出现 VBA ADODB 错误 (80040e14) - VBA ADODB error (80040e14) when trying to retrieve data from SQL Server SQL Server错误'80040e14'列名不明确 - SQL Server error '80040e14' Ambiguous column name SQL Server错误80040e14在结果集中使用经典ASP - SQL Server error 80040e14 Using Classic ASP in a Result Set SQL Server 2012 上的 SQL Server 错误“80040e14”语法不正确 - SQL Server error '80040e14' incorrect syntax on SQL Server 2012 SQL Server的Microsoft OLE DB提供程序错误'80040e14'无效的列名。 SQL查询 - Microsoft OLE DB Provider for SQL Server error '80040e14' Invalid column name . SQL query Microsoft OLE DB提供程序的SQL Server错误'80040e14'找不到存储的过程 - Microsoft OLE DB Provider for SQL Server error '80040e14' Could not find stored procedure Microsoft OLE DB提供程序的SQL Server错误'80040e14' - Microsoft OLE DB Provider for SQL Server error '80040e14' 用于SQL Server的Microsoft OLE DB提供程序错误“80040e14”'='附近的语法不正确 - Microsoft OLE DB Provider for SQL Server error '80040e14' Incorrect syntax near '='
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM