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

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

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

■DataGridViewコントロールを配置する

 データソースが指定できたら、次はデータを表示したり変更したりするために使うコントロールを配置する。コントロールを配置して、そのデータソースを指定するという従来の手順でもできるが、ここでも、従来とは逆にデータソースの方から攻めていこう。

 メニューから[データ]−[データソースの表示]を選ぶと、図6のようにデータソースの内容がツリー構造で表示される。今度は、その中にあるテーブルをフォーム上にドラッグ&ドロップしよう。


図6 テーブルをフォーム上にドラッグ&ドロップする
メニューから[データ]−[データソースの表示]を選んでデータソースの一覧を表示し、テーブルをフォーム上にドラッグ&ドロップする。なんと、これだけで……どうなるかは図7のお楽しみ。

 特に何も指定しなければ、テーブルをフォームにドラッグ&ドロップするだけでDataGridViewコントロールが自動的に配置され、そのDataSourceプロパティが自動的に設定される。またウィンドウ上部にはBindingNavigatorコントロールも作成される。図7の下の方を見れば分かるように、データベースを操作するための各種のコンポーネント*も自動的に追加される。

* ユーザー・インターフェイスを持たない部品は通常「コンポーネント」と呼ばれる。コンポーネントをフォームに配置した場合には、コンポーネントはフォーム・デザイナ下部に並ぶ。BindingNavigatorコントロールは少し特別で、フォーム上に配置されるとともに、フォーム・デザイナ下部にもアイコンが表示される。


図7 DataGridViewコントロールが自動的に配置された
テーブルをフォーム上にドラッグ&ドロップするだけでDataGridViewコントロールが配置される。フォームの下には以下のようなコンポーネントも自動的に追加されている。
  UserDataSet:DataSetコンポーネント(=データセット)。データベースの内容をメモリ上に保持するために使われる。
  PointBindingSource:BindingSourceコンポーネント。フォーム上のコントロールとデータソースを結び付けるために使われる。
  PointTableAdapter:TableAdapterコンポーネント。データセットとテーブル間でのデータのやりとりに使われる。
  PointBindingNavigator:BindingNavigatorコントロール。レコードの移動や追加、削除などの操作ができるユーザー・インターフェイスを提供する。

 それぞれのコントロールがどのような働きをするのかを一度に理解するのは難しいので、ここでは名前と簡単な説明だけを示しておいた。データベースやレコードを操作するメソッドを見れば、おのずとそれらの働きが分かってくるので、必要に応じて少しずつ身に付けていくといいだろう。

 取りあえず、いまのところはユーザーに最も近いBindingNavigatorコントロールにまず注目しよう。フォームの上の方にツールバーとして表示されているので、ひと目見ただけで働きが分かると思うが、データベースの基本的な操作に必要なユーザー・インターフェイスが提供されている。従って、これですでにプログラムは出来上がっている。[デバッグ開始]ボタンをクリックし、プログラムを実行すると、最初に見た図2のようなウィンドウが表示され、データベースの内容を表示したり、レコードの追加や削除をしたりできる。

 なお、ドラッグ&ドロップでプロジェクトに追加したデータベースは、プロジェクトのフォルダにコピーされるが、[デバッグの開始]ボタンをクリックしてプログラムを実行したときには、プロジェクトのDebugフォルダにコピーされたデータベースが使われる。項目の内容を変更したり、レコードを追加したりしたはずなのに、元のデータベースが更新されていないと悩む人も多いと思われる。気を付けよう(実は、私もちょっと悩んだ)。

■自動的に追加されたコードを見ておく

 さて、これでデータベースの基本的な操作をするプログラムができたわけだが、これまでコードは1行も書いていない。しかし、自動的に追加されたコードがいくつかあるので、それらを見ながら少しずつ理解を深めていこう。

 コード・ウィンドウを表示すると、以下のようなコードが追加されていることが分かる。ただし、分かりやすいようにプロシージャの順序は入れ替えてある。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  'TODO: このコード行はデータを 'UserDataSet.Point' テーブルに読み込みます。必要に応じて移動、または削除をしてください。
  Me.PointTableAdapter.Fill(Me.UserDataSet.Point)

End Sub

Private Sub PointBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PointBindingNavigatorSaveItem.Click
  Me.Validate()
  Me.PointBindingSource.EndEdit()
  Me.PointTableAdapter.Update(Me.UserDataSet.Point)

End Sub
自動的に追加されたコード
ここで動作内容を確認しておこう。
  フォームが読み込まれたときには、データセット(UserDataSet)内のテーブル(Point)に、データベースの内容を読み込む。
  ツールバーの[データの保存]ボタンをクリックしたときには、まずValidateメソッドにより、ValidatingイベントとValidatedイベントを発生させ、入力フォーカスを失ったコントロールの値をチェックする(ここでは特に何もしていない)。
  続いて、EndEditメソッドにより、保留中の変更をデータソースに適用する。
  最後に、Updateメソッドにより、データセットの内容をデータベースに書き出す。

 この動作を分かりやすく、かつ正確に図で表すのは難しいが、イメージとしては図8のような感じになるだろう。DataSetコンポーネント(=データセット)はデータベースの内容をメモリ上に展開しており、BindingSourceコンポーネントはDateSetコンポーネントとフォーム上のコントロールを連結するのに使われる。


図8 データベースを利用するためのコントロール/コンポーネントの働き
実線の矢印はデータの流れを表し、破線の矢印は制御を表す。
  データベースからデータを読み出すためにはTableAdapterコンポーネントのFillメソッドを使う。
  フォーム上で編集した保留中のデータは、BindingSourceコンポーネントのEndEditメソッドを実行すると、DataSetコンポーネントに書き出される。
  TableAdapterコンポーネントのUpdateメソッドを実行して初めて、DataSetコンポーネントに書き出された変更がデータベースにも書き出される。


 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