简体   繁体   English

SQL VBA运行时错误3075:查询表达式中的语法错误(缺少运算符)

[英]SQL VBA Run-Time Error 3075: Syntax error(missing operator) in query expression

I'm trying to follow a set of loop SQL code for my specific need in an Access Database. 我正在尝试为Access数据库中的特定需求遵循一组循环SQL代码。 And I run into this error 我遇到这个错误

Run-Time Error 3075: Syntax error(missing operator) in query expression 'SYRLIB_FLCRDD14.CRARNO=SYRLIB_FPCRDHDR.CHARNO From SYRLIB_FLCRDD14 INNER JOIN SYRLIB_FPCUSMAS on SYRLIB_FLCRDD14.CRCUST=SYRLIB_FPCUSMAS.CNUMBR From SYRLIB_FLCRDD14 INNER JOIN SYRLIB_FPSECFIL on SYRLIB_FLCRDD14.CRCLRK=SYRLIB_FPSECFIL.SECNUM FROM SYRLIB FLCRDD1 '. 运行时错误3075:查询表达式'SYRLIB_FLCRDD14.CRARNO = SYRLIB_FPCRDHDR.CHARNO来自SYRLIB_FLCRDD14 INNER JOIN SYRLIB_FPCUSMAS来自SYRLIB_FLCRDD14 SYRLIB FLCRDD1 '。

(for the bolded part, I think it should be SYRLIB_FLCRDD14, I've searched through the entire code, all 23 matches are spelled as "FLCRDD14", I don't see a "FLCRDD1". Am I missing something?) (对于粗体部分,我认为应该是SYRLIB_FLCRDD14,我在整个代码中进行了搜索,所有23个匹配项均拼写为“ FLCRDD14”,但看不到“ FLCRDD1”。我缺少什么吗?)

Thank you for all the comment below so far! 谢谢您到目前为止的所有评论! I've re-edited and re-pasted the entire set of the code based on the below suggestions. 我已根据以下建议重新编辑并重新粘贴了整套代码。 I've also taken out the bracket around SELECT and taken out the comma after [Issue by] . [Issue by]之后,我也取出了SELECT的括号并取出了逗号。 I used the immediate window and ran the new query. 我使用了立即窗口并运行了新查询。 It gives a different error: Syntax error(missing operator) in query expression 'SYRLIB_FLCRDD14.CRCMMT'. 它给出了一个不同的错误:查询表达式'SYRLIB_FLCRDD14.CRCMMT'中的语法错误(缺少运算符)。

Sub RunDistrackData()  'Pulls Customer Rebate Data
'On Error GoTo Err_Handler:

    'DoCmd.SetWarnings False
    'DoCmd.Hourglass True

    Dim rst2 As ADODB.Recordset
    Set rst2 = New ADODB.Recordset
    rst2.Open "[TblDC]", CurrentProject.Connection

    Dim sCHAR As String
    Dim sName As String
    Dim sNUM As String
    Dim SQry As String
    Dim mySQL As String
    Dim qfd As QueryDef
    Dim db As Database
    Set db = CurrentDb
    Dim bTime As Date
    Dim eTime As Date
    'bTime = Now()

    rst2.MoveFirst

    DoCmd.OpenQuery "Clear Data", acViewNormal, acEdit
    Do While Not rst2.EOF

    sCHAR = rst2.Fields("DC CHAR")
    sNUM = rst2.Fields("DCNum")
    sName = rst2.Fields("DCName")


mySQL = "INSERT INTO [Data]([DC],[DC Name],[Customer Type],[Printed Date],[Entered Date],"
mySQL = mySQL & " [Customer Number],[Customer Name],[Transfer Invoice],[Item Number],"
mySQL = mySQL & " [Item Description],[CRTYPE],[Reason for Return],[Dist Return Code Override],"
mySQL = mySQL & " [Qty Returned],[CRRPCS],[CRCRTT],[CRDBCR],[CRINV#],[CRCMMT],"
mySQL = mySQL & " [GEN CMMT1],[GEN CMMT2],[GEN CMMT3],[Issue by])"

mySQL = mySQL & " SELECT " & sNUM & " AS [DC],  '" & sName & "'  AS [DC Name], "

mySQL = mySQL & " " & sCHAR & "LIB_FPCUSMAS.CSBSTY AS [Customer Type], "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.CRCMDT AS [Printed Date], "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.CRPRDT AS [Entered Date], "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.CRCUST AS [Customer Number], "
mySQL = mySQL & " " & sCHAR & "LIB_FPCUSMAS.CLNAME AS [Customer Name], "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.CRARNO AS [Transfer Invoice], "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.CRITEM AS [Item Number], "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.CRDESC AS [Item Description], "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.CRTYPE, "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.CRRESN AS [Reason for Return], "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.CRDSOV AS [Dist Return Code Override], "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.CRQTSR AS [Qty Returned], "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.CRRPCS, "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.CRCRTT, "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.CRDBCR, "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.[CRINV#], "
mySQL = mySQL & " " & sCHAR & "LIB_FLCRDD14.CRCMMT, "
mySQL = mySQL & " " & sCHAR & "LIB_FPCRDHDR.CHCMT1 AS [GEN CMMT 1], "
mySQL = mySQL & " " & sCHAR & "LIB_FPCRDHDR.CHCMT2 AS [GEN CMMT 2], "
mySQL = mySQL & " " & sCHAR & "LIB_FPCRDHDR.CHCMT3 AS [GEN CMMT 3], "
mySQL = mySQL & " " & sCHAR & "LIB_FPSECFIL.SECNAM AS [Issue by] "






'change below to connect FLCRDD14 table to whichever order table adding.  add order details above

mySQL = mySQL & " From " & sCHAR & "LIB_FLCRDD14 INNER JOIN " & sCHAR & "LIB_FPCRDHDR"
mySQL = mySQL & " ON " & sCHAR & "LIB_FLCRDD14.CRARNO = " & sCHAR & "LIB_FPCRDHDR.CHARNO"
mySQL = mySQL & " From " & sCHAR & "LIB_FLCRDD14 INNER JOIN " & sCHAR & "LIB_FPCUSMAS"
mySQL = mySQL & " ON " & sCHAR & "LIB_ FLCRDD14.CRCUST = " & sCHAR & "LIB_FPCUSMAS.CNUMBR"
mySQL = mySQL & " From " & sCHAR & "LIB_FLCRDD14 INNER JOIN " & sCHAR & "LIB_FPSECFIL "
mySQL = mySQL & " ON " & sCHAR & "LIB_FLCRDD14.CRCLRK = " & sCHAR & "LIB_FPSECFIL.SECNUM"


mySQL = mySQL & " FROM " & sCHAR & "LIB_FLCRDD14"
mySQL = mySQL & " WHERE (((" & sCHAR & "LIB_FPGLJNLDBK.CRITEM)"
mySQL = mySQL & " Like '*358300*') "

mySQL = mySQL & " AND ((" & sCHAR & "LIB_FPGLJNLDBK.CRCMDT)"
mySQL = mySQL & " Between [Forms]![Form1]![StartDate] "
mySQL = mySQL & " And [Forms]![Form1]![EndDate]));"

mySQL = mySQL & " AND ((" & sCHAR & "LIB_FPGLJNLDBK.CRRESN)"
mySQL = mySQL & " Like ('*MS*'Or '*RB*'Or '*GR*'))"

mySQL = mySQL & " AND ((" & sCHAR & "LIB_FPGLJNLDBK.CRITEM)>0))"


Debug.Print mySQL

    SQry = "Income" & sCHAR
    Set qfd = db.CreateQueryDef(SQry, mySQL)
    qfd.ODBCTimeout = 9999
    RefreshDatabaseWindow
    DoCmd.OpenQuery "Data" & sCHAR
    db.QueryDefs.Delete (SQry)

    rst2.MoveNext
    Loop

    'add additional queries here
    'DoCmd.OpenQuery "..............."

    DoCmd.OpenQuery "Add MIF Data"


    'DoCmd.SetWarnings True
    'DoCmd.Hourglass False

    rst2.Close
    Set rst2 = Nothing

    'eTime = Now()

    'MsgBox "Report run is completed.  Run Time = " & Format([eTime] - [bTime], "hh:nn:ss")

    End Sub

At the end of this answer, I pasted the full text of the first INSERT statement created from your code's main loop. 在此答案的结尾,我粘贴了从代码的主循环创建的第一个INSERT语句的全文。

Since my copy of your db can't connect to your ODBC data sources, I can't test that statement. 由于我的数据库副本无法连接到ODBC数据源,因此无法测试该语句。

However I can see several problems: 但是我可以看到几个问题:

  1. SYRLIB_FLCRD in the SELECT fields list is missing a comma before the next field. SELECT字段列表中的SYRLIB_FLCRD在下一个字段之前缺少逗号。
  2. I'm unsure what SYRLIB_FLCRD is. 我不确定SYRLIB_FLCRD是什么。 It looks like a fragment of the table name, not followed by an actual field name. 它看起来像表名称的一部分,而不是实际的字段名称。
  3. Multiple FROM clauses. 多个FROM子句。
  4. a stray semicolon ( ; ) in the middle of the WHERE clause WHERE子句中间的流浪分号( ;
  5. Like ('*MS*'Or '*RB*'Or '*GR*') is not valid in Access SQL Like ('*MS*'Or '*RB*'Or '*GR*')在Access SQL中无效

Those may not be all the errors. 这些可能不是全部错误。 But they are enough to convince me you should forget about the VBA code for now. 但是它们足以说服我,您现在应该忘记VBA代码。 Concentrate only on the query. 只专注于查询。 Design and test with the SELECT piece. 使用SELECT片进行设计和测试。 After you get that working, adapt it as an INSERT . 完成该工作后,将其调整为INSERT

Return to the VBA code only after you have an INSERT which executes without error and does what you need it to do. 仅当您具有无错执行并执行所需操作的INSERT后,才返回VBA代码。


INSERT INTO [Data]
    (
        [DC],
        [DC Name],
        [Customer Type],
        [Printed Date],
        [Entered Date],
        [Customer Number],
        [Customer Name],
        [Transfer Invoice],
        [Item Number],
        [Item Description],
        [CRTYPE],
        [Reason for Return],
        [Dist Return Code Override],
        [Qty Returned],
        [CRRPCS],
        [CRCRTT],
        [CRDBCR],
        [CRINV#],
        [CRCMMT],
        [GEN CMMT1],
        [GEN CMMT2],
        [GEN CMMT3],
        [Issue by]
    )
SELECT
    3 AS [DC],
    'SYRACUSE'  AS [DC Name],
    SYRLIB_FPCUSMAS.CSBSTY AS [Customer Type],
    SYRLIB_FLCRDD14.CRCMDT AS [Printed Date],
    SYRLIB_FLCRDD14.CRPRDT AS [Entered Date],
    SYRLIB_FLCRDD14.CRCUST AS [Customer Number],
    SYRLIB_FPCUSMAS.CLNAME AS [Customer Name],
    SYRLIB_FLCRDD14.CRARNO AS [Transfer Invoice],
    SYRLIB_FLCRDD14.CRITEM AS [Item Number],
    SYRLIB_FLCRDD14.CRDESC AS [Item Description],
    SYRLIB_FLCRDD14.CRTYPE,
    SYRLIB_FLCRDD14.CRRESN AS [Reason for Return],
    SYRLIB_FLCRDD14.CRDSOV AS [Dist Return Code Override],
    SYRLIB_FLCRDD14.CRQTSR AS [Qty Returned],
    SYRLIB_FLCRDD14.CRRPCS,
    SYRLIB_FLCRDD14.CRCRTT,
    SYRLIB_FLCRDD14.CRDBCR,
    SYRLIB_FLCRDD14.[CRINV#],
    SYRLIB_FLCRD
    D14.CRCMMT,
    SYRLIB_FPCRDHDR.CHCMT1 AS [GEN CMMT 1],
    SYRLIB_FPCRDHDR.CHCMT2 AS [GEN CMMT 2],
    SYRLIB_FPCRDHDR.CHCMT3 AS [GEN CMMT 3],
    SYRLIB_FPSECFIL.SECNAM AS [Issue by]
From SYRLIB_FLCRDD14 INNER JOIN SYRLIB_FPCRDHDR ON SYRLIB_FLCRDD14.CRARNO = SYRLIB_FPCRDHDR.CHARNO
From SYRLIB_FLCRDD14 INNER JOIN SYRLIB_FPCUSMAS ON SYRLIB_ FLCRDD14.CRCUST = SYRLIB_FPCUSMAS.CNUMBR
From SYRLIB_FLCRDD14 INNER JOIN SYRLIB_FPSECFIL  ON SYRLIB_FLCRDD14.CRCLRK = SYRLIB_FPSECFIL.SECNUM
FROM SYRLIB_FLCRDD14
WHERE
    (((SYRLIB_FPGLJNLDBK.CRITEM) Like '*358300*')
    AND ((SYRLIB_FPGLJNLDBK.CRCMDT)
    Between [Forms]![Form1]![StartDate] And [Forms]![Form1]![EndDate])); AND ((SYRLIB_FPGLJNLDBK.CRRESN)
    Like ('*MS*'Or '*RB*'Or '*GR*')) AND ((SYRLIB_FPGLJNLDBK.CRITEM)>0))

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM