連載:VB 6ユーザーのための
|
|
|
サンプル・プログラム6 − 検索のためのコードを記述する
はじめの一歩はひとまず踏み出せたので、ここで終わりにしてもいいのだが、せっかくなのであと半歩だけ踏み出してみたい。
図8をよーく眺めてみると、BindingNavigatorコントロールを使ったレコードの移動や追加、削除などの操作は、BindingSourceコンポーネントに対して実行されていることが分かる。
ということは、BindingSourceコントロールのメソッドを直接呼び出せば、BindingNavigatorコントロールのボタンを使わずに操作ができそうである。そんなわけで、自分でボタンを配置して、データベースの検索を実行するプログラムを作ってみよう。
サンプル・プログラム5では1画面に複数のレコードを表示したが、ここでは1画面に1レコードを表示する。つまり図9のような問い合わせ画面を作る。
図9 データベースの問い合わせ画面 |
[code:]の隣にあるテキストボックスに会員コードを入力し、[検索]ボタンをクリックすると会員名と所有ポイントが表示される。会員が見つからない場合にはエラー・メッセージを表示することとする。 |
プログラムを新規作成し、データソースを指定するところまでの手順はサンプル・プログラム5とまったく同じ。違うのは、DataGridViewコントロールを使わず、ラベルとテキストボックスを使ってレコードの項目を表示するという点と、BindingNavigatorコントロールを使わないという点だ。
テキストボックスをデータソースと連結するには、テーブルではなく、個々の項目をフォーム上にドラッグすればよい(図10)。
図10 テーブルの項目をフォームにドラッグする |
メニューから[データ]−[データソースの表示]を選択し、データソースの一覧を表示する。「code」という項目をフォーム上にドラッグ&ドロップすると、ラベルとテキストボックスが自動的に作られる。テキストボックスはデータソースのcode項目と連結されている。 |
idを除くほかの項目についても、同じようにしてフォーム上に配置した後、BindingNavigatorコントロールをクリックし、[Delete]キーを押してこれを削除しておこう。また、Buttonコントロールを配置しNameプロパティを「btnFind」としておく。Textプロパティには「検索」という文字列を指定しておけばいいだろう。画面は省略するが、図9の実行例や図11を参考にしてフォームをデザインすればよい。
なお、テーブル(この場合はPointという名前)をクリックし、その右側に表示される[V]ボタンをクリックして[詳細]を選択しておけば、テーブルをフォーム上にドラッグ&ドロップしただけで、DataGridViewコントロールではなく、すべての項目に対応するラベルとテキストボックスが配置される。項目数が多い場合は、この方法が便利だろう。
ところで、このままプログラムを実行すると、いきなり先頭のレコードがテキストボックスに表示されてしまう。だが、このプログラムは検索のために使うので、最初はすべてのテキストボックスが空白であった方がよい。Fillメソッドをフォームのロード時ではなく、検索時に実行するようにしてもいいのだが、検索のたびにFillメソッドが実行されてしまい、効率が悪い(もっとも、頻繁にデータベースの内容が変更され、情報がすぐに古くなる可能性のある場合は検索前にFillメソッドを実行した方がよいが)。
そこで、ちょっとしたトリックを使おう。データベースの項目をテキストボックスのTextプロパティに連結するのではなく、Tagプロパティに連結する(図11)。そうすれば、プログラムを実行しても、データはTagプロパティに読み込まれるだけなので、画面には表示されない。
ここまでできれば、あとは簡単。[検索]ボタンのClickイベント・ハンドラを書くだけだ。
実行すべきことは、まず、CodeTextBoxに入力されたテキスト(Textプロパティの値)を基にデータセットのレコードを検索し、その位置を求めること。続いて、その位置を現在の位置とすること。これだけだ。現在のレコードの位置が変更できれば、各テキストボックスのTagプロパティに入っている項目の内容をTextプロパティに代入し、フォーム上に表示すればよい。
| |||||||||
[検索]ボタンのClickイベント・ハンドラ | |||||||||
入力された会員コードを基にレコードを検索し、氏名と所有ポイントを表示する。
|
結び − まだまだ先は長いのだけれど
今回はデータベースのはじめの一歩と半分ぐらいまでしか踏み出さなかったが、途方に暮れていたVB 6プログラマーにはずいぶんと見通しがよくなったのではないかと思う。
今回のサンプル・プログラムで扱ったのは、「非接続型」と呼ばれるデータ・アクセスの方法で、必要に応じて自動的にデータベースに接続するというもの。「非接続」という名前には違和感があるかもしれないが、まったく接続していないというわけではない(接続しなければデータの読み書きができないので当然のことなのだが)。
非接続型に対して、データベースを取り扱っている間、明示的に接続を維持しておくのが「接続型」だ。しかし、そのプログラムやコードについては触れなかった。それ以前に、データベースを更新するための方法についても触れなかったし(Updateメソッドを実行すればいいだけなのだが)、コントロールを使わず、コードだけでデータベースを操作する方法についても触れていない。
読み出し専用ならデータセット(DataSetコントロール)を使うよりはDataReaderオブジェクトを使った方が軽量なのだが、そのDataReaderオブジェクトについても触れていない。また、SQL Serverなど、ほかの種類のデータベースを利用する方法についても説明していない(さほど違いはないのだが)。
……とまあ、書き出すとキリがないのだが、さらにこの先に進みたい向きには、ADO.NET基礎講座が参考になると思う。ぜひ、そちらも参照してほしい。
INDEX | ||
連載:VB 6ユーザーのためのこれならマスターできるVB 2005超入門 | ||
第5回 データベースはじめの一歩 | ||
1.ユーザビリティ小考 〜 前回の反省から | ||
2.サンプル・プログラム5 − コードなしのデータベース検索プログラム | ||
3.DataGridViewコントロールを配置する | ||
4.サンプル・プログラム6 − 検索のためのコードを記述する | ||
「これならマスターできるVB 2005超入門」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|
- - PR -