next up previous contents
Next: システムの評価 Up: PostgreSQL によるアプリケーション Previous: 検索用 GUI smst

smst の構造

smst の使い方が分かった所で、プログラムの構造を見て行くことにしましょ う( リスト5 )。本稿は Tcl/Tk の文法を説明するのが目的ではないので、必要 の無い限りプログラムの細かい点には触れません。Tcl/Tk の詳細については、 参考文献4 などを御覧下さい。

1 行目は pgtksh のパスを指定しています。pgtksh が違う場所にある場合は、 ここを書き換えて下さい。また、パスが非常に長い場合、この方法では起動で きない場合がありますが、その時は

% pgtksh -f smst

で起動できます。

プログラムの前半は proc キーワードではじまる procedure (サブルーチン) の宣言部です。

make_widgets (6〜45行目)

make_widgetsは、検索用の画面を作ります。make_widgets では、主な widget (GUI 部品)として、キーワード入力用 entry widget(15行目)、日付入 力用 entry widget 2個(20行目と22行目)、検索開始/終了用 button widget(26, 27 行目) 、検索結果表示用の listbox widget(32行目)を作って います。入力されたキーワードは大域変数の "Key"、日付は "Sdate", "Edate" に自動的に設定されます。また、リストボックスに表示された検索結 果をダブルクリックすることによりメール本体を表示する "show" procedure が起動されますが、これは 35 行目の bind コマンドで設定されます。

cleanup (48〜52行目)

終了ボタンが押されると、終了処理を行います。

start_select (55〜89 行目)

「検索開始」ボタンが押されると SQL 文を生成し、結果をリストボックスに 表示します。SQL 文を生成する処理は 58〜65 行目で行っています。 たとえばキーワードに「検索」を指定すると、生成される SQL 文は

	select b.subject,a.fname,b.date,a.count
	from words a, header b where
	a.word = '検索' and a.fname = b.fname
	order by a.count desc,b.date

となります。67 行目で SQL 文を表示していますので、色々な検索キーに対し てどのような SQL 文が生成されるか確認して下さい。

生成された SQL 文は、69 行目の pg_exec コマンドにより実行されます。も し該当データが見つかれば76 行目の pg_result -numTuples コマンドにより 件数を確認した後、81 行目の pg_result -getTuples コマンドにより 1 件ず つデータを取り出します。

取り出したデータは サブジェクト、ファイル名... などがリストになってい ますので、82 行目でサブジェクトのみ取り出した後 84 行目でリストボック スに追加されます。

検索結果を表示する際、表示されたデータの fname カラムは大域リスト変数 の "SeqList" に格納されます。これは後述の show procedure が参照します。

show (92〜122 行目)

検索結果リストでダブルクリックがあると、show が呼び出されます。ダブル クリックされた行番号は、リストボックス widget の "curselection" コマン ドで取得できます(116行目)。これをキーにして start_select が作成した SeqList を検索すれば、表示すべきファイル名が分かるわけです。

メインプログラム (129 行目〜)

proc の内側に書かれていない部分は、メインプログラムとみなされ、直ちに 実行されます。メインプログラムの処理は以下です。

  1. 使用する漢字コードを EUC にする (129〜131 行目)
  2. 引数の解析 (139〜161 行目)
  3. PostgreSQL データベースサーバへの接続 (163〜172 行目) item 初期画面の作成 (174 行目)


Tatsuo Ishii
1997年09月19日(金) 15時41分42秒 JST