Q&A

  • Query에 대한 DisableControls가 안 먹힙니다.
Query를 돌려서 DB그리드1에 뿌려진 후에
그 각 레코드에 대한 세부정보를 Query1. AfterScroll을 사용해
DB그리드2에 뿌려주고 있습니다.

문제는 DBGrid1의 내용을 엑셀로 다운로드 하는 펑션을 돌리면
AfterScroll 때문에 시간이 많이 걸립니다. ㅠ_ㅠ

분명 엑셀다운로드 펑션에는 Query1.Fisrt 하기 전에
DisableControls 를 사용했는데 제대로 먹히지 않는것 같습니다.

해결 방법이 있을까요?
델파이 버전은 6.0입니다.



//Query1의 AfterScroll
procedure TFrmBrwLot.Query1AfterScroll(DataSet: TDataSet);
begin

    With Query2 Do Begin
        Close;
        SQL.Clear;
        SQL.LoadFromFile('.\Fails\QryFailList2_1.SQL');
        ParamByName('Item_CD').AsString := DataSet.FieldByName('품목코드').AsString;
        ParamByName('ISRT_DT_FR').AsString := DateToStr(WK_STRT_DT_FR.Date);
        ParamByName('ISRT_DT_TO').AsString := DateToStr(WK_STRT_DT_TO.Date);
        Open;
    End;

end;


//엑셀다운로드 펑션 호출
procedure TFrmBrwLot.ExcelData1Click(Sender: TObject);
begin

    IF TDbgrid(FrmBrwLot.ActiveControl).DataSource.DataSet.Active = False Then Exit;
    DownExcel(TDbgrid(FrmBrwLot.ActiveControl));
    
end;


//엑셀다운로드 펑션
Procedure DownExcel (DBG: TDBGrid);
var
  v   : variant;
  I   : longint;
  Fi  : Integer;
  Save_Cursor:TCursor;
Begin
    IF DBG.DataSource.DataSet.Active = False Then Exit;

    Save_Cursor := Screen.Cursor;
    screen.cursor := crHourGlass;
    try
        v := CreateOLEObject('Excel.Application');
    except
        MessageDlg('Excel이 설치되어 있지 않습니다.', MtWarning, [mbok], 0);
        Exit;
    end;

    v.WorkBooks.Add;

//이 DisableControls가 안 먹힙니다.
    DBG.DataSource.DataSet.DisableControls;
    DBG.DataSource.DataSet.First;


중략

    DBG.DataSource.DataSet.EnableControls;
    screen.cursor := Save_Cursor;

End;
2  COMMENTS
  • Profile
    nilriri™ 2007.01.20 00:51
    이벤트를 없에거나 전역변수를 사용해서 AfterScroll 시작부분에서 빠져 나가도록 코딩하세요. ^^

    DisableControls 은 데이터셋과 연결된 디비그리드에 현재 레코드셋이 변경되는 과정이
    계속해서 보여지는걸 막아줍니다...^^ 내부적으로는 레코드셋의 현재 레코드를 가르키는 포인트가
    계속해서 변하니까..스크롤 이벤트가 일어나겠죠..




  • Profile
    박종철 2007.01.22 19:16
    답변 감사합니다.
    인사가 늦어서 죄송합니다.. ^^;;

    제가 DisableControls에 대해서 잘못 이해하고 있었던 거군요..

    알려주신 방법을 응용해서 해보도록 하겠습니다.
    다시 한번 감사드립니다.. ^^