UniGUI使用ADO组件、调用数据库的存储过程、生成EXECL表的例子
UniGUI使用ADO组件、调用数据库的存储过程、生成EXECL表的例子
(自己学习记录一下,不一定合理,仅供参考)
本例子是 使用ADO等组件连接一个云服务器的一个数据库,调用GetOrg存储过程,把机构信息展现
把结果导出的一个EXECL表里,并下载
把 显示的 HSate 的值进行替换 1表示正常,其他表示暂停。
多数与 VCL APP的做法差不多。
要点:
- 使用ADO组件,必须将 TUniServerModule 的自动初始化属性 AutoColnitialize 设置为 True。
- 导出的EXECL表时:XLSObj.Sheets[0].AutoWidthCol(1); //Write 之前设置一下第二列的列宽度 为自动
- 导出的需要下载:
 UniSession.SendFile('机构清单.xlsx','机构清单1.xlsx');
 //第一个参数是服务器端的文件名 第二个为下载到客户端的文件名
- 显示值替换问题:
 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.
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号