Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 仅当存在相应的查找结果值时才指定键字段值_Delphi - Fatal编程技术网

Delphi 仅当存在相应的查找结果值时才指定键字段值

Delphi 仅当存在相应的查找结果值时才指定键字段值,delphi,Delphi,我有十个主表和一个事务表。在我的事务表中(它是一个内存表,就像ClientDataSet一样),有十个查找字段指向我的十个主表 现在,我正在尝试从不同的服务器(数据以soapxml的形式提供)动态地将关键字字段值分配给(事务表的)所有查找关键字字段值。在分配这些值之前,我需要检查相应的结果值在主表中是否有效。我正在使用一个过滤器(例如status=1)来检查它是否有效 目前我们的做法是,在分配每个键字段值之前,我们使用此过滤器过滤主表,并使用locate函数检查是否存在。如果找到了,我们将指定它

我有十个主表和一个事务表。在我的事务表中(它是一个内存表,就像ClientDataSet一样),有十个查找字段指向我的十个主表

现在,我正在尝试从不同的服务器(数据以soapxml的形式提供)动态地将关键字字段值分配给(事务表的)所有查找关键字字段值。在分配这些值之前,我需要检查相应的结果值在主表中是否有效。我正在使用一个过滤器(例如status=1)来检查它是否有效

目前我们的做法是,在分配每个键字段值之前,我们使用此过滤器过滤主表,并使用locate函数检查是否存在。如果找到了,我们将指定它的键字段值

如果我的主表中只有很少的记录,这将很好地工作。考虑我的主表有五万个记录(是的,客户有这么多的数据),这将导致大的性能问题。 你能帮我处理一下这种情况吗

谢谢
巴兹尔

要知道它是否慢,为什么慢,在哪里慢,以及什么解决方案最有效,唯一的方法就是分析它的特性。
不要做先验的假设

也就是说,尽量减少到服务器的往返次数和传输的数据量通常是一件好事。
例如,如果您的主表在服务器上(您的问题不是100%清楚),则只发送一个查询(或存储的proc调用),将所有要检查的值作为参数一次传递,并执行一系列“if EXISTS…”操作,同时返回所有答案(输出参数或1记录数据集)将是一个良好的开端


而且50000条记录并不多,所以,正如我最初所说,您甚至可能没有性能问题。先检查一下

如果使用依赖于数据集的查找字段,我看不到任何其他选项。您可以直接查询数据库,而不是在数据集中定位它。查找值可能是联接查询的结果。很难回答这个问题,因为我不知道事务表的用法(可以添加/编辑/删除吗?)。是的,用户可以编辑事务表。它是TDBISAMTable组件。就像TClientDataSetI一样,我认为您必须使用各种方法运行一些测试用例,以根据您的设计确定哪种方法将提供最佳性能。您可以尝试对主表使用查询,使用键查询每个主表,如果query.recordcount>0,则该键存在,并将其与筛选/定位方法进行比较。