Ссылка на таблицу доступа VBA в запросе SQL - PullRequest
0 голосов
/ 31 мая 2018

У меня возникли проблемы с выполнением кода SQL в VBA Access, когда я ссылаюсь на определенные имена таблиц.

Например,

INSERT INTO TempTable (ClientName) SELECT DISTINCT 1_1_xlsx.ClientName FROM 1_1_xlsx'<--does not work

Код работает нормально, когда я изменил таблицуимя от 1_1_xlsx до Stuff.

INSERT INTO TempTable (ClientName) SELECT DISTINCT Stuff.ClientName FROM Stuff '<--works

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

Кроме того, есть ли способы, которыми я мог бы использовать 1_1_xlsx в качестве имени таблицы?Или я просто пишу свой запрос неправильно?

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Во многих базах данных на основе SQL вы не можете иметь имя таблицы или имя поля, начинающееся с цифры.

Я подозреваю, что это является основной причиной вашей проблемы.Хотя Access позволит это, я видел, как это вызывало проблемы в прошлом.

0 голосов
/ 31 мая 2018

Проблема в числе в начале имени таблицы.Это плохо - потому что это сбивает с толку парсер.

Это неверное имя таблицы, но SQL позволяет вам определять псевдонимы таблиц.И в этом случае вам даже не нужно повторять имя таблицы.Итак, вот два простых решения:

INSERT INTO TempTable (ClientName)
    SELECT DISTINCT ClientName
    FROM 1_1_xlsx;

Или:

INSERT INTO TempTable (ClientName)
    SELECT DISTINCT t.ClientName
    FROM 1_1_xlsx as t

Нет причин использовать полное имя таблицы в качестве псевдонима.Это только затрудняет написание и чтение запроса.

0 голосов
/ 31 мая 2018

попробуйте это:

INSERT INTO TempTable (ClientName) SELECT DISTINCT [1_1_xlsx].ClientName FROM [1_1_xlsx]
...