Q&A

  • 급질문]Report실행후 동일 App를 다시수행하면 Error가 납니다!!!
수고하십니다.

델파이 4.0버전을 사용하고 있으며 3Tier환경에서 사용합니다.



Server(Pro*C -> 업무처리 Logic이 구사되어 있음)

Tuxedo(중계처리)

Client(관련데이터 송수신 처리)



PC : 256M 866MHZ Win-Me



***미리보기 버튼클릭하여 처리하는 부분은 다음과 같습니다.



procedure TMT7878.PreBtnClick(Sender: TObject);

var

MDIChld : TWnChildForm;

ret : Integer;

tmp_ch : String;

begin

Screen.Cursor := crHourGlass;

if (KeyfldChk(ALL_FLD) = FALSE) then begin

Screen.Cursor := crDefault;

exit;

end;



memset(@ai, 0, sizeof(SUBACT302R_INPDATA)); // ai 초기화

memset(@ao, 0, sizeof(SUBACT302R_OUTDATA)); // ao 초기화



case Dmatoi(sJobgb.Text) of

1,2 : strpcopy(ai.sJobGb, sJobgb.Text); // 업무구분

end;

tmp_ch := Copy(sChgb.Text, 1, 2);

strpcopy(ai.sChgb, tmp_ch);

// strpcopy(ai.sYymm, sYymm.Text); // 해당년월

tmpYyyymm := Edit_Yy.Text + Edit_Mm.Text;

strpcopy(ai.sYymm, tmpYyyymm); // 해당년월



// 출력 Rq

ret := DmRqRp( SERVER, 'bacg302r', '0',

sizeof(SUBACT302R_INPDATA), @ai, @ao, M_Code );



Screen.Cursor := crDefault;

if NOT((ret < 0) OR (M_Code[0] = 'E')) then begin

tmp_yyyy := Edit_yy.Text;

tmp_mm := Edit_Mm.Text;

tmp_Chgb := sChgb_Panel.Caption;

Application.CreateForm( TQT7878, QT7878 );

QT7878.QRPT7878.Preview;

MDIChld := TWnChildForm(MainForm.MDIChildren[0]);

MDIChld.CloseBtn.SetFocus;

QT7878.QRPT7878.Free;

end;

MsgDsp(@M_Code);

sJobgb.SetFocus;

end;



이상의 코드를 사용하고 있습니다.

몇번인지는 정확하지 않으나 여러번 다시 들어가서 미리보기를 실행하면



"Access violation at address FABEC7B5 . Read of address FABEC7B5"

에러 메세지가 나옵니다.

어디가 잘못된 것일까요?



답변주시면 감사하겠습니다.

1  COMMENTS
  • Profile
    major 2001.06.05 00:57
    박성호 wrote:

    > 수고하십니다.

    > 델파이 4.0버전을 사용하고 있으며 3Tier환경에서 사용합니다.

    >

    > Server(Pro*C -> 업무처리 Logic이 구사되어 있음)

    > Tuxedo(중계처리)

    > Client(관련데이터 송수신 처리)

    >

    > PC : 256M 866MHZ Win-Me

    >

    > ***미리보기 버튼클릭하여 처리하는 부분은 다음과 같습니다.

    >

    > procedure TMT7878.PreBtnClick(Sender: TObject);

    > var

    > MDIChld : TWnChildForm;

    > ret : Integer;

    > tmp_ch : String;

    > begin

    > Screen.Cursor := crHourGlass;

    > if (KeyfldChk(ALL_FLD) = FALSE) then begin

    > Screen.Cursor := crDefault;

    > exit;

    > end;

    >

    > memset(@ai, 0, sizeof(SUBACT302R_INPDATA)); // ai 초기화

    > memset(@ao, 0, sizeof(SUBACT302R_OUTDATA)); // ao 초기화

    >

    > case Dmatoi(sJobgb.Text) of

    > 1,2 : strpcopy(ai.sJobGb, sJobgb.Text); // 업무구분

    > end;

    > tmp_ch := Copy(sChgb.Text, 1, 2);

    > strpcopy(ai.sChgb, tmp_ch);

    > // strpcopy(ai.sYymm, sYymm.Text); // 해당년월

    > tmpYyyymm := Edit_Yy.Text + Edit_Mm.Text;

    > strpcopy(ai.sYymm, tmpYyyymm); // 해당년월

    >

    > // 출력 Rq

    > ret := DmRqRp( SERVER, 'bacg302r', '0',

    > sizeof(SUBACT302R_INPDATA), @ai, @ao, M_Code );

    >

    > Screen.Cursor := crDefault;

    > if NOT((ret < 0) OR (M_Code[0] = 'E')) then begin

    > tmp_yyyy := Edit_yy.Text;

    > tmp_mm := Edit_Mm.Text;

    > tmp_Chgb := sChgb_Panel.Caption;

    > Application.CreateForm( TQT7878, QT7878 );

    > QT7878.QRPT7878.Preview;

    > MDIChld := TWnChildForm(MainForm.MDIChildren[0]);

    > MDIChld.CloseBtn.SetFocus;

    > QT7878.QRPT7878.Free;

    > end;

    > MsgDsp(@M_Code);

    > sJobgb.SetFocus;

    > end;

    >

    > 이상의 코드를 사용하고 있습니다.

    > 몇번인지는 정확하지 않으나 여러번 다시 들어가서 미리보기를 실행하면

    >

    > "Access violation at address FABEC7B5 . Read of address FABEC7B5"

    > 에러 메세지가 나옵니다.

    > 어디가 잘못된 것일까요?

    >



    major



    아 저도 가끔 그런적이 있었는 데 저 같은 경우에는 Free라는 것보다는 Destroy를 사용하니 에러가 없어지더군여...^^;

    어쨌든 제가 알기로는 Free에서 에러가 나는 것으로 알고 있습니다.

    맞나?

    그럼 즐프하세요..

    혹 그래도 안 되시면 제게 멜을 주세요..

    그럼....