Конфликт ссылок DAO при обновлении Access 2007 - PullRequest
4 голосов
/ 21 июля 2010

Я обновляю Access 97 DB с кодом VBA для Access 2007. Код VBA использует объекты DAO, на которые ссылается Access 2007, когда я преобразовывал файлы db (сначала с 97 по 2002, а затем в 2007).В частности, моя проблема связана с двумя ссылками: «Библиотека объектов Microsoft DAO 3.6» и «Библиотека объектов ядра базы данных Microsoft Office 12.0 Access».В материалах, которые я читал в Интернете, говорится, что ADE 12.0 должен заменить ссылку на DAO 3.6, и что, просто установив флажок ADE 12.0, все должно работать.Поскольку оба они предоставляют ссылки на объекты с одинаковыми именами, эти две ссылки не могут быть проверены одновременно.Однако, если установить флажок DAO 3.6 и оставить флажок ADE 12.0 не установленным, Access не сможет найти существующую форму "frmLogin".Если снять флажок DAO 3.6 и установить флажок ADE 12.0, я получу ошибку времени выполнения 13: «несоответствие типов» для объекта «Err» в Visual Basic:

Public Function basGetString(ByVal lngStringID As Long, ParamArray varStringArgs() _
      As Variant) As String
     Dim intTokenCount As Integer
     Dim strResString As String

On Error GoTo err_basGetString

    strResString = basLoadString(lngStringID)

    If Not IsMissing(varStringArgs) Then
        intTokenCount = 0

         Do While intTokenCount <= UBound(varStringArgs)
              strResString = basReplaceToken(strResString, _
              m_cstrArgToken, varStringArgs (LBound(varStringArgs) + intTokenCount),_   
              1, 1)

              intTokenCount = intTokenCount + 1
         Loop
    End If

    strResString = basReplaceToken(strResString, m_cstrVBCRLFToken, vbCrLf, -1, 1)
    basGetString = strResString

 exit_basGetString:
      Exit Function
 err_basGetString:
      Err.Raise Err.Number, "basGetString", Err.Description

 End Function

Отладчик указывает наот второй до последней строки:

Err.Raise Err.Number, "basGetString", Err.Description

Я успешно устранял неоднозначность объектов набора записей, что разрешило многие другие конфликты ссылок в коде: Dim rs As DAO.Recordset or Dim rs As ADODB.Recordset, но это не сработало с объектом Err,То есть я пытался переписать объект Err как объект DAO Error.Я также не смог найти другую ссылку в редакторе VB, которая устраняет эту ошибку ссылки, но также не конфликтует с другой ссылкой ADE 12.0.Итак, я не понимаю, почему установка флажка ADE 12.0 не решает все мои проблемы.И мне трудно понять, как переписать код, чтобы он ссылался на библиотеку ADE 12.0.Наконец, ссылка ADE 12.0 действительно указывает на ACEDAO.DLL в следующей папке: C: \ Program Files \ Common Files \ Microsoft Shared \ OFFICE12.Буду очень признателен за любые предложения.

1 Ответ

0 голосов
/ 15 апреля 2012

Если вы работаете в A2007, вам нужно использовать ссылку ADE (которая является просто следующей версией DAO - посмотрите на имя DLL, если вы не верите в это).Если вы по-прежнему получаете ошибки компиляции, когда это проверено, то это означает, что он либо не зарегистрирован (и вы можете зарегистрировать его вручную с помощью regsvr32), либо у вас есть другая проблема с ссылками.Пожалуйста, оставьте свой список ссылок.Я держу пари, что некоторые из них совершенно не нужны.Кроме того, если вы используете несколько версий Access, вам нужно дать каждой из них завершить регистрацию (т.е. установку) перед открытием любых файлов.

- David-W-Fenton 5 августа '10в 20: 13

...