TdxMemData控件可以把DataSet数据库保存在内存中,并显示在TdxDBGrid上,而通过dxmdt1.FieldByName('字段').value得到当前光标所在值。通过while遍历 整个数据集中的值。如此可以在内存中先操作数据然后再用sql语句提交到数据库, 通常对一条记录都有增删改的操作,内部的操作可以这样实现:增删改按钮下只是操作内存中的数据,当真正保存按钮时才提交到数据库。方便数据的处理。

TdxMemData应用示例代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB, dxExEdtr, dxDBTLCl, dxGrClms, dxDBCtrl,
  dxDBGrid, dxTL, dxCntner, dxmdaset, Grids, DBGrids;

type
  TForm1 = class(TForm)
    qry1: TADOQuery;
    con1: TADOConnection;
    mmo1: TMemo;
    btn1: TButton;
    dxmdt1: TdxMemData;
    dxdbgrd1: TdxDBGrid;
    ds1: TDataSource;
    intgrflddxmdt1orderid: TIntegerField;
    intgrflddxmdt1custid: TIntegerField;
    intgrflddxmdt1empid: TIntegerField;
    dtflddxmdt1orderdate: TDateField;
    strngflddxmdt1shipaddress: TStringField;
    dxdbgrdclmndxdbgrd1RecId: TdxDBGridColumn;
    dxdbgrdmskclmndxdbgrd1orderid: TdxDBGridMaskColumn;
    dxdbgrdmskclmndxdbgrd1custid: TdxDBGridMaskColumn;
    dxdbgrdmskclmndxdbgrd1empid: TdxDBGridMaskColumn;
    dxdbgrdtclmndxdbgrd1orderdate: TdxDBGridDateColumn;
    dxdbgrdmskclmndxdbgrd1shipaddress: TdxDBGridMaskColumn;
    btn2: TButton;
    dbgrd1: TDBGrid;
    btn3: TButton;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
  i:Integer;
begin
  i:=1;
  qry1.Connection:=con1;
  qry1.SQL.Clear;
  qry1.SQL.Add('select top 12 orderid,custid,empid,orderdate,shipaddress from TSQLFundamentals2008.sales.Orders');
  qry1.Open;
  qry1.First;
  while not qry1.Eof do
  begin
    dxmdt1.Append; //从数据为读取值添加到内存中
    dxmdt1.FieldByName('RecId').AsInteger:=(i+1);
    dxmdt1.FieldByName('orderid').AsInteger:=StrToInt(qry1.FieldByName('orderid').asstring);
    dxmdt1.FieldByName('custid').AsInteger:=StrToInt(qry1.FieldByName('custid').asstring);
    dxmdt1.FieldByName('empid').AsInteger:=StrToInt(qry1.FieldByName('empid').asstring);
    dxmdt1.FieldByName('orderdate').AsDateTime:= StrToDate(qry1.FieldByName('orderdate').asstring);
    dxmdt1.FieldByName('shipaddress').AsString:=qry1.FieldByName('shipaddress').asstring;
    mmo1.Lines.Add(qry1.FieldByName('orderdate').AsString)   ;
    qry1.Next;
    inc(i);
  end;
  qry1.Close;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
  dxmdt1.First;
  while not dxmdt1.Eof do
  begin
    if (dxmdt1.FieldByName('orderid').AsInteger=10249) or (dxmdt1.FieldByName('orderid').AsInteger=10250) then
    begin
     dxmdt1.Edit;      //需要先设置为edit模式
     dxmdt1.FieldByName('shipaddress').AsString:='zheng zhou';
    end;
    dxmdt1.Next;
  end;
  dxmdt1.Edit;
  dxmdt1.Post;
  dxmdt1.First;
end;
procedure TForm1.btn3Click(Sender: TObject);
begin

end;

end.