gpt4 book ai didi

Delphi,TcxGrid 或 TDataSet 中最快的记录访问方法是什么

转载 作者:行者123 更新时间:2023-12-03 15:51:07 25 4
gpt4 key购买 nike

我正在使用 Delphi 2007 和 TcxGrid 来显示文件库的内容。该数据库包含有关文件类型、名称、路径和扩展名的信息。

在测试中,我通过 TDataSet 将 1700 条记录加载到网格中。我还在网格中为另外 3 个需要计算的字段腾出空间。它们是文件是否存在、文件大小和修改日期。

我的目标是向用户显示存储的所有信息(效果很好并且速度很快),然后在后台线程中查找其他三个数据字段的信息,然后将它们插入到 TcxGrid 中。这个问题与我正在做的线程几乎没有关系。它工作正常。

我的问题是,访问已构建的网格中的字段时,速度会大大减慢。我尝试了两种不同的方法...

  1. Grid.DataController.Values[RecordIndex,FieldIndex] - 但这是一个变体,我怀疑这就是它如此慢的原因

  2. Grid.DataController.DataSet.FindFirstGrid.DataController.DataSet.FindNextGrid.DataController.DataSet.Fields[FieldIndex]但使用这种“寻找”方法与我尝试的第一种方法一样慢。定位和移动也很慢。

这么长的问题简短地说,访问记录的最快方法是什么?

最佳答案

另请说明您使用的是 TcxGridDBTableView 还是 TcxGridTableView?

我认为使用非数据库感知的 TcxGridTableView 或 TcxBandedGridTableView

View.DataController.Values[RecordIndex, FieldIndex] 是最快的。

即使您有一个数据库应用程序,您也可以在初始化时加载 View 的非数据库版本,然后处理 DataController 事件来检测数据更改并发出相应的 SQL 命令来更新数据库。

您可以像这样填充 View :

class procedure TForm1.FillView(const View: TcxGridBandedTableView; const Sql: string);
var
Reader: TMyOrmDataReader;
i: Integer;
begin
Assert(Assigned(View), 'View is not assigned parameter.');
with View.DataController do
begin
BeginFullUpdate;
try
Reader := TMyOrm.GetDataReader(SQL);
try
i := 0;
RecordCount := 50 * 1000; // make it something big in order to avoid constant resizing by 1
while Reader.Read do
begin
// Fill the view
Values[i, 0] := Reader.GetInt32(0);
Values[i, 1] := Reader.GetString(1);
Inc(i);
end;
RecordCount := i - 1;
finally
Reader.Free;
end;
finally
EndFullUpdate;
end;
end;
end;

然后访问如下值:

View1.DataController.Values[View1.DataController.FocusedRecordIndex, View1Column1.Index].AsString

关于Delphi,TcxGrid 或 TDataSet 中最快的记录访问方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4080196/

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