我想知道最好(阅读:最快)的方法是在Tquery语句的结果集中找到记录。
到目前为止,我使用的是TQuery.Locate,如果我是对的,这是唯一可以用于搜索结果集中的语句。那么,我们如何优化这一点呢?
我有一些想法,但还没有时间在大型数据集中比较它们:
假设我们有一个包含以下字段的表:
Create Table aTable (
ID int,
Name1 varchar(50),
Name2 varchar(50));以及以下查询:
SELECT ID, Name1, Name2 from aTable我们希望通过其ID在结果集中找到一个记录。
如果
中添加"Order“,那么
对此有什么想法吗?
编辑以澄清这一用途:查询由Reportbuilder执行,然后通过datapipeline (即TQuery.Dataset)提供。在自定义报告中,我需要基于更高级别的ID来遍历管道,所以这里不使用查询是不适用的。我只是想知道我上面的任何建议是否会加快速度。
发布于 2011-08-08 13:24:40
以下是一些你可能觉得有帮助的建议
query
H 115)对FastReports进行一次尝试
如果在大型数据集中有主/详细信息,请不要获取所有详细信息记录--换句话说--不要使用本地主详细信息--让DB引擎只给出所需的记录。
发布于 2011-08-08 11:47:34
如果您需要在大型数据集上经常这样做,则最好将数据集转换为记录数组,并在索引字段上实现一些自定义搜索例程。
发布于 2011-08-08 12:01:44
您应该添加要搜索的ID,以便只检索预期的行。
在ReportBuilder数据视图中,转到查询设计器,然后到Search选项卡,然后添加带有“自动搜索”选项的字段设置。
然后转到ReportBuilder Calc视图,从菜单中选择“view / Events”。单击"Report object“树视图中的报表根项,然后双击"OnGetAutoSearchValues”并检索期望值:
var
Fld : TppAutoSearchField;
i : integer;
begin
for i:=0 to Report.AutoSearchFieldCount-1 do
begin
Fld := Report.AutoSearchFields[i];
if Fld<>nil then
begin
if (Fld.FieldName='FIRST_PARAM') then
begin
Fld.SearchExpression := .....;
end
else if (uppercase(Fld.FieldName)='2ND_PARAM') then
begin
Fld.SearchExpression := intToStr(...);
end;
end;
end;
end;https://stackoverflow.com/questions/6981348
复制相似问题