• 検索結果がありません。

データベースⅠ

N/A
N/A
Protected

Academic year: 2021

シェア "データベースⅠ"

Copied!
11
0
0

読み込み中.... (全文を見る)

全文

(1)

プログラムの概要

データベースプログラムを手軽に作成する方法とし てはAccess のフォーム機能を用いる事が、先ず考え られます。ウィザードも充実しており、操作を覚え れば簡単に作成する事が出来ます。其れでは、VB で データベースプログラムを作るメリットは何んでし ょうか。1つはAccess のフォーム機能に比べ、コン トロールが充実している事。より自由なデザインが 可能です。もう1つ重要な点は、「データベースソフ ト」を選ばない事です。 小規模な運用であれば、Access は十分な能力を発揮 しますが、中規模、大規模になってくると、力不足 に成る可能性が高く成ります。VB でソフトを作成し て置けば、「Access では力不足だ」と感じた時でも、 今迄作成した内容を少し変更するだけで、他のデー タベースソフトへ乗り換える事が可能です。逆に Access のフォーム機能で作成した場合は今迄の作業 の殆どを1から作り直す必要が有るでしょう。此処では、データベースプログラムを作成する上で不可 欠な、「SQL 文」を主に学びます。

データベース操作プログラムⅠ

VB 2005 ⑧ □ コントロールの利用(GroupBox、RadioButton、DataGridView) □ プロパティの値の取得と設定(Height、Width、Tag、DataSource、DataMember) □ イベントハンドラの利用(Handles、Load、Resize、Click) □ ADODB のオブジェクト(Connection、Recordset) □ ADODB のプロパティとメソッド(CursorLocation、ConnectionString、Open、Close) □ AxDataGrid の利用(データバインディング、DataSource) 今回の課題項目 □ フォームサイズ変更に伴うオブジェクトのサイズ変更(Anchor) □ データベースとの接続(ADODB.Connection、ADODB.Recordset) □ データベースとの連結(DataGrid:DataSource) □ SQL 文(SELECT 文:レコードを検索する文) 今回の重点項目 □ 様々な SQL 文を試してみる。 今回の応用項目

(2)

■ データベース(MDB ファイル)の格納場所 ■

Windows7 等の 64bit 環境では、bin フォルダ内の Debug フォルダに格納した MDB ファイルにアクセ スると、Microsoft.Jet.OLEDB.4.0 プロバイダを認識する事が出来ない。 其処で、メニューの「ビルド」から「構成マネージャー」を表示させ、アクティブソリューションプラ ットフォームを「Any CPU」から「x86」に変更する。 アクティブソリューションプラットフォームの選択肢に「x86」が無ければ、其の下のプルダウンリス トの「新規作成」で「x86」を作成する。 ※ 猶、下図の様に、「ビルド」メニューの中に「構成マネージャー」が表示されて居ない場合は、メニ ューの「ツール」→「オプション」の左側にあるリストから「プロジェクトおよびソリューション」 を選び、「ビルド構成の詳細を表示」にチェックを入れる。

(3)

プラットフォームを「x86」に変更した場合、bin フォルダの中に「x86」と謂う名前のフォルダが自動 作成され、其の中のデータベース(mdb ファイル)が有効に成る。

接続文字列は、従来の儘、"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=データベース名"で良く、 変更する必要は無い。

猶、Application.StartupPath は、此の「x86」フォルダに成る。

参考:C:¥Windows¥SysWOW64 フォルダの中に、msjet40.dll と msjetoledb40.dll は存在する。

参考

データを簡単に表示する為に、従来は、ADODB.Recordset とバインディングの出来る Microsoft DataGrid Control 6.0 を使用して居たが、64bit 環境では、Visual Basic 6.0 をインストールして居 ない環境では、C:¥Windows¥SysWOW64 に OCX ファイルを格納し、ツールボックスのアイテム 選択で、参照しても、正しくインストールされない(一部機能の使用不可)。 従って、此処では、実際にデータの表示に頻繁に使用するDataGridView コントロールを使用して 居る。併し、此のコントロールは、ADODB.Recordset とデータバインディングする事は出来ない ので、DataSet オブジェクトを介して居る。 其の為、処理が少々繁雑に成って居るが、細かい事に気を奪われず、如何に仕て、データベースと 接続し、データの遣り取りを行うかと謂うプリミティブな処理に留意して欲しい。

(4)

■ ADODB の参照設定 ■

Visual Studio では、.NET 以降、ADO.NET が追加され、非接続型処理が可能と成ったが、従来の接続 型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー タベース操作の基本と成る物で有るので、此処では、ADODB を扱う事にする。

Visual Studio 2005 でも、従来同様、ADODB を使用するには、プログラムをコンパイル、又は、ビル トする際に必要と成る参照設定を行う必要が有る。

Visual Studio 2005 で ADODB の参照設定を行うには、先ず、メニューバーの『プロジェクト』で『参 照の追加』をクリックして、ダイアログを開く

ダイアログの『COM』タブで『Microsoft ActiveX Data Object x.x Library』と謂う名前のコンポーネ ントを選択して、『OK』ボタンをクリックすれば、参照の追加が完了する(x.x は、バージョンを示す)。

(5)

■ オブジェクト・プロパティ一覧 ■ コントロールの種類 プロパティ プロパティの設定値 フォーム Name bookshelf Text 本棚 Font MS明朝、標準、9 StartPosition CenterScreen グループボックス Name grpTable Text 表示テーブル ラジオボタン1 Name radBook Text 本 Checked True Tag 0 ラジオボタン2 Name radCategory Text カテゴリ Tag 1 ラジオボタン3 Name radWriter Text 著者 Tag 2

DataGridView Name dgvBookshelf

Anchor Top, Bottom, Left, Right

DataGridView ラジオボタン1 グループボックス ラジオボタン2 ラジオボタン3 DataGridView(データグリッドビュー) データを表形式で表示するコントロール。DataGridView コントロールに表示されるデータは、 通常データソースからDataGridViewRow オブジェクトに格納される。簡易的に表示するには、 DataSet オブジェクトとバインド(連結)する事も出来る。

(6)

■ プログラムリスト ■

Public Class bookshelf

' フォームレベルでグローバルな変数の宣言 Private Cn As ADODB.Connection Private Rs As ADODB.Recordset Private Ds As DataSet Private Da As OleDb.OleDbDataAdapter ' フォームが読み込まれた時の処理

Private Sub bookshelf_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load ' コネクションとレコードセットのインスタンス生成 Cn = New ADODB.Connection Rs = New ADODB.Recordset ' コネクションの確立(データベースへの接続) Cn.CursorLocation = ADODB.CursorLocationEnum.adUseClient

Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb;" Cn.Open()

' 選択クエリに依るレコードセットの取得

Rs.Open("SELECT 本.*,著者.著者名 FROM 本,著者 WHERE 本.著者 ID=著者.ID;", Cn) ' データグリッドへの連結 Da = New OleDb.OleDbDataAdapter() Ds = New DataSet() Da.Fill(Ds, Rs, "book") dgvBookshelf.DataSource = Ds dgvBookshelf.DataMember = "book" ' ラジオボタンの設定 radBook.Checked = True

AddHandler radBook.Click, AddressOf radBook_Click AddHandler radCategory.Click, AddressOf radBook_Click AddHandler radWriter.Click, AddressOf radBook_Click End Sub

' フォームのサイズが変更された時の処理

Private Sub bookshelf_Resize(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Me.Resize

' サイズの最小限度

If Me.Width < 300 Then Me.Width = 300 If Me.Height < 300 Then Me.Height = 300 End Sub 注意!! データファイル data.mdb は、製作中は、当該プロジェクトの bin/x86/Debug フォルダに、亦、コ ンパイル後の実行中は、EXE ファイルと同じフォルダに、格納して置く事。 此等のオブジェクト変数は、イン スタンスを生成してからでないと 使用する事は出来ない。 オブジェクト変数のインスタンス を生成するには、New キーワード を用いて行う事が出来る。 DataGridView の Datasource プ ロパティと DataMember プロパ ティをセットする事で、DataSet の デ ー タ を バ イ ン ド す る (Recordset とは直接バインド出 来ない)。 フォームサイズを縮小する時の下 限を設定して居る。値は、作成し たフォームに応じて、適宜変更し て使用する。

(7)

' フォームが閉じられ様と仕た時の処理

Private Sub bookshelf_FormClosing( ByVal sender As Object, _

ByVal e As System.Windows.Forms.FormClosingEventArgs ) Handles Me.FormClosing ' コネクションとレコードセットのインスタンス開放 Rs = Nothing Cn = Nothing End Sub ' ラジオボタン(本・カテゴリ・著者)がクリックされた時の処理

Private Sub radBook_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim R As RadioButton = DirectCast(sender, RadioButton)

Call DispData(Integer.Parse(R.Tag.ToString())) End Sub

' データを表示するジェネラルプロシージャ Private Sub DispData(ByVal N As Integer) Dim SQL As String = ""

Dim Tbl As String = ""

Select Case N Case 0

SQL = "SELECT 本.*,著者.著者名 FROM 本,著者 WHERE 本.著者 ID=著者.ID;" Tbl = "book" Case 1 SQL = "SELECT * FROM カテゴリ;" Tbl = "category" Case 2 SQL = "SELECT * FROM 著者;" Tbl = "writer" End Select ' レコードセットのクローズ If Rs.State = 1 Then Rs.Close() End If ' adStateClosed = 0 ' オブジェクトが閉じて居る事を示す。 ' adStateOpen = 1 ' オブジェクトが開いて居る事を示す。 ' レコードセットの更新 Rs.Open(SQL, Cn) ' データグリッドへの連結 dgvBookshelf.DataSource = Nothing dgvBookshelf.DataMember = Nothing Ds.Clear() Da.Fill(Ds, Rs, Tbl) dgvBookshelf.DataSource = Ds dgvBookshelf.DataMember = Tbl End Sub End Class ※ COM オブジェクトの参照カウントのデクリメントは、System.Runtime.InteropServices.Marshal クラスに有る ReleaseComObject メソッドを使用が、必ずしも完全では無い。 複数のイベントハンドラを設定し たイベントプロシージャで、Tag をオブジェクトの判別に利用。 各ラジオボタンに応じて、選択ク エリ(SQL 文)を生成する。 開かれて居るレコードセットに対 してOpen メソッドを実行すると エラーが発生するので、一旦、レ コードセットをClose メソッドを 用いて閉じる。 引数に選択クエリと有効なコネク ションを指定してレコードセット を開くと、指定した選択クエリに 応じたデータがレコードセットに 格納される。 インスタンスをメモリから開放す る場合、Dispose メソッドが無い 時は、Nothing を代入する。

(8)

ACCESS で SQL 文を使用する 1.『data.mdb』を開き、『オブジェクト』内の『クエリ』をクリックすると、以下の様な画面に成るの で、『デザインビューでクエリを作成する』をダブルクリックする。 2.『テーブルの表示』ダイアログボックスが表示されるので、『本』を追加後、『閉じる』ボタンをク リックして、ダイアログボックスを閉じる。 ACCESS では或る条件の元に、視覚的に、データを検索したり、追加したり、変更したり、削除 する機能『クエリ機能』が存在する。非常に便利な機能だが、命令文而巳で、データを操作出来る 言語が存在する。其れがSQL で有る。ACCESS 而巳使用するので有れば、此の様な、小難しく、 古臭い言語を覚える必要は無い。何故なら、SQL の進化系が ACCESS の様な視覚的にデータを操 作する機能だからで有る。併し、未だに全世界で使われ続けて居る理由が有る。ORACLE や SQLServer 等と謂う名前を聞いた事が有ると思う。共にデータベースソフトだが、然うした類の 数多くはSQL を採用して居る。即ち、SQL を覚えれば、ACCESS 以外のデータベースソフトのデ ータを操作する事が出来ると謂う事で有る。亦、ACCESS も例外で無く SQL を直接入力し、実行 出来る機能が有る。此処では其の機能の使用法を説明する。

(9)

3.フィールドに『本』テーブルの『*』をドラッグドロップ後、メニューバーの『表示』をクリック して、ドロップダウンメニューから『SQL ビュー(Q) 』を選択する。 4.上記の操作で、『デザインビュー』で作成した選択クエリが、SQL 文と成り『SQL ビュー』に表示 される。ツールバー上の (実行ボタン)をクリックすると、指定したクエリーの結果が『デ ータシートビュー』に表示される。 此れでSQL を勉強する準備が完了した。先程の操作からも解る様に、『デザインビュー』で操作した内 容と『SQL ビュー』の内容は、大方連動して居る。今迄に ACCESS のクエリ機能で作成した SQL が 何の様に記述されて居るのか確認するのも効果的な勉強と謂えるが、今回は1 文宛、直接入力する事で 何の様なSQL が有るかと謂う事を学ぶ事にする。以下に記述した SQL を実際に入力し、結果を確認し て欲しい。

(10)

SQL(Structured Query Language:構造化照会言語)とは 直訳すると難しく成るが、プログラミング知識の無いオペレーターが簡単にデータを操作出来る様に編 み出された言語で有る。国際規格(ISO)にも定められて居る為、ORACLE でも SQLServer でも基本 は同じで有る。4つの構文を覚える事で、様々な、データーベースのデータを扱う事が可能に成る。 SQL の4大構文 下記の構文をSQL の4大構文と謂う。 SELECT 文 :データを探す文 DELETE 文 :データを削除する文 INSERT 文 :データを追加する文 UPDATE 文 :データの内容を変更する文 SELECT 文の解説 データを探す構文 SELECTΔフィールド名ΔFROMΔテーブル名ΔWHEREΔ検索条件 例文1:SELECTΔ*ΔfromΔ本; 解 説:『*』(アスタリスク)は、フィールド総てを表す。 本と謂う名前のテーブルに在る全件数のレコードを検索し、総てのフィールドのデータを取得する 例文2:SELECTΔタイトル,価格ΔfromΔ本; 解 説:フィールドを複数指定する場合は『タイトル,価格』の様に『,』(コンマ)で区切る。 本と謂う名前のテーブルに在る全件数のレコードを検索し、タイトル、価格フィールドのデータを取得する 例文3:SELECTΔ*ΔfromΔ本ΔWHEREΔ価格=2500; 解 説:『*』(アスタリスク)は、フィールド総てを表す。 本と謂う名前のテーブルに在る価格フィールドが2500 のレコードを検索し、総てのフィールドのデータを取得する 例文4:SELECTΔ*ΔfromΔ本ΔWHEREΔタイトルΔLIKEΔ’%VB%’; 解 説:SQL 文内で文字列を指定する場合は『’』(シングルクオーテージョン)で区切る。 本と謂う名前のテーブルに在るタイトルフィールドに’VB’という文字列が含まれるレコードを検索し、総てのフィールド のデータを取得する

例文5:SELECTΔ本.タイトル,本.価格,著者.著者名ΔfromΔ本,著者ΔWHEREΔ本.著者 ID=著者 ID;

解 説:複数テーブルを関連付けた SELECT 文を記述する事が出来る。使用するテーブル はFrom 句の後ろに 2 つ目以降『,』(コンマ)で区切り、指定する。亦、フィールド 指定は必ず『テーブル名.フィールド名』とする。理由は、異なるテーブルで、同じ フィールド名を使用して居るケースも有るから。 本テーブルの著者ID フィールドと著者テーブルの ID フィールドを関連付け、本.タイトル、本.価格、著者.著者名フィ △は半角スペースを意味する(以下、総ての構文で同じ)。 ACCESS で SQL 文を使用する場合は、文の末尾に『;』(セミコロン)をつける。 機 能 書 式 解 説

(11)

DELETE 文の解説 データを削除する構文 DELETEΔFROMΔテーブル名ΔWHEREΔ条件 例文1:DELETEΔFROMΔ本ΔWHEREΔ価格=2500; 解 説:SELECT 文と似て居るが、DELETE 文の場合はフィールド名を指定し無い。 本と謂う名前のテーブルの価格が2500 と謂うデータレコードを削除する 例文2:DELETEΔFROMΔ本; 解 説:条件を指定し無いと、総てのデータレコードが削除される。 本という名前のテーブルのデータレコードすべてを削除する INSERT 文の解説 データを追加する構文 INSERTΔINTOΔテーブル名(フィールド名,フィールド名)ΔVALUES(追加する数値データ,’追加する文字列データ’) 例文1:INSERTΔINTOΔ本ΔVALUES(9,’VB ファン’,4000,’2000/5/5’,4,4); 解 説:例えば『VB ファン』の様に、文字列型のデータを追加する場合は、『’』(シングル クオーテーション)で区切る。亦、フィールドとフィールドを区切る文字は『,』(コ ンマ)を使用する。

本テーブルにID:9、タイトル:’VB ファン’、価格:4000、購入日:’2000/5/5’、カテゴリ ID:4、著者 ID:4 のレコードを追加

例文2:INSERTΔINTOΔ本(タイトル,価格,購入日,カテゴリ ID, 著者 ID)ΔVALUES(’VB ファン’,4000,’2000/5/5’,4,4); 解 説:特定のフィールドにデータを挿入し無い場合は、省略出来る。上記の例では、ID フィールドを省略して居る。実行した後、データを見ると、ID フィールドには『0』 が代入されて居る。猶、文字列型のフィールドの場合は空白と成る。此の状態を 『NULL』と謂う。亦、オートナンバー型フィールドの場合は自動で番号が割り振 られる。 本テーブルに、タイトル:’VB ファン’、価格:4000、購入日:’2000/5/5’、カテゴリ ID:4、著者 ID:4 のレコードを追加する UPDATE 文の解説 データ内容を変更する構文 UPDATE△テーブル名ΔSETΔフィールド名=変更する数値データ,フィールド名=’変更する文字列データ’ΔWHEREΔ変更するデータの条件 例文1:UPDATEΔ本ΔSETΔ価格=8000,購入日=’2000/6/5’ΔWHEREΔタイトル=’VB ファン’ ; 解 説:総てのデータを変更したい場合は WHERE は必要無いが、特定のレコードを変更 したい場合は指定する。 本テーブルのタイトルフィールドが’VB ファン’と謂うレコードの価格を 8000 に、購入日を’2000/6/5’に変更する SQL 文で文字列を記述する場合は、『’』(シングルクオーテーション)で囲む。 機 能 書 式 解 説 機 能 書 式 解 説 機 能 書 式 解 説

参照

関連したドキュメント

私たちの行動には 5W1H

氏は,まずこの研究をするに至った動機を「綴

事業セグメントごとの資本コスト(WACC)を算定するためには、BS を作成後、まず株

既に使用している無線機のチャンネルとユーザーコードを探知して DJ-DPS70 に同じ設定をす る機能で、キー操作による設定を省略できます。子機(設定される側)が

目指す資格 推奨 Microsoft 社の Access を用い、データベースの設計・完成までを目標 授業概要.. とする。

市場を拡大していくことを求めているはずであ るので、1だけではなく、2、3、4の戦略も

ロボットは「心」を持つことができるのか 、 という問いに対する柴 しば 田 た 先生の考え方を

 介護問題研究は、介護者の負担軽減を目的とし、負担 に影響する要因やストレスを追究するが、普遍的結論を