ClientDataSetで検索するには

解決


z  2009-07-02 23:26:05  No: 35000  IP: [192.*.*.*]

はじめましてzと申します。

あるテーブルの情報を加工してローカルファイル(TClientDataSet使用)に保存します。保存後はデータベースなどとは接続せずに
ローカルファイルだけを用いて検索・編集・更新などを行うプログラムを実装しようとしています。

その際に、特定の条件(ソートなども含む)を満たすレコードを取得したいのですが、Locate関数を使うと最初に
見つかったレコードは取得できますが、同じ条件を満たす次なるレコードに移動する方法が分かりません。
(Next関数だと最初に見つかったレコードの次レコードに移動する)

また、Locate関数だとソート指定できるかどうか分かりません。

現在は解決方法が分からないので全レコードをTListに保存してソート実施後に検索などしているのですが、
TClientDataSetの機能で上記のような事は可能なんでしょうか?
CommandTextプロパティはプロバイダ経由でTSQLDataSetなどとリンクがはられていないとうまくいかなそうな感じがします。
以上、教えていただけませんか。

なお開発環境はWindowsXP, Delphi2007です。

編集    削除
Mr.XRAY  2009-07-03 18:14:40  No: 35001  IP: [192.*.*.*]

Mr.XRAYです.

>データベースなどとは接続せずに
>ローカルファイルだけを用いて検索・編集・更新

とありますが,一方で,

>ClientDataSetで検索するには

とありますが,この関係というか,関連が理解できないのですが.
う〜む.

編集    削除
z  2009-07-03 20:59:44  No: 35002  IP: [192.*.*.*]

質問の内容がまとまってなく分かり難くてすみません。

まず、Oracleのテーブルの情報を適当に加工してClientDataSetのSaveToFileで拡張子がcdsのバイナリ形式で保存します。
(あらかじめClientDataSetにFieldDefs定義などでテーブルと同等の箱を用意しています)
以降はcdsファイルを読み込んでから(LoadFromFile)、その読み込んだ内容に対して処理(検索・更新など)を行おうとしています。
つまりここ以降で使用するコンポーネントはTClientDataSetとなっています。
このときに読み込んだ内容に対して検索を行いたいのですが、その方法が分かりません。

編集    削除
sato  2009-07-03 23:08:55  No: 35003  IP: [192.*.*.*]

Filter プロパティ?

編集    削除
フィルタリング  2009-07-03 23:10:41  No: 35004  IP: [192.*.*.*]

要はフィルタをかけたいという事ですよね?
ClientDataSetにはそのものズバリのプロパティがありますが使ってみましたか?

編集    削除
z  2009-07-03 23:35:34  No: 35005  IP: [192.*.*.*]

その通りです。有難う御座いました。
LocateとかCommandTextを使ってうまくいかないなぁと悩んでいました。

編集    削除
z  2009-07-03 23:37:10  No: 35006  IP: [192.*.*.*]

解決しました

編集    削除