uniGUI试用笔记(七)
uniGUI的文件下载由于TUniSession的存在而变得非常简单,最典型的一个例子就是将列表中的所有数据导出到Excel中。服务器上采用TMS FlexCel控件,先将数据集中的记录导入到Excel文件中,然后再将Excel文件内容输出到内存流中,最后通过TUniSession发送到客户端。代码如下:
procedure TfmeWebDBListBase.ExportData;
var
i, rowindex, colindex: Integer;
ms : TMemoryStream;
begin
{ 检查数据集 }
if Assigned(cdsMain) and cdsMain.Active then
try
{ 创建Excel文件 }
FlexCelImport1.NewFile();
cdsMain.First;
{ 第一行为标题 }
rowindex := ;
colindex := ;
for i := to cdsMain.FieldCount - do
{ 只导出数据集中可视的字段 }
if cdsMain.Fields[i].Visible then
begin
FlexCelImport1.CellValue[rowindex, colindex] := cdsMain.Fields[i].DisplayLabel;
inc(colindex);
end;
{ 依次导出数据 }
while not cdsMain.Eof do
begin
{ 增加一行 }
inc(rowindex);
colindex := ;
for i := to cdsMain.FieldCount - do
{ 只导出数据集中可视的字段 }
if cdsMain.Fields[i].Visible then
begin
{ 时间和日期字段需要单独出来一下,否则出来的都是浮点数 }
if cdsMain.Fields[i].DataType in [ftDate, ftDateTime, ftTime, ftTimeStamp] then
FlexCelImport1.CellValue[rowindex, colindex] := cdsMain.Fields[i].AsString
else
FlexCelImport1.CellValue[rowindex, colindex] := cdsMain.Fields[i].Value;
inc(colindex);
end;
{ 下一条 }
cdsMain.Next;
end; { 创建内存流 }
ms := TMemoryStream.Create;
try
{ 将Excel保存到内存流 }
FlexCelImport1.SaveToStream(ms);
ms.Position := ;
{ 将数据流发送到客户端,同时指定下载文件名,非常简单 }
MainForm.uniApplication.UniSession.SendStream(
ms, ModelName + '.xls' );
finally
ms.Free;
{ 清理内存 }
FlexCelImport1.CloseFile;
end;
except
on E : Exception do
FlexCelImport1.CloseFile;
end;
end;
uniGUI试用笔记(七)的更多相关文章
- uniGUI试用笔记(十三)调用WebService
今天尝试用uniGUI做Web服务器,调用应用服务器的WebService,遇到些问题记录下来备忘. 1.对WebService的调用同一般App程序,只是注意如果WebService的执行时间较长, ...
- uniGUI试用笔记(十一)
最近研究了一下UniGUI的TuniDBGrid,记录一下免得忘记了. TuniDBGrid的重要属性包括: 1.列—TUniDBGridColumns和TUniDBGridColumn 每个列对象( ...
- uniGUI试用笔记(十)
今天用LoadRunner对uniGUI的Standalone模式的程序进行了一次压力测试,程序采用三层模式,将应用服务器与Web服务器分离,由于条件限制,数据库.应用服务和Web服务都部署在同一条云 ...
- uniGUI试用笔记(九)
uniGUI执行程序部署有3种形式 1.ISAPI模式 部署在IIS或Apache,程序编译为Dll形式,没有试,准备后续专门测试一下. 2.标准执行文件模式 将软件编译成一个独立的Exe文件,包括了 ...
- uniGUI试用笔记(八)
在业务系统中常常使用回车键(Enter)替代Tab键完成焦点跳转,在uniGUI下,可以不用代码,直接使用TUniForm的NavigateKeys进行设置: 其中Next和Prior决定了焦点向下一 ...
- uniGUI试用笔记(六)
uniGUI提供了一个文件上传控件TUniFileUpload,进行数据的导入就变得比较容易.首先将TUniFileUpload控件放置在窗体上,按下导入按钮后,执行TUniFileUpload的文件 ...
- uniGUI试用笔记(五)
uniGUI的主窗体可以采用多页面方式进行管理,参考网上的资料,都是用TUniFrame + TUniPageControl 来实现,尝试了一下,效果还不错,如下图: 用TUniFrame 能够使用继 ...
- uniGUI试用笔记(四)
uniGUI下有专用的登录窗体类:TUniLoginForm,该类属于AppForm,构建代码为: function frmWebLogin: TfrmWebLogin; begin Result : ...
- uniGUI试用笔记(三)
uniGUI下的MessageDlg使用发生了变化,最大的特点是: 1.成为了uniGUIForm的成员函数: 2.变成过程(procedure)了,也就是没有返回值了,使得程序不再具有线程阻塞性. ...
随机推荐
- Css预处理器---Less(二)
三.Less语法 (1)变量 //less代码 @nice-blue : #5B83AD; @light-blue : @nice-blue + #111; #header { color : @li ...
- es6Math对象新增的方法
Math.trunc() Math.trunc方法用于去除一个数的小数部分,返回整数部分. 对于没有部署这个方法的环境,可以用下面的代码模拟. Math.trunc = Math.trunc || f ...
- [9]Windows内核情景分析 --- DPC
DPC不同APC,DPC的全名是'延迟过程调用'. DPC最初作用是设计为中断服务程序的一部分.因为每次触发中断,都会关中断,然后执行中断服务例程.由于关中断了,所以中断服务例程必须短小精悍,不能消耗 ...
- html5-output的用法
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- [博客迁移]探索Windows Azure 监控和自动伸缩系列2 - 获取虚拟机的监控定义和监控数据
上一篇博文介绍了如何连接Windows Azure: http://www.cnblogs.com/teld/p/5113063.html 本篇我们继续上次的示例代码,获取虚拟机的监控定义和监控数据. ...
- Pycharm学习python路
import 模块之后是灰色的表明没有被引用过 lxml找不到的话用anaconda prompt :pip uninstall lxml 重新安装 用request时,写的reg无法正确解析网页,先 ...
- 大数据处理框架之Strom:容错机制
1.集群节点宕机Nimbus服务器 单点故障,大部分时间是闲置的,在supervisor挂掉时会影响,所以宕机影响不大,重启即可非Nimbus服务器 故障时,该节点上所有Task任务都会超时,Nimb ...
- Eclipse创建maven工程后没有build path解决方案
1.修改maven工程下的.project文件为如下内容 <?xml version="1.0" encoding="UTF-8"?> <pr ...
- Android百大框架排行榜
Android百大框架排行榜 15类Android通用流行框架 - 流风,飘然的风 - 博客园https://www.cnblogs.com/zdz8207/p/android-opensource- ...
- 算法训练 P0505
一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积.阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中:而35!就更大了,它已经无法存放在一个浮点型变量中.因此, ...