2010-07-21 2 views
4

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

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 

Я был успешные объектами устранения неоднозначности Recordset, которые решены многие других ссылающихся конфликтов в коде: 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. Любые предложения будут действительно оценены.

+3

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

+0

Если вы проверяете только ADE 12.0, ваш код компилируется без ошибок? – HK1

+0

@ David-W-Fenton, почему вы не положили это в ответ вместо комментария ?! – Keng

ответ

0

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

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