Q&A

  • ActiveForm에서 ADO로 Stream 읽고 오류 발생
ActiveXForm에서 ADO를 사용하여 Stream형태로 저장한 데이타를 읽고는 오류가 발생합니다.

AccessViolation 오류가 나타납니다.

ADOQuery 컴포넌트의 CreateBlobStream 메소드를 사용하는데 한번도 읽지 않고 그냥 생성후 닫으면 오류가 나지 않지만...
단 한번이라도 Read를 하고 나면 항상 오류가 발생합니다.

Trace를 하다보면 AxCtrls.pas의 ParkingWindowProc 프로시져의 최하 마지막부분에서 항상 발생을 하는군요...

제가 작성한 프로시져의 맨 마지막부분에 어떤 코드를 넣든 상관없이 항상 그 맨 마지막 코드에서 오류가 발생합니다.

Stream을 한번이라도 Read하면 발생하구요...
Delphi 5로 작업하고 있습니다.

오류의 원인을 혹시 알고 계신분은 안계십니까?
알고 계신분은 좀 힌트라도 부탁드리겠습니다.
감사합니다.
항상 즐거운 하루가 되세요...

아래는 약간의 소스를 첨부했습니다.

procedure TafxDiagram.btnLoadClick(Sender: TObject);
var
   S, aVersion: String;
   aComp: TComponent;
   aRecord: PMemInfo;
   I: Integer;
begin
     if not qryFlow.Active then
        Exit;
     if qryFlow.RecordCount < 1 then
        Exit;

     if not fncNewDiagram then
        Exit;

     RegisterClasses([TMemNode, TSignNote, TSignText, TDiagramInfo,
                    TSignFlow, TSignNoteLink ]);
     try
        OpenStream := qryFlow.CreateBlobStream(
                qryFlow.FieldByName('dinfo'), bmRead);
        OpenStream.Read(aVersion, HeadSize);
        while OpenStream.Position < OpenStream.Size do
        begin
               aComp := OpenStream.ReadComponent(nil);
////////////////////////////////////////////////////
// 기타 작업 수행
///////////////////////////////////////////////////
        end;
        OpenStream.Free;
        OpenStream := nil;
     except
           on E: Exception do
           begin
                S := '저장된 Diagram정보를 읽어들이는 중 다음과 같은 오류가 ' +
                     '발생하였습니다.' + #13#10#13#10 + E.Message;
                MessageBox(Self.Handle, PChar(S), '메시지', MB_ICONINFORMATION);
                Exit;
           end;
     end;
//     AA.Tag := 0; <= 어떤 코드이던 항상 오류가 나는 부분
0  COMMENTS