2013-03-19 5 views
0

ODAC v5에서 v8.2.8로 소프트웨어 제품군을 업그레이드하는 데 관심이 있습니다.DBAccess.pas에서 어설 션 오류가 발생했습니다.

특히 한 응용 프로그램이 문제를 일으키는 중입니다. 이 응용 프로그램은 dll로 구현 된 보조 응용 프로그램 집합 중 하나를로드합니다. 그것 자체 데이터베이스에 연결되어, 나는 매우 행복하게 다양한 ODAC 단위를 단계별로 수 -

LibHandle := LoadLibrary(PChar(dllname)); 
if LibHandle <> 0 then 
begin 
    @showForm := GetProcAddress(LibHandle,'ShowMainDllForm'); 
    if (@showForm <> nil) then 
    begin 
    try 
     ShowForm(Application.Handle, @FGlobalVars, 1); 

런처가 괜찮습니다.

그러나 dll은 즉시 커서를 열려고 시도하는 것을 제외합니다. 오류는 MemDs.pas에서 호출 된 DBAccess.pas 장치의 어설 션 오류입니다. 나는 이걸 밟았으며 주장의 실패가 옳았다는 것을 보여 주었다. Assert(FieldDesc is TCRFieldDesc)은 을 MemDS.CreateFieldDefs()에서받습니다.

나는 혼란 스럽습니다. 어떻게 하나의 호출 방법이 잘 작동하는 (런처 앱) 다른 하나 (DLL)가 항상 실패 할 수 있습니까? 사람이 내가 어떤 정보를 감사하겠습니다이 분야에서 어려움을 경험 한 경우

그러나 얇은 그것은 우리는 이미이 문제를 해결 한

+0

귀하가 제공 한 코드는 라이브러리와 호출의 로딩을 보여줍니다 그 중 오류의 원인이되는 코드의 구현은 아닙니다. 라이브러리에 사용 된 DB 객체를 생성하기위한 주요 응용 프로그램, 라이브러리 및 스크립트의 전체 코드를 제공하십시오. 우리는 문제를 재현하고 수정하려고 노력할 것입니다. – Devart

+0

그 이유는 복제해야 할 구성 요소 종속성이 많이 있기 때문입니다. 내 다른 질문에 대한 귀하의 대답은 유익합니다 ... 나는 다시 연락 할 것입니다. –

+0

@devart - 나는 어설 션 라인을 없애면 문제가 해결된다는 것을 입증했습니다. 나는 TypeInfo가'AssignConnect' 메소드에서 없어지고있는 것 같아요. 당신은 논평 할 수 있습니까? 귀하의 코드를 잘못 이해하면 우리에게 이상적이지 않습니다. 관련성이 있다고 생각되는 버전 5에서 변경된 사항이 있습니까? –

답변

1

소리가 있습니다. 당신은 최신 ODAC 버전 8.6.12을 다운로드하거나 어설를 호출하는 라인을 수정하실 수 있습니다 다음 TCustomDADataSet.GetFieldType 방법

replace 
    Assert(FieldDesc is TCRFieldDesc); 
with 
    Assert(IsClass(FieldDesc, TCRFieldDesc)); 
+0

환상적! 업그레이드를 위해 구매 주문을 제기하는 중입니다 만 지금은이를 통해 볼 수 있습니다. 많은 감사합니다. –

+0

나는 우리 라이센스 기간이 끝나기 전에 다운로드를 시도했다는 사실을 제 동료에게 말했습니다. 그는 아무 것도 다운로드 할 방법을 찾을 수 없었지만 평가판을 다운로드했습니다. 우리를 도울 수 있습니까? 전에 말했듯이, 우리는 새롭게하고 있지만 이것은 시간이 걸리는 것 같습니다. –

+0

구독 기간이 만료 된 경우 최신 버전에 액세스하려면 구독을 갱신해야합니다. Subscription Renewals 섹션의 Renewals & Upgrades 탭에있는 웹 사이트 devart.com/odac/ordering.html에서 Subscription을 업데이트 할 수 있습니다.평가판은 웹 사이트 (devart.com/odac/download.html)에서 다운로드 할 수 있습니다. 추신 이 문제는 8.5.10 버전에서 수정되었습니다. 등록 된 사용자 영역에서이 버전을 사용할 수 있다면 문제를 해결하는 데 사용할 수 있습니다 – Devart

1

우리가 사용하는 DEVART MySQL은, 및 SQL 커넥터에

합니다. MySQL (MyDAC) 연결에 대한 정확한 문제점을 경험했습니다. 그러나 내가 발견 한 것은 다음과 같습니다. DBAccess.pas 파일에서 위의 코드가 이미 변경되었습니다.

어설 션 (IsClass (FieldDesc, TCRFieldDesc)));

하지만 여전히 동일한 어설 션 오류가 발생했습니다. 내가 조금 더 밟은하고 CRFunctions 장치에서 발견, 나는 다음과 같이 변경했고, 지금 내 서버 연결은 DLL 파일에서 완벽하게 작동합니다 :

begin 
    if IsLibrary then 
    Result := IsClassByName(Obj, AClass) 
    else 
    //------------------------------------ 
    // Danny MacNevin : October 3,2013 
    // commented out the below line to fix an Assertion Error 
    // using the TMyConnection in a dll file. 
    // It was being called from the DBAccess.pas file at line: 7251 
    // To put this file back to normal, remove the line I added, and 
    // uncomment the line below... 
    //------------------------------------ 
    //Result := Obj is AClass; 
    Result := IsClassByName(Obj, AClass) //Line replaced by Danny 
end;