2015-05-01 2 views
2

Я пытаюсь следовать набору кода цикла для моей конкретной потребности в базе данных Access. И я бег в эту ошибкуОшибка во время выполнения SQL VBA 3075: ошибка синтаксиса (отсутствующий оператор) в выражении запроса

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'.

(для части жирного шрифта, я думаю, что это должно быть SYRLIB_FLCRDD14, я перерыл весь код, все 23 матчей пишутся как «FLCRDD14», я не вижу «FLCRDD1». Я что-то не хватает?)

Благодарим вас за комментарий ниже! Я повторно отредактировал и повторно вставил весь набор кода на основе приведенных ниже предложений. Я также вынул кронштейн около 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 
+0

Просьба представить окончательное значение переменной MYSQL. Мы не можем установить это из фрагмента кода (кстати, это неполное). –

+1

Удалить запятую в последней строке '[Issue by],'? –

+2

Не скопируйте ключевые слова SQL ... это неправильно: '[SELECT]' – HansUp

ответ

0

В конце этого ответа, я вставил полный текст первого INSERT заявления, созданного из основного цикла вашего кода.

Поскольку моя копия вашего db не может подключиться к источникам данных ODBC, я не могу проверить это утверждение.

Однако я вижу несколько проблем:

  1. SYRLIB_FLCRD в списке SELECT полей отсутствует запятая перед следующим полем.
  2. Я не уверен, что SYRLIB_FLCRD есть. Он выглядит как фрагмент имени таблицы, за которым не следует фактическое имя поля.
  3. Несколько FROM оговорки.
  4. бездомная точка с запятой (;) в середине WHERE пункта
  5. Like ('*MS*'Or '*RB*'Or '*GR*') не действует в Access SQL

Те, кто не может быть все ошибки. Но их достаточно, чтобы убедить меня, что вы должны забыть о коде VBA. Сосредоточьтесь только на запросе. Дизайн и тестирование с помощью изделия SELECT. После того, как вы получите эту работу, приспособите ее как INSERT.

Возврат к коду VBA только после того, как у вас есть INSERT, который выполняется без ошибок и выполняет то, что вам нужно.


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)) 
+0

Большое спасибо, HansUp! Я отвечу на ваш совет и продолжу. –

Смежные вопросы