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.
标签:EXECL,end,UniGUI,TMainForm,XLSObj,Sheets,ADO,AsString,Sender
From: https://www.cnblogs.com/qiao-fu/p/18002181