【发布时间】:2015-05-01 16:00:12
【问题描述】:
我正在尝试遵循一组循环 SQL 代码来满足我在 Access 数据库中的特定需求。我遇到了这个错误
运行时错误 3075:查询中的语法错误(缺少运算符) 表达式 'SYRLIB_FLCRDD14.CRARNO=SYRLIB_FPCRDHDR.CHARNO 从 SYRLIB_FLCRDD14 内部连接 SYRLIB_FPCUSMAS 开启 SYRLIB_FLCRDD14.CRCUST=SYRLIB_FPCUSMAS.CNUMBR 来自 SYRLIB_FLCRDD14 INNER JOIN SYRLIB_FPSECFIL on SYRLIB_FLCRDD14.CRCLRK=SYRLIB_FPSECFIL.SECNUM FROM SYRLIB FLCRDD1'.
(对于粗体部分,我认为应该是 SYRLIB_FLCRDD14,我已经搜索了整个代码,所有 23 个匹配项都拼写为“FLCRDD14”,我没有看到“FLCRDD1”。我错过了什么吗? )
感谢您到目前为止的所有评论!我根据以下建议重新编辑并重新粘贴了整套代码。我还去掉了SELECT 周围的括号,并去掉了[Issue by] 后面的逗号。我使用即时窗口并运行新查询。它给出了一个不同的错误:查询表达式'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
【问题讨论】:
-
请提供 mySQL 变量的最终值。我们无法从代码 sn-p 中确定这一点(顺便说一句,它是不完整的)。
-
去掉最后一行的逗号
[Issue by],? -
不要将 SQL 关键字括起来……这是错误的:
[SELECT] -
应@PittsburghDBA 的要求,请向我们展示Access 为
Debug.Print mySQL显示的内容 -
SELECT 在括号中是一个问题。尽管如此,检查 mySQL 的最终值仍然很好。