首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何自动删除尚未更新的客户端数据集记录

如何自动删除尚未更新的客户端数据集记录
EN

Stack Overflow用户
提问于 2016-03-25 02:54:35
回答 1查看 796关注 0票数 2

我在RAM数据库中有一个clientdataset,它维护网络中活动节点的列表。

节点连续报告确认它们是活动的,从而保持数据集的更新。

数据集显示在dbgrid中。

当节点停止报告状态时,它将在几秒钟不活动后从数据库中删除。

我是通过更新字段时更新超时值字段来做到这一点的。

每一秒,我都会遍历数据集,删除过时的记录。

这是可行的,但是当OnDrawColumnCell刷新一行网格以自定义列颜色时,网格有时会闪烁。我调用了DisableControls/EnableControls,但是在OnDrawCell重新绘制网格导致闪烁之前,似乎有一个小的延迟。

如果我禁用迭代以删除过时的记录,则闪烁停止。

有更好的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-25 10:08:23

最小化网格中闪烁的一种方法是使用一个“技巧”,它利用ClientDataSets的一个特殊特性,即您可以通过分配它们的数据属性来复制数据,如

代码语言:javascript
运行
复制
cdsDestination.Data := cdsSource.Data;

因此,您可以做的是拥有两个CDS,一个仅用于显示目的,另一个用于处理网络节点。这意味着对复制CDS的更改保持在最低限度,您几乎可以对源CDS做任何您想做的事情,并且只要您愿意(当然,您可以在下一个目的地CDS更新之前完成它)。就像这样:

代码语言:javascript
运行
复制
const
  NodeCount = 1000;

procedure TForm1.DoDataUpdate;
begin
  //  do something to CDS1's data here
  cdsCopy.Data := CDS1.Data;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i : Integer;
begin
  CDS1.CreateDataSet;
  for i := 1 to NodeCount do
    CDS1.InsertRecord([i, Now]);
  CDS1.First;
  DBGrid1.DataSource := DataSource1;
  DataSource1.DataSet := cdsCopy;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  DoDataUpdate;
end;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36213318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档