Ошибка выполнения 3825 в MS Access

Я пытаюсь объединить 5 баз данных в одну. 5 баз данных имеют одинаковые таблицы, одинаковую структуру и одинаковые поля для каждой таблицы, а также одно и то же имя для таблиц и полей. Просто данные в каждой базе данных разные, так как они были взяты 5 разными участниками. Итак, я пытаюсь объединить все записи в одну. Итак, я в основном пытаюсь написать запрос для каждой таблицы, а затем запустить код VBA для запуска запросов один за другим. Запрос

INSERT INTO SoilMeasurementTable IN 'C:\Users\vtalreja\Desktop\Common.accdb'
SELECT * FROM SoilMeasurementTable;

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

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

«Выбор * нельзя использовать в запросе INSERT INTO, если исходная или целевая таблица содержит многозначное поле».

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


person user613037    schedule 15.02.2011    source источник


Ответы (2)


Многозначное поле — это новая функция, представленная в Access 2007, и поддерживается только в новом формате ACCDB, а не в старом формате MDB.

Новые пользователи Access часто предпочитают многозначные поля, потому что они кажутся удобными. И они могут быть такими для интерактивного использования. Но когда вы пытаетесь использовать код для управления данными, многозначные поля создают проблемы. Вы нашли один; сообщение об ошибке ясно... вы не можете использовать SELECT * для инструкции INSERT с многозначными полями.

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

Если это слишком много работы, подождите, пока кто-нибудь не предложит более простое решение, которое будет работать с вашими текущими структурами базы данных.

person HansUp    schedule 15.02.2011
comment
+1 Я согласен с тем, что следует избегать полей с несколькими значениями. Они предназначены для использования с Sharepoint. Вы можете прочитать: /4593801#4593801" title="access 2010 sql, как скопировать строку с полем вложения"> stackoverflow.com/questions/4591813/ - person Fionnuala; 15.02.2011
comment
Многозначные поля — это зло. Они могут быть необходимым злом (т. е. для совместимости с Sharepoint), но это не делает их не-злом. - person RolandTumble; 15.02.2011
comment
Является ли решение иметь явное предложение SELECT? - person David-W-Fenton; 16.02.2011

Как упоминал @David-W-Fenton в комментариях к другому ответу, изменение оператора SELECT для явного перечисления полей должно решить проблему. Это было для меня. Другими словами, измените:

INSERT INTO SoilMeasurementTable IN 'C:\Users\vtalreja\Desktop\Common.accdb'
SELECT * FROM SoilMeasurementTable

to:

INSERT INTO SoilMeasurementTable (field1, field2, field3) IN 'C:\Users\vtalreja\Desktop\Common.accdb'
SELECT field1, field2, field3 FROM SoilMeasurementTable
person Eric Barr    schedule 07.05.2016