[英]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: 但是我可以看到几个问题:
SELECT
fields list is missing a comma before the next field. SELECT
字段列表中的SYRLIB_FLCRD在下一个字段之前缺少逗号。 FROM
clauses. FROM
子句。 ;
) in the middle of the WHERE
clause WHERE
子句中间的流浪分号( ;
) 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.