【DO!BOOK・ページリンク】
2010_migaro_techreport_001   36 / 84

BOOKをみる

10秒後にBOOKのページに移動します


34 出を行えるが、TClientDataSet でも可 能である。【ソース4】【図5】  画面で条件を指定して、そのデータを 抽出するケースを考えてみよう。  SQL を使用して条件抽出する場合、 SQL は条件を変更する度に「サーバー への要求」→「サーバー上での処理」→ 「サーバーからの送信」という処理が発 生する。  一方、TClientDataSet は、キャッシュ 上にデータがすでに取り込まれているた め、それが不要になる。つまり処理が高 速で行える。 インデックスの作成  TClientDataSet は自由にインデック スを変更できるので、データの並び替え も行うことができる。  方法には、次の2 通りがある。 (1)IndexFieldName プロパティで指定  1 つのフィールドで昇順に並び替えを 行う時、このプロパティにフィールド名 を文字列で設定する。  例えば、DBGrid のタイトルクリック 時にその列フィールドで並び替えを行う のであれば、ソースのように記述するこ とで、インデックスの切り替えが可能に なる。【ソース5】 (2)IndexDefs プロパティで指定  こちらのプロパティを使用すれば、複 数のフィールドで並び替えができる。イ ンデックスを作成し、そのFields プロ パティでインデックス項目を指定する。  フィールドの区切りはセミコロン「;」 なので、例えば「日付(HIZUKE)」「売 上金額(URIK)」の順であれば、Fields プロパティで次のように記述する。 ・Fields プロパティ値:HIZUKE;URIK  設定後、TClientDataSet のIndex Na me プロパティで指定することで、この インデックスが反映される。【図6】【図7】  また、特定のフィールドを降順にする こともできる。前述のFields プロパティ のうち、降順にするフィールドをDescFi elds プロパティに記述するだけである。  例えば「売上金額(URIK)」だけ降 順にするのであれば、DescFields プロ パティに次のように記述するだけで、「日 付(昇順)」「売上金額(降順)」の順にデー タが並び変わる。【図8】 ・DescFields プロパティ値:URIK  上記のように、コード内でFields プ ロパティとDescFields プロパティを書 き換えることにより、降順/ 昇順を切り 替えることができる。複数のフィールド を記述する時には、Fields プロパティ と同様にセミコロン「;」を使用する。  最後に、並び替えの項目を変更するに は、以下のようにする。  ソース例では、2 つのインデックスを 用意し、切り替えを行っている。【ソー ス6】 (1)IndexFieldName プロパティで指定  プロパティ値を変更する。 (2)IndexDefs プロパティで指定  IndexDefs プロパティで詳細なイン デックス情報を複数設定し、IndexName プロパティでIndexDefs プロパティの設 定名を変更する。 集計項目  TClientDataSet には集計項目と呼ば れるものがあり、合計値や平均値などが 取得できる(※)。また図表に、集計演 算子をまとめた。【図9】  利用するには、データセットに項目を 追加する方法を用いる。「項目の新規作 成」で、「型」をAggregate、「項目の種 類」は集合体にすると項目が追加される。  例えば、合計値を求めたい時には、Ex pression プロパティにSUM 演算子を使 用した式を記述する。また、Active プロ パティをTrue にしなければならない。  表示はTDBEdit を使用すると、TDB Grid上の明細データ値を変更した時にも、 即座に反映される。その際、項目の表示 形式をAlignment やDisplayFormat プ ロパティで設定できる。【図10】【図11】 ※注意  集計対象となるのはキャッシュされているレコー ドだけなので、後述のPacketRecords プロパティ を指定している場合、全レコードでなくキャッシュ されているレコード内の集計や平均となる。 計算項目/内部計算項目  通常のデータセットでも計算項目は存 在するが、TClientDataSet には計算項 目とは別に、内部計算項目がある。計算 項目はレコードが変更されたり項目編集 が行われる度に発生するのに対し、内部 計算項目はデータとして保存され、項目 として扱うことが可能である。  分かりやすい例として、計算項目で ソートする場合を見てみよう。  まず、計算項目として粗利を作成する。 【図12】【ソース7】  実行してみると、TDBGrid への表示 は問題なく行われる。【図13】  次に、計算項目である「粗利」でソー トを行うために、ボタンで記述し実行し てみると、エラーが発生してしまう。 【ソース8】【図14】  これを内部計算項目に変更してみよう。 変更する場合には、計算項目フィールド のFieldKind プロパティをfkCalcula ted からfkInternalCalc に変えることで 行える。この状態で再びソートを行うと、 正常に並び替えが行われている。【図 15】  計算項目では内部計算項目と異なり、 データが保存されずその度に計算される ので、ソートを行う場合などには利用で きない。その際には、内部的に保存され る内部計算項目を使用する。 4. 更新処理 キャッシュ上での更新  更新処理を行うメソッドは通常のデー タセットと同じで、Insert、Edit、Dele te、Post を使用する。また、TDBGrid 上で直接操作したり、TDBNavigator から行うことも同じである。さらに、 CancelUpdates メソッドを呼び出すと、 すべての変更を取り消すことができる。 サーバーへの更新適用  キャッシュ上のデータ変更をサーバー 側へ反映させる処理が必要であるが、 ApplyUpdates メソッドを呼び出すだ けである。  ただし、キャッシュ上のデータ変更を サーバー側へ一括で反映させるという機 能上、トランザクション処理が必要であ る。BDE 接続の場合、以下の2 点を行う。