Чтобы использовать механизм данных ACE? Ну, начиная с office / access 2013, при установке Access не открывается рабочая копия ACE. (до 2013 года при простой установке Access была установлена + открыта рабочая копия ACE для использования, скажем, со сторонними приложениями. (VB6, FoxPro, c ++,. net).
Теперь устанавливаем Access НЕ предоставляет рабочую копию механизма данных ACE для третьих сторон.
Итак, просто установите механизм данных ACE отсюда:
https://www.microsoft.com/en-us/download/details.aspx?id=54920
И убедитесь, что вы устанавливаете версию с правильным размером бит (X86 для x32 бит). После этого вы можете подключиться к файлу доступа (accDB). Примечание для файлов "mdb" вам не нужно ничего устанавливать, поскольку механизм "JET" по умолчанию устанавливается как часть windows в течение более 20 лет.
После установки ACE (более новой версии JET) с использованием поставщиков ODB C или oleDB поставщики в net должны работать нормально. Однако вы должны принудительно использовать проект. net как x86 вместо «any cpu».
И если вы хотите перенести данные из баз данных Access в sql сервер? Небольшой повод "катить свой" с. net, Я настоятельно рекомендую вам использовать SSMA (sql помощник по миграции сервера для Access). Это можно найти здесь:
Вышеупомянутое не только перенесет данные, но и настроит существующие индексы, сохранит существующий PK и даже загрузит (сохранит) связи таблиц без изменений. Если у вас всего несколько простых таблиц, вы даже можете использовать SQL manger для импорта из Access. Но если вы хотите сэкономить массу работы и вам не придется заново создавать PK, вам не придется заново создавать индексы и не создавать заново существующие связи таблиц? Тогда вы сэкономите огромное количество работы, используя помощник по миграции Sql на сервер sql. SSMAA также автоматически добавит столбец «отметка времени» (версия строки) в каждую таблицу. Итак, я настоятельно рекомендую использовать этот инструмент. (Я также рекомендовал вам добавить столбец TS в каждую таблицу - net будет использовать его для проблем с параллелизмом, как и Access, если вы используете Access в качестве внешнего интерфейса для sql сервера).
Вы найдите это здесь: https://www.microsoft.com/en-us/download/details.aspx?id=54255
У этого инструмента есть «немного» кривой обучения, но это действительно лучший инструмент для этой работы.
Опять же, убедитесь, что вы используете x86 или x64 битную версию - есть две загрузки. И еще раз: эта утилита не будет работать, если вы не установили открытую копию ACE.
Edit - возможное предложение - использовать код доступа.
Рассмотрите возможность использования Access. «Причина» в том, что запросы на добавление доступа (sql) имеют «особую» возможность работать между двумя разными соединениями одновременно !. Вы не можете сделать это с большинством поставщиков. net. Фактически, вы не можете сделать это с большинством систем.
Это особенно актуально, если имя таблицы в этих «50» базах данных совпадает. И если схема в 50 базах данных такая же.
Итак, из пустой новой базы данных доступа?
Мы устанавливаем ОДНУ связанную таблицу с таблицей sql сервера. (используйте вкладку exernal data - ссылка на одну sql серверную таблицу).
Вы можете переименовать эту связанную таблицу во что угодно. Предположим, что
tblOutput
Теперь настройте еще одну связанную таблицу с первой базой данных Access (1 из 50).
Мы делаем это, так как теперь мы можем запустить доступ к построителю запросов. Перетащите исходную таблицу и ЗАТЕМ выберите на ленте запрос на добавление. Выберите связанную таблицу sql сервера.
Причина, ПОЧЕМУ мы это делаем, заключается в том, что вы можете использовать построитель GUI для сопоставления столбцов. Итак, у вас есть столбец от и столбец до. Это делается путем выбора поля (полей) из поля со списком в построителе запросов.
Пока? Мы не написали ни строчки кода. Теперь вы можете запустить этот запрос на добавление, и мы только что отправили данные на сервер sql. Итак, таблица 1. готова.
Теперь, если остальные 49 баз данных такие же?
Затем мы просто пишем небольшой l oop для связи с каждой из баз данных, а затем выполняем наш запрос на добавление.
Единственный вопрос, является ли имя таблицы в каждой из 50 одинаковых или разных? наш код vba будет таким:
Sub Main()
' process all mdb or accdb files in a folder
Dim strDir As String
Dim strOneFile As String
strDir = "c:\test2\*.accDB"
strOneFile = Dir(strDir)
Do While strOneFile <> ""
' link to this database
' run the append query to send data to sql server
Debug.Print strOneFile
DoCmd.TransferDatabase acLink, "MS access", strOneFile, acTable, "tblCustomers", "tblSource", False
' above links table to tblSource
' now run append query:
CurrentDb.Execute "qryAppend", dbFailOnError
strOneFile = dir()
Loop
End Sub