2013-04-26 2 views
0

У меня такое чувство, что здесь должна быть глупая ошибка, которую я не вижу, но я так долго смотрел на нее, что я в недоумении. Я генерирую инструкцию SQL через VBA, и я продолжаю получать странную ошибку. SQL приходит из вида:Доступ не к синтаксическому анализу всего оператора SQL

SELECT c.Junction_ID AS [ID], c.[First_Name] AS [First Name], c.[Last_Name] AS [Last Name], 
    c.Location, c.Start_Date AS [Start Date], c.End_Date AS [End Date], 
    s.Helpful_Scale AS [Helpfulness], s.Memory_Scale AS [Memory] 
FROM nka_ClassList_Unique c 
INNER JOIN nka_Supplemental s ON c.Junction_ID = s.Junction_ID 
INNER JOIN nka_ClassList_Unique_Mgrs m ON m.Location = c.Location 
    AND ((c.Start_Date BETWEEN m.StartDate AND m.EndDate) 
    OR (c.End_Date BETWEEN m.StartDate AND m.EndDate) 
    OR (m.StartDate BETWEEN c.Start_Date AND c.End_Date) 
    OR (m.EndDate BETWEEN c.Start_Date AND c.End_Date)) 
WHERE ((c.Management = False) AND (c.Dist_Manager = False) 
    AND (m.Junction_ID = 129880) AND (c.Location = "DEC")) 

Access вызывает следующую ошибку (я отформатировал его, чтобы поместиться на экране):

Syntax error (missing operator) in query expression 
`c.Junction_ID = s.Junction_ID INNER JOIN nka_Sprint1_ClassList_Unique_Mgrs m 
    ON m.Location = c.Locatio'. 

Что бы вызвать Access, чтобы остановить разбор этого запроса частично через имя поля? Это не имеет никакого отношения к остановке после определенного количества символов. Даже если я изменяю длину инструкции SELECT псевдонимов таблицы, она всегда останавливается на c.Locatio.

Любые мысли о том, почему это будет сделано? Должно быть, что-то глупое я здесь не замечаю.

ответ

3

MSAccess является немного придирчивым при объединении более двух таблиц. Он требует скобок между соединениями,

SELECT c.junction_id AS [ID], 
     c.[first_name] AS [First Name], 
     c.[last_name] AS [Last Name], 
     c.location, 
     c.start_date AS [Start Date], 
     c.end_date  AS [End Date], 
     s.helpful_scale AS [Helpfulness], 
     s.memory_scale AS [Memory] 
FROM ((nka_classlist_unique c 
     INNER JOIN nka_supplemental s 
       ON c.junction_id = s.junction_id) // <<== observe the parenthesis 
     INNER JOIN nka_classlist_unique_mgrs m 
       ON m.location = c.location 
        AND ((c.start_date BETWEEN m.startdate AND m.enddate) 
         OR (c.end_date BETWEEN m.startdate AND m.enddate) 
         OR (m.startdate BETWEEN c.start_date AND c.end_date) 
         OR (m.enddate BETWEEN c.start_date AND c.end_date))) 
WHERE ((c.management = false) 
     AND (c.dist_manager = false) 
     AND (m.junction_id = 129880) 
     AND (c.location = "dec")) 
+0

Ahh ... это сделал трюк. Спасибо, это сводило меня с ума! –

+0

приветствуется ':)' –

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