0

フィールド (FK - ForeignKey フィールド) を持つ Firebird DB テーブルがあります。

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 レコード) ではありませんが、100000 回を超える反復で FOR 構造内で使用されます。

そして、私は 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 に答える