Найти причину ошибки

Условие:

Access.

Условие: Access.

Решение:

Предмет: Информационные технологии
Раздел: Базы данных, язык запросов SQL в Microsoft Access (перекрёстные запросы)


🔍 Проблема:

На скриншоте показано сообщение об ошибке Microsoft Access:

"[Заказы]![Скидка_за_просрочку, %]" не распознается ядром СУБД Microsoft Access как допустимое имя поля или выражение.

Это означает, что Access не может интерпретировать имя поля [Скидка_за_просрочку, %] в таблице [Заказы] как корректное, из-за использования запятой и знака процента в имени поля.


🛠 Причина ошибки:

В Microsoft Access имена полей не должны содержать символов, которые могут быть интерпретированы как операторы или спецсимволы (например, запятая, процент, точка с запятой и др.).

Поле [Скидка_за_просрочку, %] содержит запятую и %, что делает его недопустимым для прямого использования в SQL-запросе.


✅ Решение:

Есть два возможных пути решения:


Вариант 1: Переименовать поле

Наиболее надёжный способ — переименовать поле в таблице [Заказы], чтобы оно не содержало спецсимволов. Например:

  • Было:
    [Скидка_за_просрочку, %]

  • Стало:
    [Скидка_за_просрочку]
    или
    [Скидка_просрочка_процент]

После этого исправьте запрос, чтобы использовать новое имя поля.


Вариант 2: Использовать функцию [] и AS для псевдонима (менее надёжный)

Иногда можно попробовать использовать псевдоним поля через AS, например:

SELECT [Заказы].[Скидка_за_просрочку, %] AS [Скидка]

Но в случае с перекрёстным запросом (Crosstab Query) Access может всё равно не распознать поле с недопустимыми символами.


✏️ Рекомендации:

  • Избегайте в названиях полей:
    • Пробелов
    • Запятых
    • %, $, #, @ и других спецсимволов
  • Используйте подчёркивания или вербальные обозначения вместо символов:
    • [Процент_скидки] вместо [Скидка, %]

💡 Пример исправленного запроса

Если вы переименовали поле в [Скидка_за_просрочку], то запрос может выглядеть так:

TRANSFORM Sum([Исходные данные].[Количество]*[1-Заказы].[Скидка_за_просрочку]*[Сумма к оплате]) 
SELECT [Исходные данные].[Название_товара] 
FROM [Исходные данные] 
INNER JOIN [1-Заказы] ON [Исходные данные].[ID_товара] = [1-Заказы].[ID_товара] 
GROUP BY [Исходные данные].[Название_товара] 
PIVOT Format([Дата_время_доставки_фактическая], "mmm") & "-" & Year([Дата_время_доставки_фактическая]);

Если нужно — помогу адаптировать запрос под вашу структуру данных.

Не нашли нужного вам решения? Оставьте заявку и наши авторы быстро и качественно помогут вам с решением.
Оставить заявку
Работа вам нужна срочно. Не волнуйтесь, уложимся!
  • 22423 авторов готовы помочь тебе.
  • 2402 онлайн