Servers 컴포넌트에 있는 엑셀 어플리케이션을 이용했는데요..
워크북 하나에 워크시트 다섯개를 연결 시켰거든요..
각 워크시트마다 다른 쿼리 결과를 저장하는데..
세번째 워크시트는 자신의 쿼리 레코드 카운트를 무시하고
두번째 워크시트에 들어가는 쿼리의 레코드 카운트만큼 데이터를 저장합니다..
다시 말하면
두번째 워크시트에 들어갈 쿼리 레코드 카운트가 50이고
세번째 워크시트에 들어갈 쿼리 레코드 카운트가 20이라면
자신의 것 20개를 찍고나서 50개가 될때까지 쿼리2의 결과를 저장합니다.
왜 이런 일이 생기는 걸까요..
제발 좀 도와주세요..ㅜ.ㅜ
==============================================================================
try
ExcelApplication1.Visible[0] := True ;
ExcelApplication1.Caption :='엑셀 테스트';
ExcelApplication1.WorkBooks.Add(xlWBATWorksheet,0);
ExcelWorkBook1.ConnectTo(ExcelApplication1.workbooks.Item[1]);
ExcelWorksheet1.ConnectTo(ExcelWorkBook1.sheets[1] as _worksheet);
ExcelWorksheet2.ConnectTo(ExcelWorkBook1.sheets[1] as _worksheet);
ExcelWorksheet3.ConnectTo(ExcelWorkBook1.sheets[1] as _worksheet);
ExcelWorksheet4.ConnectTo(ExcelWorkBook1.sheets[1] as _worksheet);
ExcelWorksheet5.ConnectTo(ExcelWorkBook1.sheets[1] as _worksheet);
except
on E: Exception do begin
showmessage(E.message);
ExcelApplication1.Disconnect;
end;
===========================================================================
procedure TF_execl.btn_MovedataClick(Sender: TObject);
var i, j :Integer ;
Myrange:Range;
begin
try
with Excelworksheet4 do
begin
for i:= 1 to Query1.FieldCount do
Cells.item[2,i] := Query1.Fields[i-1].Fullname ;
Query1.First;
for i:= 3 to Query1.Recordcount+2 do
begin
for j:=1 to Query1.FieldCount do
begin
Cells.Item[i,j] :=char(39)+Query1.Fields[j-1].AsString;
end;
Query1.next;
end;
myrange := Range[Cells.Item[2,1],Cells.Item[Query1.recordCount+2,Query1.FieldCount]];
myRange.Columns.AutoFit;
SaveAs('D:exambackup'+stdate.text+'_'+eddate.text+'처방관련Prescription.xls');
end;
Query3.close;
Query3.sql.clear;
Query3.SQL.add('delete from T_prescription where seq=:seq');
Query3.ParamByName('seq').AsInteger := Query1seq.Value ;
Query3.execsql;
with Excelworksheet5 do
begin
for i:= 1 to Query2.FieldCount do
Cells.Item[2,i] := Query2.Fields[i-1].Fullname ;
Query2.First;
for i:= 3 to Query2.Recordcount+2 do
begin
for j:=1 to Query2.FieldCount do
begin
Cells.Item[i,j] :=char(39)+Query2.Fields[j-1].AsString;
end;
Query2.next;
end;
myrange := Range[Cells.Item[2,1],Cells.Item[Query2.recordCount+2,Query2.FieldCount]];
myRange.Columns.AutoFit;
SaveAs('D:exambackup'+stdate.text+'_'+eddate.text+'처방관련medicine.xls');
end;
Query3.close;
Query3.sql.clear;
Query3.SQL.add('delete from T_medicine where ino=:ino');
Query3.ParamByName('ino').AsInteger := Query2ino.Value ;
Query3.execsql;
except
on E: Exception do begin
showMessage(E.message);
ExcelApplication1.Disconnect;
end;
end;
end;
//주문관련업무 백업
procedure TF_execl.btn_Movedata1Click(Sender: TObject);
var i, j :Integer ;
Myrange:Range;
begin
try
with Excelworksheet1 do
begin
for i:= 1 to Query7.FieldCount do
Cells.Item[2,i] := Query7.Fields[i-1].Fullname ;
Query7.First;
for i:= 3 to Query7.Recordcount+2 do
begin
for j:=1 to Query7.FieldCount do
begin
Cells.Item[i,j] :=char(39)+Query7.Fields[j-1].AsString;
end;
Query7.next;
end;
myrange := Range[Cells.Item[2,1],Cells.Item[Query7.recordCount+2,Query7.FieldCount]];
myRange.Columns.AutoFit;
SaveAs('D:exambackup'+stdate1.text+'_'+eddate1.text+'주문관련return.xls');
end;
{Query3.close;
Query3.sql.clear;
Query3.SQL.add('delete from T_return where re_date=:re_date and '+
' re_seq=:re_seq and ds_id=:ds_id and re_no=:re_no');
Query3.ParamByName('re_date').AsString := Query7re_date.Value ;
Query3.ParamByName('re_seq').AsString := Query7re_seq.Value ;
Query3.ParamByName('ds_id').AsString := Query7ds_id.Value ;
Query3.ParamByName('re_no').AsInteger := Query7re_no.Value ;
Query3.execsql;}
with Excelworksheet2 do
begin
for i:= 1 to Query6.FieldCount do
Cells.Item[2,i] := Query6.Fields[i-1].Fullname ;
Query6.First;
for i:= 3 to Query6.Recordcount+2 do
begin
for j:=1 to Query6.FieldCount do
begin
Cells.Item[i,j] :=char(39)+Query6.Fields[j-1].AsString;
end;
Query6.next;
end;
myrange := Range[Cells.Item[2,1],Cells.Item[Query6.recordCount+2,Query6.FieldCount]];
myRange.Columns.AutoFit;
SaveAs('D:exambackup'+stdate1.text+'_'+eddate1.text+'주문관련order_edit.xls');
end;
{Query3.close;
Query3.sql.clear;
Query3.SQL.add('delete from T_order_edit where or_date=:or_date and '+
' or_seq=:or_seq and ds_id=:ds_id and or_no=:or_no');
Query3.ParamByName('or_date').AsString := Query6or_date.Value ;
Query3.ParamByName('or_seq').AsString := Query6or_seq.Value ;
Query3.ParamByName('ds_id').AsString := Query6ds_id.Value ;
Query3.ParamByName('or_no').AsInteger := Query6or_no.Value ;
Query3.execsql;}
with Excelworksheet3 do
begin
for i:= 1 to Query5.FieldCount do
Cells.Item[2,i] := Query5.Fields[i-1].Fullname ;
Query5.First;
for i:= 3 to Query5.Recordcount+2 do
begin
for j:=1 to Query5.FieldCount do
begin
Cells.Item[i,j] :=char(39)+Query5.Fields[j-1].AsString;
end;
Query5.next;
end;
myrange := Range[Cells.Item[2,1],Cells.Item[Query5.recordCount+2,Query5.FieldCount]];
myRange.Columns.AutoFit;
SaveAs('D:exambackup'+stdate1.text+'_'+eddate1.text+'주문관련order.xls');
end;
{Query3.close;
Query3.sql.clear;
Query3.SQL.add('delete from T_order where or_date=:or_date and '+
' or_seq=:or_seq and ds_id=:ds_id and or_no=:or_no');
Query3.ParamByName('or_date').AsString := Query5or_date.Value ;
Query3.ParamByName('or_seq').AsString := Query5or_seq.Value ;
Query3.ParamByName('ds_id').AsString := Query5ds_id.Value ;
Query3.ParamByName('or_no').AsInteger := Query5or_no.Value ;
Query3.execsql;}
except
on E: Exception do begin
showMessage(E.message);
ExcelApplication1.Disconnect;
end;
end;
end;