パソコンカレッジ スタッフのひとりごと

パソコンスクールのスタッフが、
初心者から上級者まで役立つ情報をお伝えします。

Visual BasicとSQLServerの連携-その1

2011-03-15 09:00:10 | Visual Basic
東北地方太平洋沖地震におきまして、被災された皆様方に心よりお見舞い申し上げます。一日も早い復興をお祈り申し上げます。

今日は、データベースアプリケーションを取り上げます。
Visual Basicを使って、SQLServerのデータをコントロールに表示する方法をご紹介します。

SQLServerは、Microsoft社が提供しているリレーショナルデータベース管理システム(Relational DataBase Management System : RDBMS)です。
高価な製品ですが、無償で入手できるExpress Edition もあります。
荒っぽく言えば、Accessの高レベル版という感じでしょうか。

なお、SQLServerには、既に「MainSub」という名前のデータベースが作成されているものとします。
そして、そのデータベースには、以下の3つのテーブルが用意されているものとします。

T受注サブ
T商品マスタ
T担当者マスタ



それぞれのテーブルには、サンプルデータが既に格納されています。

T受注サブ

ちなみに全てのフィールドは、int型です。

T商品マスタ

左から順番に、int型、nchar型(10文字)、money型です。

T担当者マスタ

左から順番に、int型、nchar型(10文字)です。


今回は、この3つのテーブルを関連付けたビュー(クエリ)を取得して、フォームに表示してみます。

以下のようなビュー(クエリ)とします。




このようなビュー(クエリ)をサーバーサイドに作ることもできますが、今回は、あえてその作業もVisual Basicでやってみます。


VisualStudioを起動します。(今回は、Visual studio2008を使用しています)
「ファイル」→「新しいプロジェクト」とクリックし、任意の名前でプロジェクトを作ります。

フォームが表示されたら、ボタンとデータグリッドビューを図のように配置します。

名前は、それぞれ初期値のままで使用しています。(Form1 と Button1 と DataGridView1)
ボタンのTextプロパティは、「取得」としました。




ボタンをダブルクリックして、コード画面に切り替えます。

以下のようにコードを記述します。

冒頭のImports 文を忘れないようにしてください。
この宣言がないと、以下の用に記述してもエラーが出てきます。


Imports System.Data.SqlClient

Public Class Form1

  Private ds As New DataSet

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim Cn As New SqlConnection
    Dim Cmd As New SqlCommand
    Dim strSQL As String = "SELECT T受注サブ.サブID, T受注サブ.商品ID, T商品マスタ.商品名, T商品マスタ.単価, T受注サブ.数量,
T商品マスタ.単価 * T受注サブ.数量 AS 金額, T受注サブ.担当者ID, T担当者マスタ.担当者名 FROM T受注サブ INNER JOIN T商品マスタ ON
T受注サブ.商品ID = T商品マスタ.商品ID INNER JOIN T担当者マスタ ON T受注サブ.担当者ID = T担当者マスタ.担当者ID"

    Cn.ConnectionString = "Data Source=DAI;Initial Catalog=MainSub;User ID=rm;Password=xxxx"
    Dim da As New SqlDataAdapter(strSQL, Cn)
    Try
      da.Fill(ds, "Q受注サブ")
      With DataGridView1
        .DataSource = ds.Tables("Q受注サブ")
        .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
        .Columns("単価").DefaultCellStyle.Format = "#,##0"
        .Columns("単価").DefaultCellStyle.Alignment = _
                  DataGridViewContentAlignment.MiddleRight
        .Columns("金額").DefaultCellStyle.Format = "#,##0"
        .Columns("金額").DefaultCellStyle.Alignment = _
                  DataGridViewContentAlignment.MiddleRight
      End With
      Button1.Enabled = False
    Catch ex As Exception
      MessageBox.Show(ex.ToString)
    Finally
      If Not Cmd Is Nothing Then Cmd = Nothing
      If Not Cn Is Nothing Then Cn = Nothing
    End Try
  End Sub

なお、画面の都合で自動的に改行されている個所がありますが、実際は改行されていません。




SQLServerのデータベースに接続するためには、SqlConnection と SqlCommand が必要です。
この2つのインスタンス(実体)をまず作ります。
そして、先程ご覧いただいたクエリを生成するSQL文を変数strSQLに代入します。
SqlConnectionのインスタンスであるCnのConnectionStringプロパティには、SQLServerへの接続文字列を代入します。

そして、SqlDataAdapterのインスタンスdaを生成します。
その際、SQL文とCn を引数に設定するのを忘れないでください。

あとは、daのFillメソッドで、DataSet の中に"Q受注サブ" というデータテーブルを作成します。
DataSet とは、ざっくばらんに言うと、メモリに展開されたデータベース領域です。

そして、DataGridView1の DataSource プロパティに、"Q受注サブ"データテーブルを指定します。

これで、DataGridView1にクエリの結果が表示されます。
あとは、書式設定が続いているだけです。

Try~Catch構文でエラーをトラップし、Finallyブロックで、インスタンスの後始末をします。


それでは、実行してみましょう。





すると、ちゃんとデータが表示されました。





今回は、表示するだけでしたが、今後は、データの更新についても取り上げます。



だい

コメント (10)   この記事についてブログを書く
« 今週のおすすめ記事 | トップ | 時刻の計算 表示形式の余計... »
最新の画像もっと見る

10 コメント

コメント日が  古い順  |   新しい順
凄いね。 (天の人(流雲))
2011-03-15 16:29:27
今日は。

「高価な製品ですが、無償で入手できるExpress Edition もあります。」
↑そうなのですか?

データーベース作るのは大変そうです。
Unknown (ケンケン)
2011-03-15 17:27:57
本日の記事は少し難しいですね。
゜(>ヘ<)゜ ゜
ついていけない・・(ノ_・、)シクシク
天の人(流雲)さんへ (だい)
2011-03-16 12:05:33
コメントありがとうございます。
当方も試行錯誤の連続です。
奥が深いです。
ケンケンさんへ (だい)
2011-03-16 12:07:10
すみません。僕も自分自身の勉強のつもりで、書いてみました。
いろいろなテーマを取り上げますので、これからもいらしてくださいね。
Unknown (ケンケン)
2011-03-16 14:10:48
>>これからもいらしてくださいね。
"\( ̄^ ̄)゛ハイ!!

Unknown (置手紙ユーザー)
2011-03-16 14:28:53
置手紙、回復してます。
状況が変わる場合がありますが、置手紙は外さないで下さい。
復帰に気が付くの遅くなるだけですから、余計な事はしないに限ります。
置手紙ユーザーさんへ (だい)
2011-03-16 16:25:04
ご親切にありがとうございます。
なんだかすごくなってきましたね~♪ (てくてく君)
2011-03-16 20:46:58
こういった事も教えてみえるんですか?

うらやましいなぁ
てくてく君さんへ (だい)
2011-03-17 14:24:33
本当にパソコンの世界は奥が深いですね。
毎日が悪戦苦闘です。
一歩一歩前に進むだけです。がんばります。
Access2013から.adpが使えず困っています。 (19ra)
2014-01-12 11:56:46
SQL ServerとAccessで会社のデータベースを作ってました。
ところがAccess2013から.adpが使えないとのこと!
こりゃ困る。

代替案をいろいろ模索しています。
いまさらODBC接続もどうかな?
今はVBとSQLを接続してと思っているのですが、VBは未経験。頭を悩ませています。
記事参考にさせていただいて、勉強してみます。

コメントを投稿

Visual Basic」カテゴリの最新記事