Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.146.37.35] |
|
Данный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Хочу присоединить таблицу из БД .accdb в БД такого же формата провайдером Microsoft.ACE.OLEDB.12.0
Public Sub ADOXCreateLinkTable(cnn As ADODB.Connection, strFileName As String, _ strTblName As String, _ Optional strLinkTblName As String = "") 'создание связанной таблицы MS ACCESS 'strFileName - путь к БД ACCESS, в которой находится таблица 'strTblName - имя таблицы в исходной БД 'strLinkTblName - имя, под которым будет создана связанная таблица 'если strLinkTblName опущено, то создается таблица с именем strFileName Dim adoxCat As ADOX.Catalog Dim adoxTbl As New ADOX.Table Dim strType As String Set adoxCat = New ADOX.Catalog 'получаем ссылку на текущую БД adoxCat.ActiveConnection = cnn If strLinkTblName = "" Then strLinkTblName = strTblName With adoxTbl .ParentCatalog = adoxCat .Name = strLinkTblName 'имя создаваемой таблицы 'путь к файлу .Properties("Jet OLEDB:Link Datasource").Value = strFileName 'имя таблицы в исходном файле .Properties("Jet OLEDB:Remote Table Name").Value = strTblName .Properties("Jet OLEDB:Create Link").Value = True End With adoxCat.Tables.Append adoxTbl 'добавляем таблицу в БД Set adoxCat = Nothing Set adoxTbl = Nothing End Sub Ошибка: Указан недопустимый объект, или объект более не задан. Провайдер Microsoft.Jet.OLEDB.4.0 формат .accdb не понимает. Как это побороть? |
Сообщ.
#2
,
|
|
|
На какой строке ошибка, нам предлагается угадать?
См. [на редактирование] Как упростить жизнь отвечающему (сообщение #3057130) |
Сообщ.
#3
,
|
|
|
Цитата Akina @ какой строке ошибка, нам предлагается угадать? adoxCat.Tables.Append adoxTbl А если обновлять связь, то на строке: tbl.Properties("Jet OLEDB:Link Datasource") = new_bd_path Да и Access 2010! |
Сообщ.
#4
,
|
|
|
Ну меня вообще очень смущает, что Вы используете ACE провайдера, а проперти рисуете для Jet.
Попробуйте для связанной таблицы просмотреть текущие проперти - действительно ли они имеют именно такое имена? |
Сообщ.
#5
,
|
|
|
Цитата Akina @ Попробуйте для связанной таблицы просмотреть текущие проперти - действительно ли они имеют именно такое имена? Да,именно такие имена. Я уже смотрел |
Сообщ.
#6
,
|
|
|
То есть ежели для существующей таблицы проделать что-то вроде
' получаем ссыль на таблицу Set adoxTbl = adoxCat.Tables(strTblName) ' получаем значение свойства strTmp = adoxTbl.Properties("Jet OLEDB:Link Datasource") ' присваиваем этому свойству то же самое значение adoxTbl.Properties("Jet OLEDB:Link Datasource") = strTmp то первые два оператора выполнятся нормально, а третий приведёт к ошибке? |
Сообщ.
#7
,
|
|
|
Цитата Akina @ то первые два оператора выполнятся нормально, а третий приведёт к ошибке? Да, именно так. |
Сообщ.
#8
,
|
|
|
Гм... а ошибка та же самая - типа кривой объект? ну потому как "объект не задан" - это вряд ли... тогда остаётся вариантов-то кот наплакал - или эта проперть в этих условиях почему-то RO, или что-то с правами на ресурсе, что опять-таки приводит к RO. Больше ничего даже представить не получается...
Если не влом, может, попробуете сделать минимальный сет с проблемой (две связанных БД плюс минимальный код в одной из них)? |
Сообщ.
#9
,
|
|
|
Сделал пробник, таблицы линкуются, а в проекте - ошибка. Блин, куда смотреть...
Добавлено Оказалось, что в БД, куда линковалась таблица был запрос, работавший когда-то на на уже несуществующих таблицах базы. Удалил его и всё заработало. Целый день потерял на эту ерунду. Надо написать прибамбас на поиск в БД "мёртвых" запросов! Спасибо за внимание |