unit Umemtable;

interface

uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Rtti,
FMX.Layouts, FMX.Grid, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param,
FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, Data.DB,
FireDAC.Comp.DataSet, FireDAC.Comp.Client, FMX.Controls.Presentation, FMX.StdCtrls,
Data.Bind.EngExt, Fmx.Bind.DBEngExt, Fmx.Bind.Grid, System.Bindings.Outputs,
Fmx.Bind.Editors, Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope, FMX.Edit;

type
TForm1 = class(TForm)
Button1: TButton;
FDMemTable1: TFDMemTable;
DataSource1: TDataSource;
Grid1: TGrid;
bndsrcdb1: TBindSourceDB;
bndngslst1: TBindingsList;
lnkgrdtdtsrcBindSourceDB: TLinkGridToDataSource;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
lbl1: TLabel;
Label1: TLabel;
Label2: TLabel;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
Button11: TButton;
Button12: TButton;
Button13: TButton;
Button14: TButton;
Button15: TButton;
Button16: TButton;
Button17: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
procedure Button15Click(Sender: TObject);
procedure Button16Click(Sender: TObject);
procedure Button17Click(Sender: TObject);
private

{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Id: Integer;

implementation

{$R *.fmx}

procedure TForm1.Button10Click(Sender: TObject);
begin
//清空
FDMemTable1.EmptyView;
end;

procedure TForm1.Button11Click(Sender: TObject);
var
FRow, FRow2: TFDDatSRow;
begin
FRow := FDMemTable1.Table.Rows.Add([1, 'Hello', '2015-09-15']);
FRow2 := FDMemTable1.Table.NewRow();
FRow2.SetValues([2, 'Hello2', '2015-09-15']);
FDMemTable1.Table.Rows.Add(FRow2);
//以下方法2条记示增加成功
FDMemTable1.CachedUpdates;
FDMemTable1.CommitUpdates;
// FDMemTable1.ApplyUpdates;
// FDMemTable1.CommitUpdates;
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
FDMemTable1.Filter := 'Value = ' + QuotedStr('Hello');
FDMemTable1.Filtered := True;
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
//FDMemTable1.Filter := 'Value = ''Hello''';
FDMemTable1.Filter := 'Value = ''Hel*''';
//foCaseInsensitive时,“Filter”属性中的条件字符串文字与字段值进行比较时,不区分大小写。
//foNoPartialCompare强制Delphi将星号(*)解释为原义字符而非通配符。默认情况下,
//FilterOptions设置为空集
FDMemTable1.FilterOptions := [foCaseInsensitive];
FDMemTable1.Filtered := True;

end;

procedure TForm1.Button14Click(Sender: TObject);
begin
FDMemTable1.Filter := 'Value Like ''Hel%''';
FDMemTable1.Filtered := True;

end;

procedure TForm1.Button15Click(Sender: TObject);
begin
FDMemTable1.Filter := 'Id<10 and Value Like ''He%''';
FDMemTable1.Filtered := True;

end;

procedure TForm1.Button16Click(Sender: TObject);
var
FConnIntf: IFDPhysConnection;
FCommIntf: IFDPhysCommand;
oMechFilter: TFDDatSMechFilter;
FDataView: TFDDatSView;
begin

FDataView := FDMemTable1.Table.DefaultView;
FDataView.Sort := 'Id ASC';
//FDataView.Mechanisms.AddSort('Id DESC;Value ASC');
//FDMemTable1.View.Mechanisms.AddSort('Id');
FDataView.Mechanisms.Clear;

// FDMemTable1.View.Sort:=' Id DESC;'
//FDMemTable1.View.SortingMechanism;
// 4) filtering
// oMechFilter := TFDDatSMechFilter.Create('id > 3');
// FDMemTable1.View.Mechanisms.Add(oMechFilter);

// FDefaultView.Mechanisms.Clear;
// // 5) too
// FDMemTable1.View.Mechanisms.AddFilter('Id DESC');
// FDefaultView.Mechanisms.Clear;
// FDefaultView.Mechanisms.Clear;
// // 5) too
// FDefaultView.Mechanisms.AddFilter('id > 5');
// FDefaultView.Mechanisms.Clear;

end;

procedure TForm1.Button17Click(Sender: TObject);
var
oMech: TFDDatSMechFilter;
i: Integer;
FDataView: TFDDatSView;
begin
FDataView := FDMemTable1.Table.DefaultView;
// Locate row using locating mechanism
oMech := TFDDatSMechFilter.Create('Id=5');
oMech.Locator := True;
FDataView.Mechanisms.Add(oMech);
FDataView.Locate(i, True, True);
if i <> -1 then
begin
ShowMessage('找到 删除');
//FDataView.de;
end
else
begin
ShowMessage('NO');
end;
FDataView.Mechanisms.Clear;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
if FDMemTable1.Active then
FDMemTable1.Close;
with FDMemTable1.FieldDefs do
begin
Clear;
Add('Id', ftInteger, 0, False);
Add('Value', FtString, 20, False);
Add('Time', ftDateTime, 0, False);
end;
with FDMemTable1.IndexDefs do
begin
Clear;
// Add('Index1', 'Id', []); //定义索引 正序
Add('Index1', 'Id', [ixDescending]); //定义索引 倒序
end;
FDMemTable1.CreateDataSet;
for i := 1 to 15 do
begin
FDMemTable1.AppendRecord([i, 'ID' + IntTOSTR(i), Now()]);
end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
FDMemTable1.AppendRecord([StrToInt(Edit1.Text), Edit2.Text, StrToDate(Edit3.Text)]);
end;

procedure TForm1.Button5Click(Sender: TObject);
var
fld_Id: TIntegerField;
fld_Value: TStringField;
fld_Time: TDateTimeField;
i: Integer;
begin
//插入
with FDMemTable1 do
begin
DisableControls; //切断数据感知控件
try
Open; //打开
//定义Field
fld_Id := TIntegerField(FieldByName('Id'));
fld_Value := TStringField(FieldByName('Value'));
fld_Time := TDateTimeField(FieldByName('Time'));
for i := 0 to 9 do
begin
Inc(Id);
Append; //附加数据
//赋值
fld_Id.AsInteger := Id;
fld_Value.AsString := 'Hello PFeng!' + inttostr(Id);
fld_Time.AsDateTime := Now;
Post; //确定
end;
//UpdateIndexes;//更新索引
finally
EnableControls; //连接数据感知控件
end;
end;
end;

procedure TForm1.Button6Click(Sender: TObject);
var
fld_Id: TIntegerField;
fld_Value: TStringField;
fld_Time: TDateTimeField;
begin
//更新
with FDMemTable1 do
begin
Open;
fld_Id := TIntegerField(FieldByName('Id'));
fld_Value := TStringField(FieldByName('Value'));
fld_Time := TDateTimeField(FieldByName('Time'));
if Locate('Id', 5, []) then
begin
Edit;
fld_Value.AsString := '内容被修改';
fld_Time.AsDateTime := Now;
Post;
end;
end;
end;

procedure TForm1.Button7Click(Sender: TObject);
var
fld_Id: TIntegerField;
fld_Value: TStringField;
fld_Time: TDateTimeField;
begin
//删除
with FDMemTable1 do
begin
Open;
fld_Id := TIntegerField(FieldByName('Id'));
fld_Value := TStringField(FieldByName('Value'));
fld_Time := TDateTimeField(FieldByName('Time'));
if Locate('Id', 5, []) then
begin
Delete;
//UpdateIndexes;
end;
end;
end;

procedure TForm1.Button8Click(Sender: TObject);
var
fld_Id: TIntegerField;
fld_Value: TStringField;
fld_Time: TDateTimeField;
begin
//查询
with FDMemTable1 do
begin
Open;
fld_Id := TIntegerField(FieldByName('Id'));
fld_Value := TStringField(FieldByName('Value'));
fld_Time := TDateTimeField(FieldByName('Time'));
if Locate('Id', 5, []) then
ShowMessage(fld_Value.AsString);
//还可以用FindKey实现,结合索引速度更快
// kbmMemTable1.IndexFieldNames:='Id';
// if kbmMemtable1.FindKey([5]) then ...
end;
end;

procedure TForm1.Button9Click(Sender: TObject);
var
fld_Id: TIntegerField;
fld_Value: TStringField;
fld_Time: TDateTimeField;
id: Integer;
begin
//循环比较最小值
with FDMemTable1 do
begin
Open;
fld_Id := TIntegerField(FieldByName('Id'));
fld_Value := TStringField(FieldByName('Value'));
fld_Time := TDateTimeField(FieldByName('Time'));
DisableControls;
try
First;
id := fld_Id.AsInteger;
while not Eof do
begin
if id > fld_Id.AsInteger then
id := fld_Id.AsInteger;
Next;
end;
Locate('Id', id, []);
finally
EnableControls;
end;
end;
end;

end.

FDMemTable内存表操作的更多相关文章

  1. delphi 新版内存表 FDMemTable

    c++builder XE 官方demo最全60多个 http://community.embarcadero.com/blogs?view=entry&id=8761 FireDAC.Com ...

  2. MySQL内存表-临时表

    HEAP表是访问数据速度最快的MySQL表,他使用保存在内存中的散列索引.但如果MySQL或者服务器重新启动,表中数据将会丢失.用法:如论坛的在线人数统计,这种表的数据应该是无关紧要的,就几个简单的字 ...

  3. delphi 注册表操作(读取、添加、删除、修改)完全手册

    DELPHI VS PASCAL(87)  32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息. 一.创建和释放TRegistry对象 1.创建TRegistry对象.为了操 ...

  4. sql server 2014内存表

    内存数据库,指的是将数据库的数据放在内存中直接操作.相对于存放在磁盘上,内存的数据读写速度要高出很多,故可以提高应用的性能.微软的SQL Server 2014已于2014年4月1日正式发布,SQL ...

  5. MySQL内存表的特性与使用介绍

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  6. sql server 是否存在内存表?

    最近开发有个需求,需要使用到函数,但是函数中需要使用case when 判断分支,其实可以放到一张表中读取分支:但是物理表需要I/O开销,几十W的数据,线上开销也是很大的,所以就想sql server ...

  7. Mysql内存表的用处

    文章出自:http://blog.csdn.net/hitzhang/article/details/5994639 个人最欣赏mysql的地方就是他存储引擎的多样性和可扩展性,这样mysql也能拥有 ...

  8. c# 数据库编程(利用DataSet 和 DataAdaper对象操作数据库--单表操作)

    一.概述 前面2篇文章,介绍了使用SqlCommand对象利用sql命令来操作数据库. 这篇文章我们来介绍使用c#的DataSet 和 DataAdaper对象操作操作数据库. 先来介绍下这两个对象是 ...

  9. Delphi的注册表操作

    转帖:Delphi的注册表操作 2009-12-21 11:12:52 分类: Delphi的注册表操作 32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息.     一.创 ...

随机推荐

  1. mac 下使用gcc 编译c函数

    mac 终端其实和window 的cmd类似,由于mac 的os x 采用了unix 系统,所以,各种类似UNIX下的命令都有用.最近在看computer science ,用到了命令行. 下面是一个 ...

  2. 【C++】模板简述(三):类模板

    上文简述了C++模板中的函数模板的格式.实例.形参.重载.特化及参数推演,本文主要介绍类模板. 一.类模板格式 类模板也是C++中模板的一种,其格式如下: template<class 形参名1 ...

  3. SQL优化基础 使用索引(一个小例子)

    按照本文操作和体会,会对sql优化有个基本最简单的了解,其他深入还需要更多资料和实践的学习: 1. 建表: 复制代码代码如下: create table site_user ( id int IDEN ...

  4. CREATE SCHEMA - 定义一个新的模式

    SYNOPSIS CREATE SCHEMA schemaname [ AUTHORIZATION username ] [ schema_element [ ... ] ] CREATE SCHEM ...

  5. 360浏览器 收藏夹 ico 缓存 目录

    C:\Users\Administrator\AppData\Roaming\360se6\apps\data\users\default\data\ico

  6. 利用jquery制作滚动到指定位置触发动画

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>利用 ...

  7. 《Java程序设计》课程试题

    < Java程序设计 >课程试题 一.单项选择题(20题:每题2分,共40分) 1.若数组a定义为int[][]a=new int[3][4],则a是___. A)一维数组 B)二维数组 ...

  8. JavaSE-08 封装

    学习要点 封装 访问控制符 包 封装 没有封装的代码有何缺陷? 例如:对狗狗的健康值赋值为-100.如何避免?——使用封装. 封装的概念 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该 ...

  9. SQL函数解释(待补)

    1.SQL— CONCAT(字符串连接函数) 有的时候,我们有需要将由不同栏位获得的资料串连在一起.每一种资料库都有提供方法来达到这个目的: MySQL: CONCAT() Oracle: CONCA ...

  10. css hack解决方案

    现在大家做项目的时候估计很多都已经不怎么考虑兼容问题,大多数的公司都已经舍弃ie7.8了,都是从ie9+开始,所以说不会有那么多的兼容问题需要去解决了,但是由于本人力求完美的工作习惯,做项目的时候还是 ...