На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Chow, Bas, MIF
  
> Присоединение таблицы к БД , Access
    Хочу присоединить таблицу из БД .accdb в БД такого же формата провайдером Microsoft.ACE.OLEDB.12.0

    ExpandedWrap disabled
      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 не понимает.
    Как это побороть?
      На какой строке ошибка, нам предлагается угадать?

      См. [на редактирование] Как упростить жизнь отвечающему (сообщение #3057130)
        Цитата Akina @
        какой строке ошибка, нам предлагается угадать?

        ExpandedWrap disabled
          adoxCat.Tables.Append adoxTbl

        А если обновлять связь, то на строке:
        ExpandedWrap disabled
          tbl.Properties("Jet OLEDB:Link Datasource") = new_bd_path


        Да и Access 2010!
        Сообщение отредактировано: гарикс -
          Ну меня вообще очень смущает, что Вы используете ACE провайдера, а проперти рисуете для Jet.
          Попробуйте для связанной таблицы просмотреть текущие проперти - действительно ли они имеют именно такое имена?
            Цитата Akina @
            Попробуйте для связанной таблицы просмотреть текущие проперти - действительно ли они имеют именно такое имена?

            Да,именно такие имена. Я уже смотрел
              То есть ежели для существующей таблицы проделать что-то вроде
              ExpandedWrap disabled
                ' получаем ссыль на таблицу
                Set adoxTbl = adoxCat.Tables(strTblName)
                ' получаем значение свойства
                strTmp = adoxTbl.Properties("Jet OLEDB:Link Datasource")
                ' присваиваем этому свойству то же самое значение
                adoxTbl.Properties("Jet OLEDB:Link Datasource") = strTmp

              то первые два оператора выполнятся нормально, а третий приведёт к ошибке?
              Сообщение отредактировано: Akina -
                Цитата Akina @
                то первые два оператора выполнятся нормально, а третий приведёт к ошибке?

                Да, именно так.
                  Гм... а ошибка та же самая - типа кривой объект? ну потому как "объект не задан" - это вряд ли... тогда остаётся вариантов-то кот наплакал - или эта проперть в этих условиях почему-то RO, или что-то с правами на ресурсе, что опять-таки приводит к RO. Больше ничего даже представить не получается...

                  Если не влом, может, попробуете сделать минимальный сет с проблемой (две связанных БД плюс минимальный код в одной из них)?
                    Сделал пробник, таблицы линкуются, а в проекте - ошибка. Блин, куда смотреть...

                    Добавлено
                    Оказалось, что в БД, куда линковалась таблица был запрос, работавший когда-то на на уже несуществующих таблицах базы.
                    Удалил его и всё заработало. Целый день потерял на эту ерунду.
                    Надо написать прибамбас на поиск в БД "мёртвых" запросов!
                    Спасибо за внимание :)
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0522 ]   [ 16 queries used ]   [ Generated: 19.03.24, 05:44 GMT ]