Q&A 41

対話表引きの活用法を知りたい


候補を表示させそこから値を選んで入力できる組み込み関数 #対話表引き の活用方法をご紹介します。

対象表の全レコードを表示させる

例えば,'住所.DPT' の [都道府県名] 項目に,都道府県名が47レコードある表 '県名.DPT' から表引きする場合は,'住所.DPT' の [都道府県名] 項目に,次の初期値式を設定します。
#対話表引き('県名', 1, .[都道府県名])
ここでは,条件式に 1 を指定することで '県名.DPT' のすべてのレコードを表示させています。

対話表引きを複数行って絞り込む

ところで,1都1道2府43県すべてを表示されても,選びにくいと思います。そこで,先に地方名を選び,次にその地方に属する都道府県名を選ぶようにしてみましょう。 '県名.DPT' に [地方名] 項目を用意して,地方名と県名を値として持たせます。

地方名都道府県名
北海道北海道
東北青森県
東北岩手県
 : 
東北宮城県
 : 
関東茨城県

'住所.DPT' の [都道府県名] 項目には,次の初期値式を設定します。
$地方名:=#対話表引き('県名', 1, .[地方名]), #対話表引き('県名', .[地方名]=$地方名, .[都道府県名])
ここでは,まず '県名.DPT' のすべての地方名を表示させ,選んだ地方名を変数 $地方名 に代入し,次の対話表引きで地方名を指定して該当する都道府県名だけを表示させています。

多くのレコードから特定のレコードを表示させる

上の例では地方名を表示させる対話表引きの条件は 1 としているのですが,ウィンドウには同じ地方名が並ぶことはありません。これは DBPro が自動的に値を単一化しているためです。
レコード数が少ないときはこの機能で済むかと思いますが,レコード数が多くなると遅くなってしまいます。そんなときは,例えば [候補] 等のダミー項目を用意し,表引きウィンドウに表示したいレコードに値を入力します。またこの項目を第1キー項目とする索引を登録しておきます。こうすることで高速に目的のレコードを意図した並び順で表示させることができます。

地方名都道府県名候補
北海道北海道1
東北青森県2
東北岩手県 
 :  
東北宮城県 
 :  
関東茨城県3

対話表引きの式は以下のようになります。
$地方名:=#対話表引き('県名', .[候補]>0, .[地方名],, '候補昇順'), …