Я обновляю код доступа 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. Любые предложения будут действительно оценены.
Если вы работаете в A2007, вы должны использовать ссылку ADE (который только в следующей версии DAO - есть посмотрите на имя DLL, если вы этому не верите). Если вы все еще получаете ошибки компиляции, когда это проверено, то это означает, что он либо не зарегистрирован (и вы можете зарегистрировать его вручную с помощью regsvr32), либо у вас есть другая ссылочная проблема. Пожалуйста, разместите свой список ссылок. Моя ставка заключается в том, что некоторые из них совершенно не нужны. Кроме того, если вы используете несколько версий Access, вы должны разрешить каждому из них завершить регистрацию (то есть, установить), прежде чем открывать любые файлы. –
Если вы проверяете только ADE 12.0, ваш код компилируется без ошибок? – HK1
@ David-W-Fenton, почему вы не положили это в ответ вместо комментария ?! – Keng