1.要有两个数据结构一样的表,以下例子为,aTABLE,btable两个数据表. 2.在用户介面要有一个DBGrid控件,数据源是连接aTABLE,给用户选择打印数据之用的. 3.QuickReport连的数据源是btable表. 4.打印按钮的代码如下:var i:integer; begin {------如果用户有选择了数据--------} if DBGrid.SelectedRows.Count>0 then begin ADOQuery.DisableControls;{数据源是aTABLE表} for i := 0 to DBGrid.SelectedRows.Count- 1 do begin ADOQuery.GotoBook(pointer(DBGrid.SelectedRows.Items[i])); with ADOQuery2 begin append; FieldByName('x_a').AsString:= adoquery.FieldByName('x_a').AsString; FieldByName('x_b').AsString:= adoquery.FieldByName('x_b').AsString; post; end; ...你的打印控制; ADOQuery.EnableControls; end; end else begin {没有选择数据的情况下为全部打印} with ADOQuery begin DisableControls; First; while not eof begin ADOQuery2.append; ADOQuery2.FieldByName('x_a').AsString:= FieldByName('x_a').AsString; ADOQuery2.FieldByName('x_b').AsString:= FieldByName('x_b').AsString; ADOQuery2.post; next; end; EnableControls; end; ........你的打印代码 end;
2.在用户介面要有一个DBGrid控件,数据源是连接aTABLE,给用户选择打印数据之用的.
3.QuickReport连的数据源是btable表.
4.打印按钮的代码如下:var
i:integer;
begin
{------如果用户有选择了数据--------}
if DBGrid.SelectedRows.Count>0 then begin
ADOQuery.DisableControls;{数据源是aTABLE表}
for i := 0 to DBGrid.SelectedRows.Count- 1 do begin
ADOQuery.GotoBook(pointer(DBGrid.SelectedRows.Items[i]));
with ADOQuery2 begin
append;
FieldByName('x_a').AsString:= adoquery.FieldByName('x_a').AsString;
FieldByName('x_b').AsString:= adoquery.FieldByName('x_b').AsString;
post;
end;
...你的打印控制;
ADOQuery.EnableControls;
end;
end else begin {没有选择数据的情况下为全部打印}
with ADOQuery begin
DisableControls;
First;
while not eof begin
ADOQuery2.append;
ADOQuery2.FieldByName('x_a').AsString:= FieldByName('x_a').AsString;
ADOQuery2.FieldByName('x_b').AsString:= FieldByName('x_b').AsString;
ADOQuery2.post;
next;
end;
EnableControls;
end;
........你的打印代码
end;
end;
或者创建个中间临时数据集,就用clientdataset吧,简单方便,把选中的记录暂存这里,然后传它到report里面去
2.转移法:放一个内存数据集,把要打印的放到内存数据集中,用quickreport关联他然后打印。
zhoutler已经说的很清楚了。