|
今回は「住所録」のデータ一覧表示に「並べ替え(ソート)」及び「絞り込み」の機能を追加します。並べ替えは既に説明したように SELECT文に ORDER BY句の指定を行います。SQLを使わず並べ替えをするには、データベースにインデックスキーを追加したり、一旦メモリ等に入れた全データに対して並べ替えを行うプログラムを実行する、というような事になります。前者のインデックスキーは同じ値が使えない等の制限があったり扱いにくい場合もあったりで、しかも全フィールドを対象とすると非常に厳しくなってしまいます。後者の場合は、データ量がたくさんあると重く遅くなってしまう事、並べ替えのアルゴリズムを自分で考えないといけない事(クイックソート等)、メモリに入れる場合にはメモリを確保・解放する必要がある事、等があります。そういう事をせずとも、SQLでは、SELECT文に 「ORDER BY PNAME」と追加するだけでフィールド「PNAME」での並べ替えが出来てしまうので非常に簡単です。逆順の場合は「ORDER BY PNAME DESC」とするだけです。
絞り込みは既に説明したようにSELECT文に WHERE節を指定するだけです。数値での範囲指定であれば「WHERE N>10」「WHERE N<100」「WHERE (N>10) AND (N<100)」のようにするだけですが文字列データの場合には範囲指定というよりも、あるキーワードを含むものだけを表示、という事が一般的でしょう。そういった場合には「WHERE MOJI LIKE '%キーワード%'」のように指定します。前の「%」はキーワードの前に任意の文字がある事、後の「%」はキーワードの後に任意の文字がある事、を示しています。
前回は WHERE節でデータ一覧表示の各頁の表示制限を行っていましたが、並べ替えを行う場合には、これだとうまく行きませんし、文字列データの場合には、同じ内容であったり、何も入力していない、という事がありますから、その内容によってページ管理をするには無理があります。ですのでここでは、レコード番号で管理するようにしています。先頭のレコード番号を「1」として、次頁以降では、「IBQuery1.First」を行った後に「IBQuery1.MoveBy(〜)」をして頁の頭出しをするようにしています。そのためデータがかなり大量になると遅くなる事が予想されますが、出来なくて機能が無いよりも、多少遅くても機能があった方が便利なので、やむを得ないと判断します。
プロジェクト「d010」の準備を行います。「C:\DelphiProgram\jww」フォルダの中に「d010」というフォルダを作成し、前回の「d009」からファイルを全部コピーしてきます。Delphi6を起動します。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
タイトル | d010−住所録3 |
[ディレクトリ/条件]頁
パス及びディレクトリ | C:\DelphiProgram\db\d010 |
メニュー「ファイル」→「プロジェクトに名前を付けて保存」
「C:\DelphiProgram\db\d010」の中に「d010.dpr」として保存
メニュー「プロジェクト」→「d010を再構築」を実行し、エクスプローラ等で不要になった「C:\DelphiProgram\db\d010」内にある「d009.〜」のファイルを消しておきます。
◆
メニュー「表示」→「プロジェクトマネージャ」
を実行し、コード画面の左側にドッキングさせておきます。
Form5の画面レイアウトを下記のようにしました。
(1)並べ替え(ソート)
並び順の横に設置した ComboBox1 の Itemsに
登録番号↓
登録番号↑
名前↓
名前↑
名前(かな)↓
名前(かな)↑
郵便番号↓
郵便番号↑
住所↓
住所↑
電話番号↓
電話番号↑
FAX番号↓
FAX番号↑
携帯番号↓
携帯番号↑
備考↓
備考↑ |
という内容を入れておき、これを選択すると、そのフィールド項目の内容の順番で並べ替えを行う事とします。ComboBox1 の OnSelectイベントで、それぞれの場合の ORDER BY句への設定内容を指示し、表示させるものとします。
(2)絞り込み
「絞り込み」の右横に、キーワードを入力するための Edit1、及び、更に右横に、どのフィールド項目に対してのものなのかを指示するための ComboBox2 を配置しています。ComboBox2 の Items の内容は
(無し)
名前
名前(かな)
郵便番号1
住所1
住所2
電話番号
FAX番号
携帯番号
備考 |
としています。キーワードを入力し、この ComboBox2 の選択を行うと、絞り込み指定を行うようにします。Edit1 をダブルクリックしても行えるようにしています。逆にいうと、Edit1にキーワードを入力しただけでは、絞り込み指定は行いませんし画面内容も変化しません。キーワードを入力したあとに、ComboBox2 を選択するか、Edit1をダブルクリックする必要があります。未入力状態の場合は絞り込みは行いません。
プログラムの内容についてはソースプログラムを参照して下さい。
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
シェアウェア
Script!World
データベース
A B C D
E F G H
I J K L
M N O P
Q R S T
U V W X
Y Z
|