|
|
連載:VB 6ユーザーのための
これならマスターできるVB 2005超入門
第5回 データベースはじめの一歩
羽山 博
2006/12/27 |
 |
|
■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コンポーネントに書き出された変更がデータベースにも書き出される。 |
|
業務アプリInsider 記事ランキング
本日
月間