请选择 进入手机版 | 继续访问电脑版

大富翁Delphi开发技术网站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 277|回复: 0

[源码分享] delphi通过TADOQuery控件完成多结果集的打印

[复制链接]

2

主题

2

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2018-4-5 17:55:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
引用单元:
TADOQuery----------ADODB
TppDBPipeline-----------ppDBPipe
TDataSource-----------DB
Tppreport-----------ppReport
TppDesigner-----------ppEndUsr
调用:
procedure TfrmMain.N1Click(Sender: TObject);
begin
    strsql := ' select top 1 * from ZY_BRXXK '
            + ' select top 1 * from YY_YBFLK '
            + ' select top 1 * from ZY_BRSYK '
            + ' select top 1 * from ZY_BRXXK '
            + ' select top 1 * from ZY_BRXXK ';
    print(strsql,'zyb_brxxcx_temple.rtm');
end;

//*****************************************************************************************************
[size=13.3333px]//打印函数的声明
[size=13.3333px]//*****************************************************************************************************
procedure TfrmMain.Print(asql, strMb: string);
    procedure QueryToPrint(aAdoQuqery :TADOQuery;aTemplateName :string);
    var
        aAdoDataSet :TADODataSet;
        i,j :Integer;
        appDBpipeLine :TppDBPipeline;
        aDataSource :TDataSource;
        ppDBPipleline1 :TppDBPipeline;
       // raCodeModule1:TraCodeModule;
        isMasterPipeline :Boolean;
        ppreportTmp: Tppreport; //报表控件
        ppDesignerTmp: TppDesigner;
    begin
        ppreportTmp := Tppreport.Create(Self);
        ppDesignerTmp:= TppDesigner.Create(Self);
        i :=0;
        isMasterPipeline :=True;
        if  Assigned(ppDBPipleline1) then
        begin
             FreeAndNil(ppDBPipleline1);
        end;
        //raCodeModule1:=TraCodeModule.Create(nil);
        ppDBPipleline1 :=TppDBPipeline.Create(self);
        ppDBPipleline1.Name :='BDEPipeline1';   //为了和外挂报表中一致,因此此处Name属性不可修改
        aAdoDataSet :=TADODataSet.Create(self);
        aAdoDataSet.Recordset :=aAdoQuqery.Recordset;
        
        while aAdoDataSet.Recordset<>nil do
        begin
            if isMasterPipeline then
            begin
                aDataSource :=TDataSource.Create(self);
                ppDBPipleline1.DataSource :=aDataSource;
                ppDBPipleline1.DataSource.DataSet :=aAdoDataSet;
            end
            else
            begin
                aDataSource :=TDataSource.Create(self);
                appDBpipeLine :=TppDBPipeline.Create(self);
                appDBpipeLine.DataSource :=aDataSource;
                appDBpipeLine.DataSource.DataSet :=aAdoDataSet;
            end;
            aAdoDataSet :=TADODataSet.Create(self);
            aAdoDataSet.Recordset :=aAdoQuqery.NextRecordset(j);
            if not isMasterPipeline then
            begin
                i :=i+1;
                appDBpipeLine.Name :='p_ppbdepipeline'+Inttostr(i);  //为了和外挂报表中一致,因此此处Name属性不可修改
            end;
            isMasterPipeline :=False;
        end;
        ppreportTmp.DataPipeline :=ppDBPipleline1;
        ppreportTmp.Template.FileName :=dm.ztapp.ReportTemplatePath+aTemplateName;
        if not FileExists(dm.ztapp.ReportTemplatePath+aTemplateName) then
        begin
            ppDesignerTmp.Report := ppreportTmp;
            ppDesignerTmp.ShowModal;
        end
        else
        begin
            ppreportTmp.Template.LoadFromFile;
            if dm.ztapp.preview ='1' then
            begin
                ppDesignerTmp.Report := ppreportTmp;
                ppDesignerTmp.ShowModal;
            end
            else
            begin
                ppreportTmp.Print;
            end;
        end;
        ppDBPipleline1.Free;
        ppDBPipleline1 :=nil;
        //raCodeModule1.Free;
        //raCodeModule1:=nil;
        for i:=self.ComponentCount -1 downto 0 do
        begin
            if (Pos('p_ppbdepipeline',self.Components.Name)>0) and (Self.Components is TppDBPipeline) then
            begin
                appDBpipeLine :=TppDBPipeline(self.Components);
                appDBpipeLine.DataSource.DataSet.Free;
                appDBpipeLine.DataSource.DataSet :=nil;
                appDBpipeLine.DataSource.Free;
                appDBpipeLine.DataSource :=nil;
                appDBpipeLine.Free;
                appDBpipeLine :=nil;
            end;
        end;
        ppreportTmp.Free;
        ppDesignerTmp.Free;
    end;
var
    PrintTempleate :string;
    strsql:string;
    qryTemp: TADOQuery;
    username, password, drivename,servername, databasename: string;
begin
    qryTemp:=TADOQuery.Create(application);
    qryTemp.Active:=False;
    //调用自定义的函数,获得MSSQL数据库连接的字符串
    dm.ztapp.ztserver.getserverinfo('dsquery', servername, username, databasename, password, drivename);
    //多个打印结果时用 ADO 控件 qryTemp
    qryTemp.ConnectionString :='Provider=SQLOLEDB.1assword='+password
                +'ersist Security Info=True;User ID='+username+';Initial Catalog='+databasename+';'
                +'Data Source='+servername;
    strsql:= asql;
    PrintTempleate :=strMb;
//    if not FileExists(ztapp.ReportTemplatePath+strMb) then
//    begin
//        ShowMessage('文件:'+ztapp.ReportTemplatePath+strMb+'不存在');
//        Exit;
//    end;
    qryTemp.Active:=False;
    qryTemp.Close;
    qryTemp.SQL.Clear;
    strsql:= strsql +' set QUOTED_IDENTIFIER OFF select "'+dm.ztapp.zgdm+'" as [当前操作员],"'
    +FormatDateTime('yyyy-mm-ddhh:mm:ss',Now)+'" as [当前日期],"'+dm.ztapp.ksdm+'" as [当前操作员科室] ';
    qryTemp.SQL.Add(strsql);
    try
        qryTemp.Open;
    except
        showmessage('执行SQL'+strsql+'异常!');
        Exit;
    end;
    if qryTemp.Fields[0].AsString ='F' then
    begin
        showmessage(qryTemp.Fields[1].AsString);
        Exit;
    end;
    QueryToPrint(qryTemp,PrintTempleate);
    qryTemp.Free;
end;
转载请保留当前帖子的链接:http://www.dfwlt.com/forum.php?mod=viewthread&tid=2562 谢谢!

搜索简单,分享不易,且分享且珍惜,您难道不想分享下您的心得?如果觉得本文章好的话,您可以在我们网站上注册,然后发布您的好的心得,让大家共同进步,谢谢!

最新添加

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

申请友链|Archiver|手机版|小黑屋|大富翁Delphi开发技术网站 ( 苏ICP备12065705号-4

GMT+8, 2018-7-19 15:27 , Processed in 0.112263 second(s), 32 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表