Код SQL для промежуточного итога не распознает имя таблицы

У меня есть вопрос по созданию промежуточных сумм в MS Access 2010, аналогичный тому, что здесь:

Access 2010 — запрос, показывающий промежуточный итог для несколько записей, удаление старой записи и добавление новой записи в каждой строке

Однако, когда я ввожу эквивалентный код из этого потока, я получаю сообщение об ошибке, говорящее о том, что база данных не может быть найдена (Кажется, Access считает, что таблица, которую я указал, является именем базы данных)

Вот код из оригинальной темы: -

SELECT hbep1.EmployeeID, hbep1.PayPeriodID, 
    (
    SELECT Sum(hbep2.HoursUsed) 
    FROM Hours_by_Empl_PP hbep2
    WHERE hbep2.EmployeeID=hbep1.EmployeeID 
        AND (hbep2.PayPeriodID Between hbep1.[PayPeriodID]-3 
        And hbep1.[PayPeriodID])
    ) AS Sum_of_Hours_last_4_PPs
FROM Hours_by_Empl_PP hbep1;

Вот код, который я ввел в свой запрос: -

SELECT 
    V4_Try.ID_NIS_INV_HDR,
    V4_Try.ID_ITM, 
    V4_Try.RunTot3, 
    V4_Try.BomVsActQty,
    DMin("RunTot3","V4_Try","[ID_Itm]=" & [ID_ITM]) AS IDItmMin,  
    DMax("RunTot3","V4_Try","[ID_Itm]=" & [ID_ITM]) AS IDItmMax, 
    (
       SELECT Sum([V4_Try].[BomVsActQty])
       FROM [V4_Try].[BomVsActQty]
       WHERE [V4_Try].[ID_ITM]=[V4_Try].[ID_ITM]
           AND (IDItmMax < IDItmMin) 
    ) AS RunTot6
FROM V4_Try
ORDER BY V4_Try.ID_ITM, V4_Try.RunTot3;

person Lee Fung Liew    schedule 29.06.2013    source источник


Ответы (2)


Я заметил одну вещь: основной запрос использует DMax() и DMin() для создания некоторых столбцов с псевдонимами.

...
DMin("RunTot3","V4_Try","[ID_Itm]=" & [ID_ITM]) AS IDItmMin,  
DMax("RunTot3","V4_Try","[ID_Itm]=" & [ID_ITM]) AS IDItmMax,
...

а затем подзапрос пытается использовать эти псевдонимы в своем предложении WHERE.

(
   SELECT ...
   WHERE...
       AND (IDItmMax < IDItmMin) 
) AS RunTot6

Я почти уверен, что подзапрос не будет знать псевдонимов столбцов в «родительском» запросе, поэтому они могут быть нераспознанными элементами.

person Gord Thompson    schedule 29.06.2013
comment
+1 -- Сразу. Я не мог указать на это пальцем, но я уверен, что это беспокоило меня. - person Smandoli; 30.06.2013

Начните с выполнения этого запроса:

SELECT * FROM V4_Try;

Затем развивайтесь по сложности. Сначала создайте вложенный запрос. Когда вы знаете, что это работает, попробуйте добавить свои псевдонимы, затем функцию DMax() и так далее. Изолируйте точку, в которой у вас появляется ошибка.

Это процесс исправления запроса.

О, и, пожалуйста, укажите точную ошибку, которую вызывает Access. Кроме того, если это запускается из VBA, сообщите нам об этом, потому что это влияет на устранение неполадок.

person Smandoli    schedule 29.06.2013