当前位置:首页 > 数据库 > SQlite

FireDAC 下的 Sqlite [8] - 自定义函数.

Unit1; interface uses   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms,   Vcl.Dialogs, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,   FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Stan.ExprFuncs, FireDAC.VCLUI.Wait, FireDAC.Stan.Param, FireDAC.DatS,   FireDAC.DApt.Intf, FireDAC.DApt, Vcl.Grids, Vcl.DBGrids, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Comp.UI,   FireDAC.Phys.SQLite, Vcl.StdCtrls, FireDAC.Phys.SQLiteWrapper; type   TForm1 = class(TForm)     FDConnection1: TFDConnection;     FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink;     FDGUIxWaitCursor1: TFDGUIxWaitCursor;     FDQuery1: TFDQuery;     DataSource1: TDataSource;     DBGrid1: TDBGrid;     Button1: TButton;     Button2: TButton;     FDSQLiteFunction1: TFDSQLiteFunction;     FDSQLiteFunction2: TFDSQLiteFunction;     procedure FormCreate(Sender: TObject);     procedure Button1Click(Sender: TObject);     procedure Button2Click(Sender: TObject);     procedure FDSQLiteFunction1Calculate(AFunc: TSQLiteFunctionInstance; AInputs: TSQLiteInputs; AOutput: TSQLiteOutput; var AUserData: TObject);     procedure FDSQLiteFunction2Calculate(AFunc: TSQLiteFunctionInstance; AInputs: TSQLiteInputs; AOutput: TSQLiteOutput; var AUserData: TObject);   private     { Private declarations }   public     { Public declarations }   end; var   Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); const   strTable = ‘CREATE TABLE MyTable(姓名 string(10), 语文 Integer, 数学 Integer, 英语 Integer)‘; // 建一个学生成绩表 begin   { 建立一个成绩表, 并插入测试数据 }   FDConnection1.Params.Add(‘DriverID=SQLite‘);   FDConnection1.ExecSQL(strTable);   FDQuery1.ExecSQL(‘INSERT INTO MyTable(姓名, 语文, 数学, 英语) VALUES(:1, :2, :3, :4)‘, [‘张三‘, 66, 77, 88]);   FDQuery1.ExecSQL(‘INSERT INTO MyTable(姓名, 语文, 数学, 英语) VALUES(:1, :2, :3, :4)‘, [‘李四‘, 77, 88, 99]);   FDQuery1.Open(‘SELECT * FROM MyTable‘);   { 分别给两个 TFDSQLiteFunction 设定参数 }   FDSQLiteFunction1.DriverLink := FDPhysSQLiteDriverLink1;   FDSQLiteFunction1.FunctionName := ‘MyFun1‘; // 函数名   FDSQLiteFunction1.ArgumentsCount := 3; // 函数的参数个数   // FDSQLiteFunction1.OnCalculate := FDSQLiteFunction1Calculate; //在设计时建立 OnCalculate 事件更方便   FDSQLiteFunction1.Active := True;   FDSQLiteFunction2.DriverLink := FDPhysSQLiteDriverLink1;   FDSQLiteFunction2.FunctionName := ‘MyFun2‘;   FDSQLiteFunction2.ArgumentsCount := 3;   // FDSQLiteFunction2.OnCalculate := FDSQLiteFunction2Calculate; //在设计时建立 OnCalculate 事件更方便   FDSQLiteFunction2.Active := True; end; { 调用 MyFun1 } procedure TForm1.Button1Click(Sender: TObject); begin   FDQuery1.Open(‘SELECT 姓名, MyFun1(语文, 数学, 英语) AS 总分 FROM MyTable‘); end; { 调用 MyFun2 } procedure TForm1.Button2Click(Sender: TObject); begin   FDQuery1.Open(‘SELECT 姓名, MyFun2(语文, 数学, 英语) AS 平均分 FROM MyTable‘); end; { 函数 MyFun1 的定义: 算总分 } procedure TForm1.FDSQLiteFunction1Calculate(AFunc: TSQLiteFunctionInstance; AInputs: TSQLiteInputs; AOutput: TSQLiteOutput; var AUserData: TObject); begin   AOutput.AsInteger := AInputs[0].AsInteger + AInputs[1].AsInteger + AInputs[2].AsInteger; end; { 函数 MyFun2 的定义: 算平均分 } procedure TForm1.FDSQLiteFunction2Calculate(AFunc: TSQLiteFunctionInstance; AInputs: TSQLiteInputs; AOutput: TSQLiteOutput; var AUserData: TObject); begin   AOutput.AsFloat := (AInputs[0].AsInteger + AInputs[1].AsInteger + AInputs[2].AsInteger) / 3; end; end.


效果图:
FireDAC 下的 Sqlite [8] - 自定义函数. - 文章图片

FireDAC 下的 Sqlite [8] - 自定义函数.

标签:cal   mcr   ext   alc   成绩表   wrap   logs   效果   dialog   

本文系统来源:https://www.cnblogs.com/yjhb/p/11804239.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!