关于内存控件TdxMemData的编程设计思路_学习

  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.

 

转载于:https://www.cnblogs.com/hsbs/p/4311330.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值