0

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

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 程序中使用它(只读)。而且我必须按所有 FK 搜索记录(....其中 FACILITY_ID = :FACILITY_ID 和 SERVICE_ID = :SERVICE_ID 等..)

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

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

我正在使用带有 IBX & UIB & FB25 的 Delphi XE2

4

2 回答 2

5

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

无论如何,保存从数据库中检索到的数据的最佳结构是某个 TDataSet 后代类。实际上,有几组组件可以为 Firebird 执行此操作,这取决于您可以使用的 Delphi 的 SKU。以下是可用的 Firebird 组件列表:http ://www.firebirdfaq.org/faq8/ 。

于 2012-10-16T15:25:36.307 回答
1

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

GoogleCode 上的 TxQuery

于 2012-10-16T18:31:08.373 回答