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

BOOKをみる

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


36 ● IDCO400 ドライバのパラメータの TRAN_ISOLATION が、*NONE 以外の値が設定されていること。 (値は*CHG、*CS、*ALL で、IBM i 上のコミットメント制御に同じ)。 ● IBM i(AS/400)上で、対象ファイル のジャーナルが開始されていること。 エラーの取得  ApplyUpdates メソッドの引数は、そ の数のエラーが更新時に発生した場合に 処理を停止する。  ApplyUpdates(-1)と引数を「-1」に すると、エラー数に制限がないことにな るが、「0」にするとエラーが発生した時 点で更新処理が停止する。  なお、戻り値は発生したエラー数を返 すので、エラー発生時にメッセージを表 示したり、トランザクション時にロール バックしたりといった制御を行うことも できる。【ソース9】  また、TDataSetProvider のOnUpda teError で、ApplyUpdates 時のエラー を捕らえることができる。【ソース10】 5. 注意点 データ量  TClientDataSet はとても便利な機能 であるが、一旦すべてのデータをキャッ シュ上に取り込むため、データ量が膨大 だと時間が非常にかかることがある。そ の場合には、PacketRecords プロパティ を利用する方法が考えられる。  例えば、TDBGrid にデータを表示す る場合、データ量があまりにも多いと全 件を読み込むには時間がかかるため、な かなかデータが表示されない。しかし、 PacketRecords プロパティの値を1 画 面の表示データ件数分とすると、データ の表示が早くなる。  スクロールダウンする時には次のデー タの読み込みが行われるが、反対にスク ロールアップする時には、以前のデータ がキャッシュ上に残されているので、メ モリにアクセスし表示は速い。  しかし、スクロールの途中で読み込み が完了していない状態では、キャッシュ 上にはすべてのデータが存在しておらず、 集合体やソート処理などが行えないため、 せっかくの機能が十分活用できない。  このため、膨大なデータの時には全件 を取り込むのではなく、ある程度サー バー上でデータを絞り適切な件数になる ようにした方がよい。それによって本来 のTClientDataSet の機能を十分活用し つつ、速度も得られるようになる。 レコードの順序  文字コードの関係で、AS/400 では並 び順が「アルファベット→数字順」にな るが、PCでは「数字→アルファベット順」 となる。  このためローカルに取り込んだ時、イ ンデックスが英数混在の項目の場合、 TClientDataSet ではPC 上の並び順に なる。もしIBM i(AS/400)での並び 順とするのであれば、TDataSetProvider のOptions プロパティにあるpoRetain ServerOrder をTrue に設定する。これ だけでレコードの順序がIBM i(AS/ 400)とTClientDataSet で一致する。  なお、別端末からサーバー上のデータ が更新される場合、一旦キャッシュ上に 取り込まれたデータと差異が生じること がある。このため変更されやすいデータ については、ローカルキャッシュの活用 は適していない。 midas.dllの配布  TClientDataSet を使用したアプリ ケーションの配布時についてだが、mid as.dll も同時に配布する必要がある。し かし、Delphi7 以降であればアプリケー ションのuses 節にmidaslib を追加する 方法で、このdll の配布が不要になる。 6. まとめ  よく利用されるであろう機能を簡単に説 明したが、容易に利用できることやそのメ リットを実感していただけただろうか。  すべてを紹介しきれなかったが、興味 を持たれたのであれば、Delphi のヘル プにも記載されているので、ぜひ一度目 を通していただきたい。  なお、パフォーマンスについてはサー バー上での処理速度も当然ながら大きく 影響するため、その点の考慮も必要であ ることはいうまでもない。とはいえ、通 信回数を減らすという面では、クライア ントデータセットは非常に有益である。  RPG やCL の実行をはじめとするサー バー側の機能のみならず、ローカル キャッシュも十分活用していただき、 Delphi/400 の性能を十分に引き出して もらいたい。 M