連載:VB 6ユーザーのための
これならマスターできるVB 2005超入門

第5回 データベースはじめの一歩

羽山 博
2006/12/27
Page1 Page2 Page3 Page4

サンプル・プログラム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プロパティに読み込まれるだけなので、画面には表示されない。


図11 Tagプロパティにレコードの項目を連結する
  会員コードのテキストボックス(CodeTextBox)のDataBindingsプロパティを開き、Tagプロパティの右にある[V]をクリックする。Tagプロパティそのものの設定ではなく、DataBindingsプロパティの下にあるTagプロパティの設定であることに注意。
  Pointテーブルのcodeという項目を選択する。同様にして、DataBindingsの下のTextプロパティを「(なし)」にする。氏名や所有ポイントのテキストボックスについても同様に、Tagプロパティとレコードの項目を連結させる。

 ここまでできれば、あとは簡単。[検索]ボタンのClickイベント・ハンドラを書くだけだ。

 実行すべきことは、まず、CodeTextBoxに入力されたテキスト(Textプロパティの値)を基にデータセットのレコードを検索し、その位置を求めること。続いて、その位置を現在の位置とすること。これだけだ。現在のレコードの位置が変更できれば、各テキストボックスのTagプロパティに入っている項目の内容をTextプロパティに代入し、フォーム上に表示すればよい。

Private Sub FindRecord(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFind.Click
  Dim iRec As Integer
  iRec = Me.PointBindingSource.Find("code", CodeTextBox.Text)
  If iRec < 0 Then
    MessageBox.Show("コードが見つかりません")
    CodeTextBox.Focus()
  Else
    Me.PointBindingSource.Position = iRec

   
    CodeTextBox.Text = CodeTextBox.Tag
    NameTextBox.Text = NameTextBox.Tag
    PointTextBox.Text = PointTextBox.Tag

  End If
End Sub
[検索]ボタンのClickイベント・ハンドラ
入力された会員コードを基にレコードを検索し、氏名と所有ポイントを表示する。
  BindingSourceコンポーネントのFindメソッドを使って、レコードを検索する。最初のパラメータには項目名を指定し、2番目のパラメータには検索値を指定する。検索が成功すると、レコード番号(先頭は0)が返される。検索値が見つからない場合は-1が返されるので、その次のIf文でエラー処理をしている。
  BindingSourceコンポーネントのPositionプロパティにレコードの位置を代入し、現在のレコードの位置を変更する。
  各テキストボックスのTagプロパティに項目の内容が入っているので、Textプロパティに代入し、画面に表示する。

結び − まだまだ先は長いのだけれど

 今回はデータベースのはじめの一歩と半分ぐらいまでしか踏み出さなかったが、途方に暮れていたVB 6プログラマーにはずいぶんと見通しがよくなったのではないかと思う。

 今回のサンプル・プログラムで扱ったのは、「非接続型」と呼ばれるデータ・アクセスの方法で、必要に応じて自動的にデータベースに接続するというもの。「非接続」という名前には違和感があるかもしれないが、まったく接続していないというわけではない(接続しなければデータの読み書きができないので当然のことなのだが)。

 非接続型に対して、データベースを取り扱っている間、明示的に接続を維持しておくのが「接続型」だ。しかし、そのプログラムやコードについては触れなかった。それ以前に、データベースを更新するための方法についても触れなかったし(Updateメソッドを実行すればいいだけなのだが)、コントロールを使わず、コードだけでデータベースを操作する方法についても触れていない。

 読み出し専用ならデータセット(DataSetコントロール)を使うよりはDataReaderオブジェクトを使った方が軽量なのだが、そのDataReaderオブジェクトについても触れていない。また、SQL Serverなど、ほかの種類のデータベースを利用する方法についても説明していない(さほど違いはないのだが)。

 ……とまあ、書き出すとキリがないのだが、さらにこの先に進みたい向きには、ADO.NET基礎講座が参考になると思う。ぜひ、そちらも参照してほしい。End of Article


 INDEX
  連載:VB 6ユーザーのためのこれならマスターできるVB 2005超入門
  第5回 データベースはじめの一歩
    1.ユーザビリティ小考 〜 前回の反省から
    2.サンプル・プログラム5 − コードなしのデータベース検索プログラム
    3.DataGridViewコントロールを配置する
  4.サンプル・プログラム6 − 検索のためのコードを記述する
 
インデックス・ページヘ  「これならマスターできるVB 2005超入門」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH