カスタム形式のファイルからデータを取り込んだメモリ内テーブルがあります。他の場所に複製せずに、これをデータのリポジトリとして使用したいと思います。各レコードには、1..30 の特別なタグ フィールドがあります。タグ フィールドに対応する関連レコード セットがそれぞれ含まれているように見える DBGrid または DBChart に提供できる最大 30 個の仮想「テーブル」を作成したいと考えています。私はデータベースの作業は初めてですが、Delphi についてはよく知っているので、単純な反復プロセスを使用してソリューションを DIY し、インメモリ テーブルをさらに作成することができました。ただし、もう少しスケーラブルなものが必要です。SQL select ステートメントがあることがわかりますが、(TQuery を使用して) 簡単なフィドルで (DevExpress からの) インメモリ テーブルでこれがどのように機能するかわかりませんでした。
3 に答える
TClientDataSet、TkbmMemTable、TADMemTable などの一部のインメモリ テーブルでは、メイン テーブルのクローンを作成できます。次に、複製されたコピーにフィルター、並べ替え順序、範囲を適用できます。したがって、いくつかの仮想ビューを同じレコード セットに構築することができます。各ビューは、SELECT * FROM タブ WHERE ... ORDER BY ... のように見えます。詳細については、メソッド CloneCursor とプロパティ Filter、Filtered、IndexFieldNames などのヘルプを確認してください。
TQuery はメモリ内テーブルをデータソースとして使用できません。xQuery のように、序数の TDataSet の子孫に対して SQL クエリを実行できる他の製品はほとんどありません (1 つだけ?)。
最後に、SQLite や FB Embedded などの組み込み DB にデータをロードして、このデータベースにクエリを実行することができます。
AidAilmの無料(個人使用)SQLMemTableコンポーネント:これらには、SQLMemTable、SQLMemQuery、およびSQLMemDatabseが含まれます。
各コンポーネントは、その「従来の」対応物として機能します。
- TSQLMemDatabaseを削除します。ニーズに合わせてDatabaseNameプロパティを変更します。
- TSQLMemTableコンポーネントを追加します。ニーズに合わせてTableNameプロパティを変更します。いくつかのフィールドを追加します。テーブルをアクティブにします。TSQLMemDatabaseコンポーネントに自動的に追加されます。
TSQLMemQueryは、TDataSourceを介してTSQLMemTableコンポーネントにリンクされています。TSQLMemTableのtablenameプロパティは、TSQLMemQuerySQLクエリでそれを識別するために使用されます。考えられるすべてのSQLコマンドについては、オンラインドキュメントを確認してください。
詳細情報へのリンクは次のとおりです:http://www.aidaim.com/in-memory_sql_database_delphi.htm
データセットが特定のフィールドでソートされていない場合は、各レコードにアクセスする必要がありますが、ソートされている場合は、探している値よりも大きい最初の不一致を見つけるだけで済みます。