다름이 아니라.....
소스는 다음과 같고....
변수를 받아서 퀵리포트의 디테일밴드에 출력하려고 하는데....
디테일 밴드에 qlabel을 올려놓고 그곳에 변수를 받아서 넣습니다.
근데 변수를 받아오는곳이 엑셀에서 가져옵니다.
데이터가 몇개가 될지는 모른다는 가정하에서.......
근데....다음 변수가 들어오면...디테일밴드에서 다음으로 넘겨줘야하는데....
안 넘어가네염......
db로 연결하면 자동으로 다음 데이터가 오면 넘어가자나여.....
근데....이렇게 변수로 넘어오면 어찌해야 하는지 답변부탁드립니다.
어찌해야되나 고민하다가 끄적거려봤는데....안되는걸 알면서두.....
우선 소스는 올려봅니다...
아시는 분의 답변기다립니다.
procedure TForm1.BitBtn2Click(Sender: TObject);
var
Ex: Variant;
name, postno, addr1, addr2, shop : String;
i : integer;
begin
edt_filename.Visible := false;
if not FileExists(edt_FileName.Text) then
begin
Application.MessageBox('해당 엑셀파일이 존재하지 않습니다.','확인',0);
Exit;
end;
Ex := CreateOLEObject('Excel.Application'); //이 녀석을 쓰기위해 uses절에 comobj를 추가 한다.
Ex.WorkBooks.Open(edt_FileName.Text);
form2 := Tform2.Create(self);
i := 1;
while (Trim(Ex.Cells[i,1].Value) <> '') do
begin
name := Ex.Cells[i,1].Value;
postno := Ex.Cells[i,2].Value;
addr1 := Ex.Cells[i,3].Value;
addr2 := Ex.Cells[i,4].Value;
shop := Ex.Cells[i,5].Value;
form2.addr1.Caption := addr1;
form2.addr2.Caption := addr2;
form2.shop.Caption := shop;
form2.postno.Caption := postno;
form2.name.Caption := name;
StringGrid1.Cells[0,i-1] := name;
StringGrid1.Cells[1,i-1] := postno;
StringGrid1.Cells[2,i-1] := addr1;
StringGrid1.Cells[3,i-1] := addr2;
StringGrid1.Cells[4,i-1] := shop;
Inc(i);
Application.ProcessMessages;
end;
form2.QuickRep1.Preview;
Ex.WorkBooks.Close;
Ex := null;
end;
>
> 다름이 아니라.....
> 소스는 다음과 같고....
> 변수를 받아서 퀵리포트의 디테일밴드에 출력하려고 하는데....
> 디테일 밴드에 qlabel을 올려놓고 그곳에 변수를 받아서 넣습니다.
> 근데 변수를 받아오는곳이 엑셀에서 가져옵니다.
> 데이터가 몇개가 될지는 모른다는 가정하에서.......
> 근데....다음 변수가 들어오면...디테일밴드에서 다음으로 넘겨줘야하는데....
> 안 넘어가네염......
> db로 연결하면 자동으로 다음 데이터가 오면 넘어가자나여.....
> 근데....이렇게 변수로 넘어오면 어찌해야 하는지 답변부탁드립니다.
> 어찌해야되나 고민하다가 끄적거려봤는데....안되는걸 알면서두.....
> 우선 소스는 올려봅니다...
> 아시는 분의 답변기다립니다.
>
>
> procedure TForm1.BitBtn2Click(Sender: TObject);
> var
> Ex: Variant;
> name, postno, addr1, addr2, shop : String;
> i : integer;
> begin
> edt_filename.Visible := false;
> if not FileExists(edt_FileName.Text) then
> begin
> Application.MessageBox('해당 엑셀파일이 존재하지 않습니다.','확인',0);
> Exit;
> end;
>
> Ex := CreateOLEObject('Excel.Application'); //이 녀석을 쓰기위해 uses절에 comobj를 추가 한다.
> Ex.WorkBooks.Open(edt_FileName.Text);
>
> form2 := Tform2.Create(self);
>
> i := 1;
> while (Trim(Ex.Cells[i,1].Value) <> '') do
> begin
> name := Ex.Cells[i,1].Value;
> postno := Ex.Cells[i,2].Value;
> addr1 := Ex.Cells[i,3].Value;
> addr2 := Ex.Cells[i,4].Value;
> shop := Ex.Cells[i,5].Value;
>
> form2.addr1.Caption := addr1;
> form2.addr2.Caption := addr2;
> form2.shop.Caption := shop;
> form2.postno.Caption := postno;
> form2.name.Caption := name;
>
> StringGrid1.Cells[0,i-1] := name;
> StringGrid1.Cells[1,i-1] := postno;
> StringGrid1.Cells[2,i-1] := addr1;
> StringGrid1.Cells[3,i-1] := addr2;
> StringGrid1.Cells[4,i-1] := shop;
> Inc(i);
> Application.ProcessMessages;
>
>
> end;
>
> form2.QuickRep1.Preview;
>
> Ex.WorkBooks.Close;
> Ex := null;
>
>
> end;
>
>
>
DataSet을 어떻게 하셨는지 궁금하네여.
만약에 다른 곳에서 데이타를 변수로 넘긴다면 DataSet을 걸어주지 않기때문에 DatailBand가 자동으로 생성되지 않습니다.
이때는..SubDetailBand를 놓고 이 Band의 OnNeedData 이벤트를 이용하셔야 할 겁니다.
간단한 샘플 소스입니다.
unit Unit6;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
QuickRpt, Qrctrls, ExtCtrls;
type
TForm1 = class(TForm)
QuickRep1: TQuickRep;
QRBand1: TQRBand;
QRSubDetail1: TQRSubDetail;
QRLabel1: TQRLabel;
QRLabel2: TQRLabel;
procedure QRSubDetail1NeedData(Sender: TObject; var MoreData: Boolean);
procedure QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
private
{ Private declarations }
RecCnt, i: Integer; // 변수선언. RecCnt : 출력할 전체 레코드수,i : 현재출력되고 있는 레코드수
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
// SubDeTail의 OnNdeedData 이벤트
procedure TForm1.QRSubDetail1NeedData(Sender: TObject;
var MoreData: Boolean);
begin
if i < RecCnt then
begin
MoreData := True; // 더 출력할 자료가 있을 경우 MoreData를 True로
QRLabel1.Caption := 변수값1;
QRLabel2.Caption := 변수값2;
inc(i);
end;
end;
procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
i := 0; // QuickReport BeforePrint이벤트에서 현재 출력되는 레코드값 초기화
RecCnt := 5 // 총 출력될 레코드수
end;
end.