2010-07-21 5 views
4

Access 97 DB w/VBA 코드를 Access 2007로 업데이트하고 있습니다. VBA 코드는 DB 파일을 변환 할 때 Access 2007에서 참조하는 DAO 개체를 사용합니다 (먼저 97에서 2002로, 2007로 변환 함).). 내 문제는 구체적으로 두 가지 참조 : "Microsoft DAO 3.6 Object Library"및 "Microsoft Office 12.0 Access 데이터베이스 엔진 Object Library"입니다. 내가 웹에서 읽었던 것들은 ADE 12.0이 DAO 3.6 레퍼런스를 대신 할 것이며, ADE 12.0 상자를 체크하면 모든 것이 작동 할 것이라고합니다. 둘 다 같은 이름의 객체에 대한 참조를 제공하기 때문에이 두 참조는 동시에 검사 할 수 없습니다. 그러나 DAO 3.6 상자를 확인하고 ADE 12.0 상자를 선택하지 않으면 Access에서 "frmLogin"폼을 찾을 수 없습니다. 비주얼 베이직 "ERR"객체 "유형 불일치":Access 2007 업그레이드 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 

디버거 포인트하여 2 ~을 나는 DAO 3.6 상자의 선택을 취소하고 ADE 12.0 체크 박스를 선택하면 나는 13 런타임 오류 에-마지막 줄 :

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 참조는 실제로 C : \ Program Files \ Common Files \ Microsoft Shared \ OFFICE12 폴더의 ACEDAO.DLL을 가리 킵니다. 모든 제안은 정말 감사하겠습니다.

+3

에서 당신이 A2007에서 실행하는 경우, 당신은 단지 DAO의 다음 버전 인 ADE 참조 (사용할 필요가 -가 당신이 그것을 믿지 않으면 DLL 이름을보십시오). 검사 할 때 여전히 컴파일 오류가 발생하면 등록되지 않았거나 regsvr32를 사용하여 수동으로 등록 할 수 있습니다. 그렇지 않으면 다른 참조 문제가 있습니다. 참조 목록을 게시하십시오. 내 내기는 그들 중 몇 가지가 완전히 불필요합니다. 또한 여러 버전의 Access를 실행중인 경우 각 파일을 열기 전에 등록 (즉, 설치)을 마쳐야합니다. –

+0

ADE 12.0 만 선택하면 코드가 오류없이 컴파일됩니까? – HK1

+0

@ David-W-Fenton 왜 지구상에 코멘트 대신 답을 넣지 않았습니까?! – Keng

답변

0

당신이 A2007에서 실행하는 경우, 당신은 ADE 참조 사용할 필요 ( 그냥 DAO의 다음 버전입니다 - 당신이 그것을 믿지 않는 경우 DLL 이름에 봐). 을 검사했을 때 컴파일 오류가 계속 발생하면 등록되지 않았 음을 의미합니다 ( 은 regsvr32를 사용하여 수동으로 등록 할 수 있음). 또는 다른 참조 문제가 있습니다. 참조 목록을 게시하십시오. 내 내기는 중 일부이며 완전히 필요하지 않습니다. 또한 버전의 Access를 여러 개 실행하는 경우 각 파일을 열기 전에 각자가 등록을 마치도록 (즉, 설치)해야합니다.

은 - 데이비드-W-펜톤 8월 5일 '10 20시 13분

관련 문제