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"

에러 메세지가 나옵니다.

어디가 잘못된 것일까요?



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

3  COMMENTS
  • Profile
    변인호 2001.06.06 03:13
    제가 리포트를 부를때 사용하는 프로시저의 일부입니다..



    QFrmReport := TQFrmReport.Create(Self);

    try

    QFrmReport.CleanupInstance; // <-- 요놈을 해주면 별 문제가 없더군요..

    QFrmReport.Conf_Report.Preview;

    finally

    if IsWebComm then timer1.Enabled := True;

    QFrmReport.Free;

    end;



    박성호 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"

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

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

    >

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

  • Profile
    어떤이 2001.06.06 02:22
    뭔가를 Create 한다음엔 자원을 되돌려 줘야 하지 않을 까요?



    Application.CreateForm( TQT7878, QT7878 );

    ..(중략)

    QT7878.Free; <- 폼을 Free해야 하지 않을까요..... 아님말구...



    박성호 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"

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

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

    >

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

  • Profile
    박성호 2001.06.07 19:05
    어떤이님 그리고 도움을 주셨던 여러분들께 정말 감사드립니다.

    Preview를 폼에도 올려놓고 실행할때는 생성한 리포트용으로

    생성한 폼을 Free를 해주어야 하는군요.

    혹시 동일한 문제를 갖고 계신분들은 해보시기 바랍니다.

    어떤이님의 도움으로 몇날몇일동안의 고민거리가 해결되었습니다.

    그리고 글을 올려주시면서 많은 가르침을 주셨던 다른분들께도

    깊은 감사드립니다.

    즐거운 하루 보내세요.



    - 박 성 호 올림 -