首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA - SQL语句中的转换出现语法错误

VBA - SQL语句中的转换出现语法错误
EN

Stack Overflow用户
提问于 2021-11-03 19:24:36
回答 1查看 54关注 0票数 0

我在这里向您寻求帮助,因为在对ADO进行了各种试验之后,我有一个无法解决的问题。

我相信我做的每件事都是正确的,但是VBA通知我在转换教育中犯了语法错误

我检查得很好,没有注意到错误,这也是因为同样的查询在Access上执行得很好。

这样做的目的是让查询返回以下结果:

如果我在没有连接的情况下运行一个非常类似的查询,我没有任何问题,一切都正常,但是如果我在工作表"months“上使用连接,语法问题就会出现。

你能指出我哪里错了吗?

非常感谢您的支持。

这里是文件:https://www.dropbox.com/s/2isoyahnsmvcr2k/Errore_TRANSFORM.xlsb?dl=0

下面是我的代码:

代码语言:javascript
复制
Sub generaRicavi()
    Dim RS As New ADODB.Recordset
    Dim conn As String, SQL As String
    
    Application.ScreenUpdating = False
    conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & "; Jet OLEDB:Bypass ChoiceField Validation =True;Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"
            
    SQL = "TRANSFORM Sum(Foglio1$.RICAVI)" _
            & " SELECT Year([Foglio1$].[DATA])" _
            & " FROM MESI$ LEFT JOIN Foglio1$ ON MESI$.MESE =  Month([Foglio1$].[DATA])" _
            & " GROUP BY Year([Foglio1$].[DATA])" _
            & " ORDER BY Year([Foglio1$].[DATA]), MESI$.MESE" _
            & " PIVOT MESI$.MESE;"
            
    RS.Open SQL, conn, adOpenStatic, adLockReadOnly
    
    With Foglio2
        .Range("A3").CurrentRegion.ClearContents
        .Range("A3:M3") = Array("ANNO","GENNAIO", "FEBBRAIO", "MARZO", "APRILE", "MAGGIO", "GIUGNO", "LUGLIO", "AGOSTO", "SETTEMBRE", "OTTOBRE", "NOVEMBRE", "DICEMBRE")
        .Range("A4").CopyFromRecordset RS
    End With
    
    RS.Close
    Application.ScreenUpdating = True
    Set RS = Nothing
End Sub
EN

回答 1

Stack Overflow用户

发布于 2021-11-11 18:16:52

我找到了解决方案。实际上,查询中存在语法错误。缺少工作表和表字段之间的方括号。可以工作的代码如下:

代码语言:javascript
复制
Sub generaRicavi()
    Dim RS As New ADODB.Recordset
    Dim conn As String, SQL As String
    
    Application.ScreenUpdating = False
    conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & "; Jet OLEDB:Bypass ChoiceField Validation =True;Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"
            
    SQL = "TRANSFORM Sum(Foglio1$.RICAVI)" _
            & " SELECT Year([Foglio1$].[DATA])" _
            & " FROM [MESI$] LEFT JOIN [Foglio1$] ON [MESI$].[MESE] =  Month([Foglio1$].[DATA])" _
            & " GROUP BY Year([Foglio1$].[DATA])" _
            & " ORDER BY Year([Foglio1$].[DATA]), [MESI$].[MESE]" _
            & " PIVOT [MESI$].[MESE];"
            
    RS.Open SQL, conn, adOpenStatic, adLockReadOnly
    
    With Foglio2
        .Range("A3").CurrentRegion.ClearContents
        .Range("A3:M3") = Array("ANNO", "GENNAIO", "FEBBRAIO", "MARZO", "APRILE", "MAGGIO", "GIUGNO", "LUGLIO", "AGOSTO", "SETTEMBRE", "OTTOBRE", "NOVEMBRE", "DICEMBRE")
        .Range("A4").CopyFromRecordset RS
    End With
    
    RS.Close
    Application.ScreenUpdating = True
    Set RS = Nothing
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69830677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档