uniGUI的文件下载由于TUniSession的存在而变得非常简单,最典型的一个例子就是将列表中的所有数据导出到Excel中。服务器上采用TMS FlexCel控件,先将数据集中的记录导入到Excel文件中,然后再将Excel文件内容输出到内存流中,最后通过TUniSession发送到客户端。代码如下:

  1. procedure TfmeWebDBListBase.ExportData;
  2. var
  3. i, rowindex, colindex: Integer;
  4. ms : TMemoryStream;
  5. begin
  6. { 检查数据集 }
  7. if Assigned(cdsMain) and cdsMain.Active then
  8. try
  9. { 创建Excel文件 }
  10. FlexCelImport1.NewFile();
  11. cdsMain.First;
  12. { 第一行为标题 }
  13. rowindex := ;
  14. colindex := ;
  15. for i := to cdsMain.FieldCount - do
  16. { 只导出数据集中可视的字段 }
  17. if cdsMain.Fields[i].Visible then
  18. begin
  19. FlexCelImport1.CellValue[rowindex, colindex] := cdsMain.Fields[i].DisplayLabel;
  20. inc(colindex);
  21. end;
  22. { 依次导出数据 }
  23. while not cdsMain.Eof do
  24. begin
  25. { 增加一行 }
  26. inc(rowindex);
  27. colindex := ;
  28. for i := to cdsMain.FieldCount - do
  29. { 只导出数据集中可视的字段 }
  30. if cdsMain.Fields[i].Visible then
  31. begin
  32. { 时间和日期字段需要单独出来一下,否则出来的都是浮点数 }
  33. if cdsMain.Fields[i].DataType in [ftDate, ftDateTime, ftTime, ftTimeStamp] then
  34. FlexCelImport1.CellValue[rowindex, colindex] := cdsMain.Fields[i].AsString
  35. else
  36. FlexCelImport1.CellValue[rowindex, colindex] := cdsMain.Fields[i].Value;
  37. inc(colindex);
  38. end;
  39. { 下一条 }
  40. cdsMain.Next;
  41. end;
  42.  
  43. { 创建内存流 }
  44. ms := TMemoryStream.Create;
  45. try
  46. { Excel保存到内存流 }
  47. FlexCelImport1.SaveToStream(ms);
  48. ms.Position := ;
  49. { 将数据流发送到客户端,同时指定下载文件名,非常简单 }
  50. MainForm.uniApplication.UniSession.SendStream(
  51. ms, ModelName + '.xls' );
  52. finally
  53. ms.Free;
  54. { 清理内存 }
  55. FlexCelImport1.CloseFile;
  56. end;
  57. except
  58. on E : Exception do
  59. FlexCelImport1.CloseFile;
  60. end;
  61. end;

uniGUI试用笔记(七)的更多相关文章

  1. uniGUI试用笔记(十三)调用WebService

    今天尝试用uniGUI做Web服务器,调用应用服务器的WebService,遇到些问题记录下来备忘. 1.对WebService的调用同一般App程序,只是注意如果WebService的执行时间较长, ...

  2. uniGUI试用笔记(十一)

    最近研究了一下UniGUI的TuniDBGrid,记录一下免得忘记了. TuniDBGrid的重要属性包括: 1.列—TUniDBGridColumns和TUniDBGridColumn 每个列对象( ...

  3. uniGUI试用笔记(十)

    今天用LoadRunner对uniGUI的Standalone模式的程序进行了一次压力测试,程序采用三层模式,将应用服务器与Web服务器分离,由于条件限制,数据库.应用服务和Web服务都部署在同一条云 ...

  4. uniGUI试用笔记(九)

    uniGUI执行程序部署有3种形式 1.ISAPI模式 部署在IIS或Apache,程序编译为Dll形式,没有试,准备后续专门测试一下. 2.标准执行文件模式 将软件编译成一个独立的Exe文件,包括了 ...

  5. uniGUI试用笔记(八)

    在业务系统中常常使用回车键(Enter)替代Tab键完成焦点跳转,在uniGUI下,可以不用代码,直接使用TUniForm的NavigateKeys进行设置: 其中Next和Prior决定了焦点向下一 ...

  6. uniGUI试用笔记(六)

    uniGUI提供了一个文件上传控件TUniFileUpload,进行数据的导入就变得比较容易.首先将TUniFileUpload控件放置在窗体上,按下导入按钮后,执行TUniFileUpload的文件 ...

  7. uniGUI试用笔记(五)

    uniGUI的主窗体可以采用多页面方式进行管理,参考网上的资料,都是用TUniFrame + TUniPageControl 来实现,尝试了一下,效果还不错,如下图: 用TUniFrame 能够使用继 ...

  8. uniGUI试用笔记(四)

    uniGUI下有专用的登录窗体类:TUniLoginForm,该类属于AppForm,构建代码为: function frmWebLogin: TfrmWebLogin; begin Result : ...

  9. uniGUI试用笔记(三)

    uniGUI下的MessageDlg使用发生了变化,最大的特点是: 1.成为了uniGUIForm的成员函数: 2.变成过程(procedure)了,也就是没有返回值了,使得程序不再具有线程阻塞性. ...

随机推荐

  1. 问题:mysql服务正在启动 mysql服务无法启动 && mysql启动脚本 mysql关闭脚本

    此篇目编写两个核心目的: 1.mysql服务启动脚本(start_mysql.bat),mysql服务停止脚本(stop_mysql.bat)的讲解. 2.解决问题:mysql服务无法启动. 操作流程 ...

  2. js单双引号

    JavaScript单双引号的使用没有严格的要求,单独出现的时候,用单用双都可以的,但是如果一起出现的话就要严格区分了

  3. ubuntu安装python-mysqldb

    前期准备: sudo apt-get install  libmysqld-dev sudo apt-get install libmysqlclient-dev sudo apt-get insta ...

  4. django user 权限

     Django中的Users权限系统 2011-05-21 15:04:33 分类: Python/Ruby 权限系统包含1.用户2.权限(判断一个用户是否有特定的操作权限yes/no)3.组4.消息 ...

  5. javascript(一):javascript基本介绍及基本语法

    什么是javascript? javascript是一种直译型脚本语言,是一种动态类型.弱类型.基于原型的语言.(所谓“脚本语言”:指的是它不具有开发操作系统的能力,只是用来编写大型运用程序的脚本!) ...

  6. 回声状态网络(ESN)基础教程

    http://jlearning.cn/2017/05/29/ESN-basic-tutorial/ 最近在看回声状态网络(Echo State Network)的内容,注意到中文搜索引擎搜不到关于有 ...

  7. Linux QtCreator 编译报错:No rule to make target '.../***' needed by '***.o'.stop

    Linux QtCreator 编译报错:No rule to make target 'mainwindow.cpp'  needed by  'mainwindow.o'.stop [1]解决方案 ...

  8. rt.jar sun package

          安装完JDK后,会在%JAVA_HOME% /jdk文件夹下生成一个src.zip,此文件夹对应rt.jar中的java源码,但细心研究后发现rt.jar中sun包下的文件不存在,也就是说 ...

  9. 修改 File --> New 菜单内容

    修改 File --> New 菜单内容 window --> Perspective --> Customize Perspective

  10. Jersey入门——对Json的支持

    Jersey rest接口对POJO的支持如下: package com.coshaho.learn.jersey; import java.net.URI; import javax.ws.rs.C ...