通过Excel VBAjoinSQL表时出错

我需要一些帮助。 我试图提取数据通过Excel中有连接查询的SQL,但我通过下面的代码运行时得到debugging错误..

recset.Open strSQL, con, adOpenDynamic, adLockOptimistic 

错误 – 运行时错误-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之间没有空格

尝试在每行closures引号之前放置一个空格:

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

使用“&_”扩展器可以添加到stringvariables的字符数是有限制的。

芯片的build议Debug.Printvariables会告诉你,这个查询是否是可行的,然后再尝试执行它。

当我为查询创build我的SQL时,我使用这样的过程来避免截断:

 strSQL = "SELECT " strSQL = strSQL & "Field1, Field2, Field3 " strSQL = strSQL & "FROM MyTable " 

在每一行的末尾添加一个空格可以确保安迪在上面注意到的问题不会发生。

与Andy Joiner的build议类似,你实际上在几个地方的末尾错过了一个空间。 例如

 "(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" & _ 

会看起来像:

 "(CASE SUBSTR(A.SYSTEM_ITEMCODE,6,2) WHEN ('PI') THEN 'OIP' WHEN ('PF') THEN OPF' ELSE 'OWL' END )AS LEGAL_ENTITYFROM xxdhl_pf_batch_pricing A, fnd_user B, fnd_user c" & _ 

从而消除你的FROM子句。

最后,我已经解决了错误…..实际上在一个编码中,我已经给出的参数在报价中给出的问题…即

以前我用下面的代码运行查询,

 strSQL & " AND [ORACLE_ITEM_CODE]='" 

只是因为有报价

"["

…得到那个错误。

但删除后,同样的工作罚款….

我要感谢所有分享他们的知识来解决错误的人……这也有助于我获得我的知识。

谢谢大家