5,386
社区成员
发帖
与我相关
我的任务
分享
procedure TTest.Frxprint(Alist: Pointer{TStrings}; FileName, PrinterName: pchar; Number: Integer; Openpreview: BOOL; ds1: Pointer{TDataSet}; ds2: Pointer{TDataSet}; ds3: Pointer{TDataSet}; ds4: Pointer{TDataSet});
var
i: Integer;
Category: TfrxVariable;
FileNames, PrinterNames, uname: AnsiString;
frxbrcdbjct1: TfrxBarCodeObject;
Ffrxrprt1: TfrxReport;
frxdsgnr1: TfrxDesigner;
Ffrxdbdtst1: TfrxDBDataset;
Ffrxdbdtst2: TfrxDBDataset;
Ffrxdbdtst3: TfrxDBDataset;
Ffrxdbdtst4: TfrxDBDataset;
Td1: TDataSet;
begin
try
Flist := TStringList.Create;
frxbrcdbjct1 := TfrxBarCodeObject.Create(Self);
Ffrxrprt1 := TfrxReport.Create(Self);
frxdsgnr1 := TfrxDesigner.Create(self);
Ffrxdbdtst1 := TfrxDBDataset.Create(Self);
Ffrxdbdtst2 := TfrxDBDataset.Create(Self);
Ffrxdbdtst3 := TfrxDBDataset.Create(Self);
Ffrxdbdtst4 := TfrxDBDataset.Create(Self);
Ffrxrprt1.OnGetValue := Ffrxrprt1GetValue;
FileNames := FileName;
PrinterNames := PrinterName;
if tstrings(Alist) <> nil then
Flist.CommaText := tstrings(Alist).CommaText;
Ffrxdbdtst1.UserName := '空';
Ffrxdbdtst2.UserName := '空';
Ffrxdbdtst3.UserName := '空';
Ffrxdbdtst4.UserName := '空';
if ds1 <> nil then
begin
Ffrxdbdtst1.DataSet := TDataSet(ds1);
uname := TDataSet(ds1).Filter;
Ffrxdbdtst1.UserName := uname;
// Ffrxrprt1.DataSets.Add(Ffrxdbdtst1);
getDataset(TDataSet(ds1));
end;
if ds2 <> nil then
begin
Ffrxdbdtst2.DataSet := TDataSet(ds2);
uname := TDataSet(ds2).Filter;
Ffrxdbdtst2.UserName := uname;
// Ffrxrprt1.DataSets.Add(Ffrxdbdtst2);
getDataset(TDataSet(ds2));
end;
if ds3 <> nil then
begin
Ffrxdbdtst3.DataSet := TDataSet(ds3);
uname := TDataSet(ds3).Filter;
Ffrxdbdtst3.UserName := uname;
// Ffrxrprt1.DataSets.Add(Ffrxdbdtst3);
getDataset(TDataSet(ds3));
end;
if ds4 <> nil then
begin
Ffrxdbdtst4.DataSet := TDataSet(ds4);
uname := TDataSet(ds4).Filter;
Ffrxdbdtst4.UserName := uname;
// Ffrxrprt1.DataSets.Add(Ffrxdbdtst4);
getDataset(TDataSet(ds4));
end;
Ffrxrprt1.LoadFromFile(FileNames); {路径}
if PrinterNames <> '' then
Ffrxrprt1.PrintOptions.Printer := PrinterNames;
Ffrxrprt1.PrintOptions.Copies := Number;
Ffrxrprt1.Variables.Clear;
for i := 0 to Flist.Count - 1 do
begin
if Ffrxrprt1.Variables.IndexOf(Flist.KeyNames[i]) = -1 then
begin
Category := Ffrxrprt1.Variables.Add;
Category.Name := Flist.KeyNames[i];
Category.Value := Flist.ValueFromIndex[i];
end;
end;
// i:= Ffrxrprt1.Variables.Count;
if Openpreview then // 打印
begin
Ffrxrprt1.PrepareReport(true);
Ffrxrprt1.PrintOptions.Copies := Number;
Ffrxrprt1.PrintOptions.ShowDialog := False;
Ffrxrprt1.ShowProgress := False;
Ffrxrprt1.Print;
end
else
begin
Ffrxrprt1.DesignReport();
end;
finally
FreeAndNil(frxbrcdbjct1);
FreeAndNil(Ffrxrprt1);
FreeAndNil(frxdsgnr1);
FreeAndNil(Ffrxdbdtst1);
FreeAndNil(Ffrxdbdtst2);
FreeAndNil(Ffrxdbdtst3);
FreeAndNil(Ffrxdbdtst4);
FreeAndNil(Flist);
end;
end;
procedure TTest.getDataset(Tds: TDataSet);
var
ls_values: string;
ls_Filter: string;
i: Integer;
begin
Tds.First;
if (Tds.RecordCount > 0) then
begin
while not Tds.Eof do
begin
for i := 0 to Tds.FieldDefs.Count - 1 do
ls_values := ls_values + Tds.FieldDefs[i].Name + '=' + Tds.FieldByName(Tds.FieldDefs[i].Name).AsString + ' ';
ls_values := ls_values + #13#10;
Tds.Next;
end;
end
else
begin
for i := 0 to Tds.FieldDefs.Count - 1 do
ls_values := ls_values + Tds.FieldDefs[i].Name + '=空' + ' ';
end;
ls_Filter := Tds.Filter;
debugginglog(PChar('PReport.dll'), PChar(ls_Filter), PChar(ls_values));
end;