お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"複合インデックスのマスターリンク(もどき"







Paradox形式のデータであれば、複合インデックスのマスターリンクが
出来るとのことなのですが、dBASE形式では、プロパティの設定では、
マスターリンクの設定が出来ません。
しかし、よくよくヘルプを見て行くと、ApplyRange を使えば、
同じことが出来るのに気がつきました。
プログラムで書いても、トランザクションの選択が実に速い。速い、速い。

Table1 も Table2 も DBGrid で表示させているのですが、Table1 のカーソルを
動かすたびに、(さくさくと) Table2 のレコードが表示されます。


この場合の環境:
データ形式 :dBASE3+形式
Delphi   :Delphi3
インデックス:Table2 ---> 受注(文字項目)
             部(文字項目)
             番号(数値項目)
       インデックス式(dBASEでいうと) 受注+部+Str(番号,2)


ここでは、dBASE3+のファイル形式ですが、その他のファイル形式でも、
多分動くと思います。
ほかのファイル形式でも、複合のマスターリンクは、プログラムで書いて
おいた方がいろいろ便利だと思います。
可読性が増しますし・・・・・。


procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
   Table2.SetRangeStart;
   Table2.FieldValues['受注'] := Table1.FieldByName('受注').AsString;
   Table2.FieldValues['部'] := Table1.FieldByName('部').AsString;
   Table2.FieldValues['番号'] := ' 0';
   Table2.SetRangeEnd;
   Table2.FieldValues['受注'] := Table1.FieldByName('受注').AsString;
   Table2.FieldValues['部'] := Table1.FieldByName('部').AsString;
   Table2.FieldValues['番号'] := '99';
   Table2.ApplyRange;
end;


1)イベントは、マスターファイルの OnAfterScroll を使用してください。
  でないと、マスターファイルのレコードポインタの移動を
  正しく認識出来ません。
  ただし、このイベントは、Delphi3 以上にしかないそうです。

2)このままでは、プログラムを立ち上げたときにエラーになります。
  Table2 を Table1 より先にオープンしておかなければならないからです。

  Table2 を Table1 より先にオープンするには、
  フォーム上で、<右クリック><作成順序>を使用するのが、簡単です。
  TTable のほかに TDataSource も変更しておいてください。


                         H9.11.28        マ太郎


Original document by マ太郎          氏 ID:(VYC12077)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum