首页 > 数据库 >UniGUI使用ADO组件、调用数据库的存储过程、生成EXECL表的例子

UniGUI使用ADO组件、调用数据库的存储过程、生成EXECL表的例子

时间:2024-02-01 21:57:24浏览次数:19  
标签:EXECL end UniGUI TMainForm XLSObj Sheets ADO AsString Sender

UniGUI使用ADO组件、调用数据库的存储过程、生成EXECL表的例子
(自己学习记录一下,不一定合理,仅供参考)
本例子是 使用ADO等组件连接一个云服务器的一个数据库,调用GetOrg存储过程,把机构信息展现
把结果导出的一个EXECL表里,并下载
把 显示的 HSate 的值进行替换 1表示正常,其他表示暂停。
多数与 VCL APP的做法差不多。
要点

  1. 使用ADO组件,必须将 TUniServerModule 的自动初始化属性 AutoColnitialize 设置为 True。
  2. 导出的EXECL表时:XLSObj.Sheets[0].AutoWidthCol(1); //Write 之前设置一下第二列的列宽度 为自动
  3. 导出的需要下载:
    UniSession.SendFile('机构清单.xlsx','机构清单1.xlsx');
    //第一个参数是服务器端的文件名 第二个为下载到客户端的文件名
  4. 显示值替换问题:
    1)定义UniDBGrid1的 onDrawColumnCell事件
    2)例子中的procedure TMainForm.flagGetText(Sender:TField;var Text:string;displayText:Boolean); //要自己写,木有自动生成
    导出表在服务器端的文件名在实际应用时需要改进,防止相互覆盖(可能是吧,没试过)

UniMainModule的组件

MainForm的组件及样式

Main.pas参考代码

unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, uniGUITypes, uniGUIAbstractClasses,
  uniGUIClasses, uniGUIRegClasses, uniGUIForm, uniBasicGrid, uniDBGrid,
  uniGUIBaseClasses, uniButton, Data.DB, uniPanel, uniPageControl,
  XLSSheetData5, XLSReadWriteII5, uniLabel, Vcl.Dialogs;

type
  TMainForm = class(TUniForm)
    UniButton1: TUniButton;
    UniButton2: TUniButton;
    UniButton3: TUniButton;
    UniButton4: TUniButton;
    UniDBGrid1: TUniDBGrid;
    UniPageControl1: TUniPageControl;
    UniTabSheet1: TUniTabSheet;
    UniTabSheet2: TUniTabSheet;
    UniDBGrid2: TUniDBGrid;
    XLSReadWriteII51: TXLSReadWriteII5;
    procedure UniButton1Click(Sender: TObject);
    procedure UniButton2Click(Sender: TObject);
    procedure UniButton4Click(Sender: TObject);
    procedure flagGetText(Sender:TField;var Text:string;displayText:Boolean);
    procedure UniDBGrid1DrawColumnCell(Sender: TObject; ACol, ARow: Integer;
      Column: TUniDBGridColumn; Attribs: TUniCellAttribs);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

function MainForm: TMainForm;

implementation

{$R *.dfm}

uses
  uniGUIVars, MainModule, uniGUIApplication;

function MainForm: TMainForm;
begin
  Result := TMainForm(UniMainModule.GetFormInstance(TMainForm));
end;

procedure TMainForm.UniButton1Click(Sender: TObject);
begin
  try
    with uniMainModule.ADOStoredProc1 do
    begin
      Close;
      ProcedureName := 'GetOrg';
      Parameters.Refresh;
      Parameters.ParamByName('@CID').Value := '00';
      Parameters.ParamByName('@Adate').Value := 'AA';
      Prepared;
      Open;
    end;
  except
    begin
        MessageDlg('查询失败!', mtWarning, [mbOK],nil);
        UniSession.AddJS('Ext.get("messagebox-1001_header-title-textEl").setText("警告")');
    end;

  end;

end;

procedure TMainForm.UniButton2Click(Sender: TObject);
var
  XLSObj : TXLSReadWriteII5;
  XLSWookSheet : TXLSWorksheet;
  i : integer;
  DispState : string;
begin
  XLSObj := TXLSReadWriteII5.Create(nil);
  XLSObj.Sheets[0].Name := '机构清单';

  try
    XLSObj.Sheets[0].AsString[0,0] := '代码';
    XLSObj.Sheets[0].AsString[1,0] := '名称';
    XLSObj.Sheets[0].AsString[2,0] := '状态';
    XLSObj.Sheets[0].AsString[3,0] := '中心';
    XLSObj.Sheets[0].AsString[4,0] := 'GIP';

    i := 1;

    uniMainModule.ADOStoredProc1.First;
    while not uniMainModule.ADOStoredProc1.Eof do
    begin
      XLSObj.Sheets[0].AsString[0,i] := uniMainModule.ADOStoredProc1.FieldByName('HNO').AsString;
      XLSObj.Sheets[0].AsString[1,i] := uniMainModule.ADOStoredProc1.FieldByName('HNAME').AsString;
      if Trim(uniMainModule.ADOStoredProc1.FieldByName('HState').AsString) ='1' then  DispState:='正常'
        else  DispState:='暂停';

      XLSObj.Sheets[0].AsString[2,i] := DispState;
      XLSObj.Sheets[0].AsString[3,i] := uniMainModule.ADOStoredProc1.FieldByName('HCID').AsString;
      XLSObj.Sheets[0].AsString[4,i] := uniMainModule.ADOStoredProc1.FieldByName('GIP').AsString;
      uniMainModule.ADOStoredProc1.Next;
      inc(i);
    end;
    XLSObj.Sheets[0].AutoWidthCol(1);     //Write 之前设置一下第二列的列宽度 为自动
    XLSObj.Filename := '机构清单.xlsx';
    XLSObj.Write;
  finally
    XLSObj.Free;
  end;
  UniSession.SendFile('机构清单.xlsx','机构清单1.xlsx');
    //第一个参数是服务器端的文件名 第二个为下载到客户端的文件名
end;

procedure TMainForm.UniButton4Click(Sender: TObject);
begin
  Close;
end;

procedure TMainForm.UniDBGrid1DrawColumnCell(Sender: TObject; ACol,      //这个是UniDBGrid1的 onDrawColumnCell事件
  ARow: Integer; Column: TUniDBGridColumn; Attribs: TUniCellAttribs);
begin
  if Column.FieldName = 'HState' then
  begin
    Column.Field.OnGetText := flagGetText;
  end;
end;

procedure TMainForm.flagGetText(Sender:TField;var Text:string;displayText:Boolean);    //这个是自己写的
begin
  if Sender.AsString = '1' then Text := '正常'
    else Text := '暂停';

end;

initialization
  RegisterAppFormClass(TMainForm);

end.

标签:EXECL,end,UniGUI,TMainForm,XLSObj,Sheets,ADO,AsString,Sender
From: https://www.cnblogs.com/qiao-fu/p/18002181

相关文章

  • 【解决方案】Word启动报错:“文件未找到:xxx...Adobe...MacPDFM.framework...”
    ✨报错提示运行时错误“53”:文件末找到:/Library/ApplicationSupport/Adobe/MACPDFM/MacPDFM.framework/Versions/A/MacPDFM✨解决方案实际上是由于AdobeAcrobatProDC卸载残留导致该问题解决方案如下cd~/Library/Group\Containers/UBF8T346G9.Office/User\Con......
  • redis (error) READONLY You can't write against a read only slave(转)
    原文:https://www.cnblogs.com/morgan363/p/13719830.html1、问题描述已部署好Redis主从服务器,实现了数据的同步。Redis主服务器(masterserver)具有读写的权限,而从服务器(slavemaster)默认只具有读的权限。如果强行在从服务器中接入数据,则报错提示“(error)READONLYYou......
  • 全方位介绍大数据生态圈中最基础、最重要的组件 Hadoop
    大数据概述大数据这个概念近年来算是如火如荼,那什么是大数据呢?首先从名字来看,我们可以简单地认为数据量大,而数据量大也就意味着计算量大。这样理解本身是没有任何问题的,只不过这并不能很好的定义大数据。而业界的一家权威的机构,针对大数据做了描述,认为大数据应该具备如下特征:1......
  • Adobe2024最新版全家桶Ps、Pr、Ai、Ae、Au、Lrc、An直装版下载
    Adobe全家桶是Adobe公司开发的一套包括多个专业创意软件的综合性套装,涵盖了图形设计、影片制作、页面排版、音频编辑等多个创意领域。其中主要应用程序包括:Adobe2024全家桶Windows&Mac官方直装版AdobePhotoshop:图像处理和编辑软件,广泛用于照片修饰、合成和数字绘画。Ado......
  • Invalid character ( found Illegal strategy name: 'Vivado Synthesis Defaults(2)'
    出现问题的操作步骤:Tools---settings---啥也没改,点击ok或者apply就会弹出这个错误,如下图: 解决方法: 在4数字标的输入框里输入1,回车之后这个问题就消失了。可能是不知道啥时候动点了什么,导致了这个问题,比较像是Vivado的Bug。本来都打算重装vivado了,还好随便试了一下解决了。......
  • Windows10安装Hadoop3.1.3环境
    Windows10安装Hadoop3.1.3环境文章目录1.安装包下载1.1.hadoop官网下载1.2下载winutils1.3安装文件2.配置安装2.1安装配置JDK环境2.2解压hadoop压缩包2.3配置hadoop的环境变量2.3.1配置HADOOP_HOME2.3.2配置Path变量2.4配置hadoop2.4.1创建data和temp文件夹2.4.2配置hadoop......
  • (一)浅谈ADO.NET对象之间的关系
    一、Database:数据源,这里比喻水源二、Connection:连接数据源对象,类似伸入到水源的水管三、Command:数据库语句执行对象,类似抽水机四、DataAdapter、DataReader:数据适配器,类似输水管五、DataSet:数据集,类似水库六、DataTable:数据表,类似水池......
  • Tornado路由管理
    Tornado还提供了多应用程序路由对象---tornado.web.url.这个对象可以让我们更加系统化的管理路由模块,比如创建一个简单的tornado服务importtornado.ioloopimporttornado.webclassMainHandler(tornado.web.RequestHandler):defget(self):param1=self.get_......
  • Adobe 2024 全家桶 Windows&Mac 官方直装版
    简化了安装流程适用于小白,无脑直接安装。Adobe公司开发了许多专业的图形设计、影像处理、视频编辑、网页设计等领域的软件。以下是Adobe系列中一些常见的软件:AdobePhotoshop-用于图像编辑和处理的专业软件。AdobeIllustrator-用于创建矢量图形和插图的矢量图形编辑软件。A......
  • 2024更新 Adobe 2024 Win&Mac 最新直装版
    Adobe是全球领先的创意软件公司,产品涵盖图像处理、页面设计、视频编辑、音频制作等多个领域。其旗舰产品包括Photoshop、Illustrator、PremierePro等,为设计师、摄影师和创意专业人士提供了强大而创新的工具,推动数字创意领域的发展。Adobe2024forWindows最新版Adobe2024f......