gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:26:09 27 4
gpt4 key购买 nike

我有一个 clientdataset在 RAM 中没有数据库,它维护网络中事件节点的列表。
节点不断报告确认它们还活着,从而保持数据集更新。
数据集显示在 dbgrid .

当节点停止报告状态时,它会在几秒钟不活动后从数据库中删除。
我通过在更新字段时更新超时字段来做到这一点。
每一秒我都会遍历数据集,删除过时的记录。

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

如果我禁用迭代以删除过时的记录,则闪烁停止。
有一个更好的方法吗?

最佳答案

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

cdsDestination.Data := cdsSource.Data;

因此,您可以做的是拥有两个 CDS,一个仅用于显示目的,另一个用于处理您的网络节点。这意味着对复制 CDS 的更改保持在绝对最低限度,您可以对源 CDS 做任何您喜欢的事情,并且只要您喜欢就可以使用它(当然,只要您能得到它)在下一次 objective-c DS 更新之前完成)。像这样的东西:
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;

关于delphi - 如何自动删除尚未更新的客户端数据集记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36213318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com