![](/img/trans.png)
[英]Excel Import VBA: Run-time 3075 Syntax error (missing operator) in query expression
[英]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數據源,因此無法測試該語句。
但是我可以看到幾個問題:
SELECT
字段列表中的SYRLIB_FLCRD在下一個字段之前缺少逗號。 FROM
子句。 WHERE
子句中間的流浪分號( ;
) 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.