2011-02-15 2 views
0

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

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

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

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

"Select * cannot be used in an INSERT INTO query when the source or destination table contains a multivalued field."

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

ответ

1

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

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

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

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

+2

+1 Я согласен, что многозначные поля следует избегать. Они предназначены для использования с Sharepoint. Вы можете прочитать: http://stackoverflow.com/questions/4591813/access-2010-sql-how-do-you-copy-a-row-which-has-an-attachment-field/4593801#4593801 – Fionnuala

+1

Многозначные поля - зло. Они, возможно, являются необходимым злом (т. Е. Для совместимости Sharepoint), но это не делает их незловыми. – RolandTumble

+1

Является ли решение иметь явное предложение SELECT? –

0

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

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

к:

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

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

  • Нет связанных вопросов^_^