簡體   English   中英

SQL VBA運行時錯誤3075:查詢表達式中的語法錯誤(缺少運算符)

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

我正在嘗試為Access數據庫中的特定需求遵循一組循環SQL代碼。 我遇到這個錯誤

運行時錯誤3075:查詢表達式'SYRLIB_FLCRDD14.CRARNO = SYRLIB_FPCRDHDR.CHARNO來自SYRLIB_FLCRDD14 INNER JOIN SYRLIB_FPCUSMAS來自SYRLIB_FLCRDD14 SYRLIB FLCRDD1 '。

(對於粗體部分,我認為應該是SYRLIB_FLCRDD14,我在整個代碼中進行了搜索,所有23個匹配項均拼寫為“ FLCRDD14”,但看不到“ FLCRDD1”。我缺少什么嗎?)

謝謝您到目前為止的所有評論! 我已根據以下建議重新編輯並重新粘貼了整套代碼。 [Issue by]之后,我也取出了SELECT的括號並取出了逗號。 我使用了立即窗口並運行了新查詢。 它給出了一個不同的錯誤:查詢表達式'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

在此答案的結尾,我粘貼了從代碼的主循環創建的第一個INSERT語句的全文。

由於我的數據庫副本無法連接到ODBC數據源,因此無法測試該語句。

但是我可以看到幾個問題:

  1. SELECT字段列表中的SYRLIB_FLCRD在下一個字段之前缺少逗號。
  2. 我不確定SYRLIB_FLCRD是什么。 它看起來像表名稱的一部分,而不是實際的字段名稱。
  3. 多個FROM子句。
  4. WHERE子句中間的流浪分號( ;
  5. Like ('*MS*'Or '*RB*'Or '*GR*')在Access SQL中無效

這些可能不是全部錯誤。 但是它們足以說服我,您現在應該忘記VBA代碼。 只專注於查詢。 使用SELECT片進行設計和測試。 完成該工作后,將其調整為INSERT

僅當您具有無錯執行並執行所需操作的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