sql - 通过 Excel VBA 连接 SQL 表时出错

标签 sql excel ms-access vba

我在这里需要一些帮助。我试图通过具有连接查询的 Excel 中的 SQL 提取数据,但在运行下面的代码时出现调试错误..

recset.Open strSQL, con, adOpenDynamic, adLockOptimistic

Error - Runtime error -2147467259

下面是代码......请帮忙:confused:

Sub Show_data()

    Dim con As ADODB.Connection
    Dim recset As ADODB.Recordset
    Dim ConnectionString As String
    Dim strSQL As String

    Set con = New ADODB.Connection
    Set recset = New ADODB.Recordset

''Check for the connectivity or connected to the xx network
    On Error GoTo errHandler

errHandler:
    If Err.Number = -2147467259 Then
        MsgBox "Please check for the xx connectivity ", vbExclamation + vbOKOnly
        Exit Sub
    End If


    ConnectionString = "Provider=MSDASQL;User ID=myuser;password= mypass;Data Source=mys"

    con.Open ConnectionString

    'Set and Excecute SQL Command'

        strSQL = "SELECT B.USER_NAME AS CREATED_BY, A.CREATION_DATE, C.USER_NAME, A.LAST_UPDATE_DATE, A.PFIZER_ITEMCODE, A.SYSTEM_ITEMCODE AS ORACLE_ITEM_CODE," & _
        "A.ITEM_DESCRIPTION, A.BATCH_NUMBER, A.MFR_CODE, A.MFR_DESC AS MFR_DESCRIPTION, TO_CHAR(A.MFR_DATE,'DD-MON-YYYY')As MFR_DATE, TO_CHAR(A.EXPIRY_DATE,'DD-MON-YYYY')As EXPIRY_DATE," & _
        "TO_CHAR(A.EFFECTIVE_FROM,'DD-MON-YYYY') AS EFFECTIVE_FROM," & _
        "A.EFFECTIVE_TO, A.EXCISE AS EXCISE_AMOUNT, A.EXCISE_RATE, A.P2S, A.P2R, A.MRP, A.STATE_CODE, A.STATE," & _
        "(CASE SUBSTR(A.SYSTEM_ITEMCODE,6,2) WHEN ('PI') THEN 'OIP' WHEN ('PF') THEN 'OPF' ELSE 'OWL' END )AS LEGAL_ENTITY" & _
        "FROM xxdhl_pf_batch_pricing A, fnd_user B, fnd_user c" & _
        "WHERE 1=1" & _
        "AND A.CREATED_BY = B.USER_ID" & _
        "AND A.LAST_UPDATED_BY = C.USER_ID"

        If (ActiveSheet.cmbLE.Text) <> "" Then
        strSQL = strSQL & " LEGAL_ENTITY='" & ActiveSheet.cmbLE.Text & "'"
        End If

        If (ActiveSheet.cmbProduct.Text) <> "" Then
            If (ActiveSheet.cmbLE.Text) <> "" Then
                strSQL = strSQL & " AND [ORACLE_ITEM_CODE]='" & ActiveSheet.cmbProduct.Text & "'"
            Else
                strSQL = strSQL & " [ORACLE_ITEM_CODE]='" & ActiveSheet.cmbProduct.Text & "'"
            End If
        End If

        If (ActiveSheet.txtBatch.Text) <> "" Then
            If (ActiveSheet.cmbLE.Text) <> "" Or (ActiveSheet.cmbProduct.Text) <> "" Then
                strSQL = strSQL & " AND [BATCH_NUMBER]='" & ActiveSheet.txtBatch.Text & "'"
            Else
                strSQL = strSQL & " [BATCH_NUMBER]='" & ActiveSheet.txtBatch.Text & "'"
            End If
        End If



    'Open Recordset

    Set recset.ActiveConnection = con
    recset.Open strSQL, con, adOpenDynamic, adLockOptimistic

    'Copy the data
    If recset.RecordCount > 0 Then
    Sheets("Sheet2").Range("A1").CopyFromRecordset recset
'    ActiveSheet.Range("A1").CopyFromRecordset recset
    Else
    MsgBox "No Data Available", vbExclamation + vbOKOnly
    Exit Sub
    End If

recset.Close
con.Close

End Sub

根据您的所有要求,我打印了 strSQL

    SELECT B.USER_NAME AS CREATED_BY, A.CREATION_DATE, C.USER_NAME, 
    A.LAST_UPDATE_DATE, 
    A.PFIZER_ITEMCODE, A.SYSTEM_ITEMCODE AS ORACLE_ITEM_CODE, 
    A.ITEM_DESCRIPTION, A.BATCH_NUMBER, 
        A.MFR_CODE, A.MFR_DESC AS MFR_DESCRIPTION, 
        TO_CHAR(A.MFR_DATE,'DD-MON-YYYY')As MFR_DATE, 
    TO_CHAR(A.EXPIRY_DATE,'DD-MON-YYYY')As EXPIRY_DATE, 
        TO_CHAR(A.EFFECTIVE_FROM,'DD-MON-YYYY') AS EFFECTIVE_FROM, 
A.EFFECTIVE_TO, A.EXCISE AS EXCISE_AMOUNT, 
        A.EXCISE_RATE, A.P2S, 
A.P2R, A.MRP, A.STATE_CODE, A.STATE, 
        (CASE SUBSTR(A.SYSTEM_ITEMCODE,6,2) WHEN ('PI') THEN 'OIP' WHEN ('PF') THEN 'OPF' ELSE 'OWL' END )AS LEGAL_ENTITY 
            FROM xxdhl_pf_batch_pricing A, fnd_user B, fnd_user c 
WHERE 1=1 AND A.CREATED_BY = B.USER_ID AND A.LAST_UPDATED_BY = C.USER_ID  AND [A.LEGAL_ENTITY]='J0012' AND [A.SYSTEM_ITEMCODE]='1407_PI-J0012'

最佳答案

哪里有像

这样的代码
"WHERE 1=1" & _
"AND A.CREATED_BY = B.USER_ID" & _

它将被渲染

"WHERE 1=1AND A.CREATED_BY = B.USER_ID"

1=1AND

之间没有空格

尝试在每行结束引号之前添加一个空格:

"WHERE 1=1 " & _
"AND A.CREATED_BY = B.USER_ID " & _

关于sql - 通过 Excel VBA 连接 SQL 表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30330556/

相关文章:

MYSQL 查询返回特定父项的所有后代

sql - 如何根据 Case When 进行不同计数?

database - 反规范化并减少四个数据库表之间的多个关系中的冗余

mysql - Rails mysql 删除重复的元组

sql - 将 JSON 数据提取到简单的列中

Excel:使用工作表作为函数?

java - 使用 Java 和 Jasper 生成 Excel 文件

java - 动态读取Excel并存储在 map 中

ms-access - MS Access 问题 - 可伸缩性/索引/交易

vba - 如何将查询中的多值字段传递给 VBA 函数