zoukankan      html  css  js  c++  java
  • FDMemTable内存表操作

    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.

  • 相关阅读:
    MySQL笔记(6)---锁
    MySQL笔记(5)---索引与算法
    MySQL笔记(4)---表
    MySQL笔记(3)---文件
    MySQL笔记(2)---InnoDB存储引擎
    MySQL笔记(1)---MySQL体系结构和存储引擎
    生成器,迭代器,装饰器
    文件操作、def函数、模块导入、json
    数据类型、字符串操作
    基本数据类型,条件判断
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/5366443.html
Copyright © 2011-2022 走看看