Как прекратить блокировку Windows на файл в ODBC-соединении? - PullRequest
0 голосов
/ 04 декабря 2011

Я использую Access для импорта данных из ряда баз данных SQLite 3, которые имеют одинаковую структуру. У меня есть системный / пользовательский DSN для "Import.db". Моя БД Access связала таблицы с таблицами в Import.db.

Моя цель - импортировать данные через связанные таблицы в таблицы Access, затем удалить Import.db, затем скопировать следующую БД SQLite3 в то же место и назвать ее Import.db, а затем продолжать повторять процесс, пока все не будут импортирован.

Я выбрал этот подход, потому что не знаю, как создавать DSN на лету и связывать таблицы для баз данных SQLite3. SQL Server, да, но не SQLite3. Поэтому я подумал, просто используйте тот же DSN, но измените фактический файл.

Проблема в том, что после открытия моей БД Access и открытия связанных таблиц Access создает блокировку файла Windows на Import.db. Поэтому я не могу удалить и заменить его. Вместо этого я могу импортировать один, затем закрыть Access, снова открыть Access и повторить. Не так жарко.

Предложения

1 Ответ

0 голосов
/ 05 декабря 2011

Вы можете получить строку подключения связанной таблицы с помощью:

Debug.Print CurrentDb.TableDefs("MyLinkedTable").Connect

Теперь у вас есть информация, необходимая для создания запроса, который импортирует без связанной таблицы.

Возможно, выполучите что-то вроде этого:

ODBC;DSN=SQLite3;Database=Z:\Docs\Import.db;StepAPI=0;SyncPragma=NORMAL;
NoTXN=0;Timeout=;ShortNames=0;LongNames=0;NoCreat=0;NoWCHAR=0;
FKSupport=0;JournalMode=;OEMCP=0;LoadExt=;BigInt=0;

Но вам, вероятно, не понадобится большая часть этого, поэтому:

sODBC = "[ODBC;DSN=SQLite3;Database=Z:\Docs\Import.db;]"
''Create table query, but append and update are also easy enough
sSQL = "SELECT * INTO SQLite_Import FROM " & sODBC & ".SQLiteTableNameHere"

CurrentDb.Execute sSQL, dbFailOnError
...