200分征求InMemory技术,“走过路过不忘UP”,UP有分!<千山求教>

liang_z 2001-10-18 07:17:38
《版主答疑——DELPHI高级编程技巧》中的例子有问题的,
1、InMemory是否就是不要有实际的数据库表而可以Active的数据集?
2、给我一个实例源码

->UP一下至少1分!
->回答正确的另开贴送200分!
->给我指明道路的另开贴送100分!
->一周内埋单!
...全文
706 90 打赏 收藏 转发到动态 举报
写回复
用AI写文章
90 条回复
切换为时间正序
请发表友善的回复…
发表回复
sonhong 2001-10-26
  • 打赏
  • 举报
回复
to: lovewangj(lllll)
能详细解释这句话吗。
方法1使用简单,但由于利用查询控件,清空数据时需要查询服务器后台数据库,所以速度稍慢

怎么慢
liang_z 2001-10-24
  • 打赏
  • 举报
回复
看样子这个问题是不能圆满解决了
liang_z 2001-10-24
  • 打赏
  • 举报
回复
我要埋单了!
pighead 2001-10-23
  • 打赏
  • 举报
回复
up
lovewangj 2001-10-22
  • 打赏
  • 举报
回复
1.建立临时表
  数据输入是开发数据库程序的必然环节。在Client/Server结构中,客户端可能要输入一批数据后,再向服务器的后台数据库提交,这就需要在本地(客户端)建立临时数据表来存储用户输入的数据,待提交后,清除本地表数据。这种方法的好处是:提高输入效率,减小网络负担。

  由于用户一次输入的数据量一般情况下较小(不会超过几百条记录),所以临时表可以建立在内存中,这样处理速度较快。
  方法1:使用查询控件(TQuery)
  第1步:在窗体上放上查询控件(TQuery),设置好所连接的数据表。
  第2步:使TQuery. CachedUpdates=True;
   TQuery. RequestLive=True
  第3步:在原有的SQL语句后加入一条Where子语句,要求加入这条Where子语句后SQL查询结果为空。
  例如:
  SELECT Biolife.″Species No″, Category, Common_Name, Biolife.″Species
Name″, Biolife.″Length (cm)″, Length_In, Notes, Graphic
   FROM ″biolife.db″ Biolife
  where Biolife.Category=′A′ and Biolife.Category=′B′
  这样临时表就建立完成了。

  方法2:使用代码创建临时表
  代码如下:
  function CreateTableInMemory(const AFieldDefs:TFieldDefs):TDataSet;
  var
TempTable:TClientDataSet;
  begin
   TempTable:=nil;
   Result:=nil;
   if AFieldDefs<>nil then
   begin
   try
   TempTable:=TClientDataSet.Create(Application);
   TempTable.FieldDefs.Assign(AFieldDefs);
   TempTable.CreateDataSet;
   Result:=(TempTable as TDataSet);
   Except
   if TempTable<>nil then
TempTable.Free;

  Result:=nil;
   raise;
    end
end
 end;

  在程序中按如下方法使用:
  procedure TForm1.Button1Click(Sender: TObject);
  var
ADataSet:TDataSet;
  begin
   ADataSet:=TDataSet.Create(Self);
   with ADataSet.FieldDefs do
   begin
   Add(′Name′,ftString,30,False);
   Add(′Value′,ftInteger,0,False);
   end;

   with DataSource1 do
   begin
   DataSet:=CreateTableInMemory(ADataSet.FieldDefs);
   DataSet.Open;
   end;

   ADataSet.Free;
  end;

  临时表创建完成。

  方法1使用简单,但由于利用查询控件,清空数据时需要查询服务器后台数据库,所以速度稍慢,而且不适用于临时表中各个字段由数个数据表的字段拼凑而成的情况。方法2适用范围广、速度快,但需要编写代码。
yicw 2001-10-22
  • 打赏
  • 举报
回复
gz and up~
bubble 2001-10-22
  • 打赏
  • 举报
回复
kk
Nizvoo 2001-10-22
  • 打赏
  • 举报
回复
你完全可以自己构建一个临时表。
比如采用dbf的。
没有暂时就放在里头。
有的话就update你数据库里的表。
属于个人经验,各位莫笑
zengyufeng 2001-10-22
  • 打赏
  • 举报
回复
我都跟你说了:RX控件组里边的TRXMemoryData!你当我真是没事做来这里闲逛阿,你自己去看看这个控件吧,不要浪费大家的时间!

这样的帖子真是无聊之极!!!!!!!!!
love_me_forever 2001-10-22
  • 打赏
  • 举报
回复
up

wljcr 2001-10-22
  • 打赏
  • 举报
回复
djf
up
Almzg_0 2001-10-22
  • 打赏
  • 举报
回复
airhorse 我等你的看法。。。。。
di2000 2001-10-22
  • 打赏
  • 举报
回复
up
dfan 2001-10-22
  • 打赏
  • 举报
回复
top
dqzgw 2001-10-22
  • 打赏
  • 举报
回复
  function CreateTableInMemory(const AFieldDefs:TFieldDefs):TDataSet;
  var
TempTable:TClientDataSet;
  begin
   TempTable:=nil;
   Result:=nil;
   if AFieldDefs<>nil then
   begin
   try
   TempTable:=TClientDataSet.Create(Application);
   TempTable.FieldDefs.Assign(AFieldDefs);
   TempTable.CreateDataSet;
   Result:=(TempTable as TDataSet);
   Except
   if TempTable<>nil then
TempTable.Free;

  Result:=nil;
   raise;
    end
end
 end;
dqzgw 2001-10-22
  • 打赏
  • 举报
回复
up
抱朴守拙 2001-10-22
  • 打赏
  • 举报
回复
up
xiaoyan 2001-10-20
  • 打赏
  • 举报
回复
up
snlee 2001-10-20
  • 打赏
  • 举报
回复
up
snlee 2001-10-20
  • 打赏
  • 举报
回复
up
加载更多回复(69)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧