퀵리포트를 공부중인대
퀵리포트에서는 db자료를 읽어 올때 데이터셋의 자료의 수에따라
한페이지의 컬럼의 수가 조절 되더군요
(예를 들어 자료의 수가 한페이지보다 못할때는 그냥 공백으로 처리)
퀵리포트 페이지에서의 자체적인 특정 컬럼수 지정은 안되더군요.
그래서 아래와 같인 DB를 이용해서 null값을 주면서 데이터의 수가 특정 수(저의경우 15개)보다 안되면
나머지 값에는 dual를 이용해 null값을 대입하여 데이터의 수를 늘렸습니다.
예를 들어 자료가 10건인 것도 15건으로 퀵리포트가 인식을 해서 나머지에는 그냥 선만 출력되게
했습니다.
그런대 문제는 정렬까지는 되는대 유독 null값 (델파이에서는 ' ')을 갖고있는 값이 먼저 올라갑니다;;
그것도 한 데이터만
나머지 null데이터는 맨밑으로 알아서 차곡 차곡 정렬이 되는대요;;
왜 이런지 알고 싶고 이런 구시대적인 방법 말고 리포트의 컬럼수를 지정하는 방법 없을까요;;;?
<!--CodeS-->
procedure TForm1.Button2Click(Sender: TObject);
var
temp : string;
i,x : integer;
begin
temp := ' SELECT S_SNUM, S_NAME FROM TESTER.STUDENT ';
IF ADOQuery1.Recordset.RecordCount < 15 then
begin
x := ADOQuery1.Recordset.RecordCount;
Form2.ADOQuery1.Close;
Form2.ADOQuery1.SQL.Clear;
for i := x to 14 do
begin
temp := temp+' UNION ALL SELECT NULL AS S_SNUM, NULL AS S_NAME FROM DUAL ';
end;
end
else
begin
Form2.ADOQuery1.Close;
Form2.ADOQuery1.SQL.Clear;
end;
temp := temp+' ORDER BY S_SNUM ';
Form2.ADOQuery1.SQL.Add(temp);
Form2.ADOQuery1.Open;
Form2.QuickRep1.Prepare;
Form2.QuickRep1.Preview;
end;
//퀵리포트의 코드
procedure TForm2.DetailBand1AfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
begin
if not(ADOQuery1.FieldValues['S_SNUM'] = null) then
begin
QRLabel2.Caption := ADOQuery1.FieldValues['S_SNUM'];
QRLabel3.Caption := ADOQuery1.FieldValues['S_NAME'];
end
else
begin
QRLabel2.Caption := '';
QRLabel3.Caption := '';
end;
end;
<!--CodeE-->
퀵리포트에 OnNeedData 이벤트가 있고, 거리에는 MoreData 라는 변수가 있어서
그걸로 사용할 수 있습니다.
근데 그걸로 하면 일반적인 DataSet의 필드를 QRDBLabel 에 필드 연결형식이 아닌
QRLabel 에 그냥 코딩으로 값 지정하는 방식으로 합니다.