在Delphi中实现SQL“Where”构造的最佳方法是什么?

时间:2012-10-16 15:09:37

标签: delphi delphi-xe2 firebird firebird2.5

我有带有字段的Firebird DB表(FK - ForeignKey Fields):

ID integer,
FACILITY_ID integer, --FK
SERVICE_ID integer, --FK
PROVIDER_ID integer, --FK
SELLER_ID integer, --FK
TARIFF_GROUP_ID integer, --FK
DATE_START date,
N_NORMATIVE_VALUE numeric(15,2),
N_METER_VALUE numeric(15,2),
T_NORMATIVE_VALUE numeric(15,2),
T_METER_VALUE numeric(15,2),
IS_ACTIVE smallint

我想将此表加载到内存中并在我的Delphi程序中使用它(readonly)。我必须搜索所有FK的记录(......其中FACILITY_ID =:FACILITY_ID和SERVICE_ID =:SERVICE_ID等...)

该任务的最佳容器是什么:动态数组或列表或其他什么?以及如何实现此搜索?哈希可能吗?

它不是很大的表(1000条记录),但将在FOR构造中使用,迭代次数超过100000次。

我正在使用Delphi XE2和IBX& UIB& FB25

2 个答案:

答案 0 :(得分:5)

您是否建议您将整个表加载到内存中,然后直接在Delphi中复制数据库已经提供的过滤功能?这似乎是不必要的努力 - 为什么不对数据库运行SELECT语句来获取所需的记录?

无论如何,保存从数据库检索的数据的最佳结构是一些TDataSet后代类。实际上有几组组件可以用于Firebird,具体取决于您可以使用的Delphi SKU。以下是可用的Firebird组件列表:http://www.firebirdfaq.org/faq8/

答案 1 :(得分:1)

我推荐过去成功使用过的TxQuery组件。它是一个开源的内存中SQL引擎。

TxQuery on GoogleCode