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