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