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

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

TdxMemData应用示例代码:

 

ExpandedBlockStart.gif 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 .

 

转载于:https://www.cnblogs.com/gaiyang/archive/2011/07/22/2114144.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值