VB 2005 ① 【VB 2005 実用Ⅲ noa】
-1-
プログラムの概要
事務処理に於いて、Microsoft Office は、業界
標準(De Facto Standard)で有ると謂う事が
出来る。此の Office に含まれる Excel は、スプ
レッドシートソフトで有り、データベースソフ
トと仕ては、Access が用意されて居る。
其の為、本格的なデータベースと仕ての使用に
は Access 等の導入を検討す可きで有るが、小
規模なデータベースでは、Excel で代用されて
居る事も多い。
亦、Execl の他に、データファイルと仕て、CSV
ファイルや TSV ファイル(タブ区切りファイル)も多く用いられて居る。其処で、今回は、従来から
の接続型の ADO に加えて、.NET Framework で採用されて居る非接続型の ADO.NET と、充実した
データベース操作用コンポーネントを用いて、此等を、Visual Basic から、データベースと仕て使用す
る手法を、重点的に学ぶ。
此処では、此等のファイルから、必要なデータを SQL(クエリ)を使用して抽出し、データセットやレ
コードセットに格納された情報を、個々に操作する方法を習得して欲しい。
ADO でファイル操作
□ ActiveX Data Objects(ADODB オブジェクト、参照設定)
□ ADODC に依る接続(プロパティページの利用、ConnectionString)
□ 接続文字列の設定(Provider、Data Source、Extended Properties)
□ レコードソースの指定(RecordSource、SQL 選択クエリ、範囲指定)
□ データバインディング(データグリッド、DataSource プロパティ)
□ データバインディング(テキストボックス、DataSource・DataMember プロパティ)
□ SQL 構文(SELECT 構文、WHERE 句、ORDER BY 句)
今回の課題項目
□ 接続文字列の設定(Extended Properties)
□ レコードソースの指定(範囲指定、[Sheet1$])
□ データバインディング(データグリッド、DataSource プロパティ)
□ データバインディング(テキストボックス、DataSource・DataMember プロパティ)
□ SQL 構文(SELECT 構文、WHERE 句、ORDER BY 句)
今回の重点項目
VB オートメーション ①
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-2-
■ 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 は、バージョンを示す)。
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-3-
■ オブジェクト・プロパティ一覧 ■
コントロールの種類 プロパティ プロパティの設定値
フォーム Name AdoExcel
Anchor
Font MS明朝、標準、9
StartPosition CenterScreen
Text ADODB で EXCEL 操作
DataGridView Name dgvMember
Anchor Top, Bottom, Left, Right
グループボックス1 Name grpSort
Anchor Bottom, Left
Text ソート
グループボックス2 Name grpIndex
Anchor Bottom, Left
Text 索引
ラジオボタン1 Name radNumber
Checked True
Text 番号順
ラジオボタン2 Name radName
Text 名前順
ラジオボタン3 Name radA、radK、radS、radT、radN、radH、radM
radY、radR、radW、radALL(左から順)
Appearance Button
Checked radALL を True
Text あ、か、さ … ら、わ、全(左から順)
TextAlign MiddleCenter
Value Index 10 を True
DataGridView
ラジオボタン1
グループボックス1 グループボックス2
ラジオボタン2 ラジオボタン3(11 個)
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-4-
■ ADODB で EXCEL を操作するプログラムリスト ■
'===================================================================
' Microsoft ActiveX Data Object 2.5 Library への参照を追加して置く事
'===================================================================
Public Class AdoExcel
Private Cn As New ADODB.Connection
Private Rs As New ADODB.Recordset
Private FirstFlag As Boolean = True
' フォームが読み込まれた時の処理
Private Sub AdoExcel_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
Dim SQL As String
Dim Cs As String
Dim P As String
' 起動パスの取得
P = Application.StartupPath : If Not P.EndsWith( "¥" ) Then P &= "¥"
' 接続文字列の設定
Cs = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & P & "サークル名簿.xls;" & _
"Extended Properties=""Excel 8.0;"";" & _
"Persist Security Info=False"
' カーソルサービスの位置の設定とカーソルのオープン
Cn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
Cn.Open( Cs )
' 選択クエリの設定
SQL = "SELECT * FROM [サークル名簿$];"
' レコードセットのオープンと選択クエリの実行
Rs.Open( SQL, Cn )
' データグリッドビューへのデータ表示
Call DispData( )
FirstFlag = False
End Sub
' フォームが閉じられ様と仕た時の処理
Private Sub AdoExcel_FormClosing( ByVal sender As Object, _
ByVal e As System.Windows.Forms.FormClosingEventArgs ) Handles Me.FormClosing
此処で宣言した変数の有効期間は
宣言された時点から、プログラム
の終了迄で有る。
此処で宣言した変数の有効期間は
宣言された時点から、プロシージ
ャの終了迄で有る。
ダブルコーテーションを 2 個連続
して記述すると、引用符と仕ての
意味を喪失し、単成るダブルコー
テーションを示す文字と成る。
Excel のシート名がテーブル名と
仕て扱われる。
此処では、データソースにサーク
ル名簿と謂うエクセルシートを指
定して居る。
選択クエリを指定し、コネクショ
ンを通じてレコードセットを開く
と、データが取得される。
プログラム末尾で定義して居るメ
ソッド(ジェネラルプロシージャ)
を呼び出して居る。
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-5-
If MessageBox.Show( "終了しますか?", "プログラムの終了", MessageBoxButtons.YesNo, _
MessageBoxIcon.Question ) = Windows.Forms.DialogResult.Yes Then
If Rs IsNot Nothing Then Rs.Close( ) : Rs = Nothing
If Cn IsNot Nothing Then Cn.Close( ) : Cn = Nothing
Application.Exit( )
Else
e.Cancel = True
End If
End Sub
' ラジオボタン(あ~わ、全)のチェックが変化した時の処理
Private Sub RadioButtonCheckedChanged( ByVal sender As System.Object, _
ByVal e As System.EventArgs ) _
Handles radA.CheckedChanged, radY.CheckedChanged, radW.CheckedChanged, _
radT.CheckedChanged, radS.CheckedChanged, radR.CheckedChanged, _
radN.CheckedChanged, radM.CheckedChanged, radK.CheckedChanged, _
radH.CheckedChanged, radAll.CheckedChanged
' フォーム生成時のイベント発生の防止
If FirstFlag Then Exit Sub
Dim OBJ As RadioButton = DirectCast( sender, RadioButton )
Dim SQL As String = ""
Dim FLT As String = ""
Dim SRT As String = ""
' フィルタ(抽出条件)の設定
Select Case OBJ.Text
Case "あ": FLT = "フリガナ<'カ'"
Case "か": FLT = "フリガナ>'オ゚ン' AND フリガナ<'サ'"
Case "さ": FLT = "フリガナ>'コ゚ン' AND フリガナ<'タ'"
Case "た": FLT = "フリガナ>'ソ゚ン' AND フリガナ<'ナ'"
Case "な": FLT = "フリガナ>'ト゚ン' AND フリガナ<'ハ'"
Case "は": FLT = "フリガナ>'ノ゚ン' AND フリガナ<'マ'"
Case "ま": FLT = "フリガナ>'ポン' AND フリガナ<'ヤ'"
Case "や": FLT = "フリガナ>'モ゚ン' AND フリガナ<'ラ'"
Case "ら": FLT = "フリガナ>'ヨ゚ン' AND フリガナ<'ワ'"
Case "わ": FLT = "フリガナ>'ロ゚ン' AND フリガナ<'ン'"
Case "全": FLT = ""
End Select
' ソート項目の設定
If radNumber.Checked Then
SRT = "登録番号"
Else
SRT = "フリガナ"
End If
メモリに塵埃を残さない様、コネ
クションとレコードセットを閉じ
て、メモリから解放し、終了する。
e.Cancel に True の値を設定する
事に依り、プログラムの終了をキ
ャンセルする事が出来る。
此処で宣言した変数は宣言したサ
ブプロシージャ内でしか値の参照
と設定を行う事が出来ない。
条件文の記述には、此の他にも
Like 演算子とワイルドカードを
用いる方法も有る。
注意
此のイベントプロシージャを最初に実行した時に、『選択された
CollatingSequence は OS でサポートされて居ない。』と謂うエラー
メッセージが表示される事が有る。
此のメッセージは Visual Basic の IDE(統合開発環境)で而巳表示
され、コンパイル済みのプログラムでは表示されない。
開発時の対処法と仕ては、エラーメッセージが表示されると、一旦
プログラムを終了し、再度実行すると良い。
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-6-
' 選択クエリの設定
If FLT = "" Then
SQL = "SELECT * FROM [サークル名簿$] ORDER BY " & SRT & " ASC;"
Else
SQL = "SELECT * FROM [サークル名簿$] WHERE " & FLT & _
" ORDER BY " & SRT & " ASC;"
End If
' レコードセットのオープンと選択クエリの実行
Rs.Close( )
Rs.Open( SQL, Cn )
' データグリッドビューへのデータ表示
Call DispData( )
End Sub
' データグリッドビューへデータを表示するメソッド
Private Sub DispData( )
Dim I As Integer
Dim J As Integer
Dim C As Integer = Rs.Fields.Count - 1
' データグリッドビューに列を追加(フォームロード時而巳)
If FirstFlag Then
For I = 0 To C
dgvMember.Columns.Add( Rs.Fields( I ).Name, Rs.Fields( I ).Name )
Next
End If
' データグリッドビューに行を追加
dgvMember.Rows.Clear( )
For I = 1 To Rs.RecordCount
Dim R As New DataGridViewRow( )
R.CreateCells( dgvMember )
For J = 0 To C
R.Cells( J ).Value = Rs.Fields( J ).Value & ""
Next
dgvMember.Rows.Add( R )
Rs.MoveNext( )
Next
End Sub
End Class
ソートは ORDER BY にフィール
ド名を指定する。昇順の場合は
ASC、降順の場合は DESC を付け
る(ASC は省略可)。
使用する Excel の種類に応じた Extended Properties の値は、下記の通りで有る。
Excel 8.0:Excel 97、Excel 2000、Excel 2002 (Excel Version 8.0, 9.0,10.0)
Excel 5.0:Excel 95 (Excel Version 7.0)
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-7-
■ ADODB で CSV を操作するプログラムリスト(変更点) ■
■ Private Sub AdoCsv_Load(フォームが読み込まれた時の処理)
' 接続文字列の設定
Cs = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=.¥;" & _
"Extended Properties=""Text;Delimited;"";" & _
"Persist Security Info=False"
' 選択クエリの設定
SQL = "SELECT * FROM サークル名簿.csv;"
■ Private Sub RadioButtonCheckedChanged(ラジオボタンのチェックが変化した時の処理)
' 選択クエリの設定
If FLT = "" Then
SQL = "SELECT * FROM サークル名簿.csv ORDER BY " & SRT & " ASC;"
Else
SQL = "SELECT * FROM サークル名簿.csv WHERE " & FLT & _
" ORDER BY " & SRT & " ASC;"
End If
変更点
■ 接続文字列
Excel では、Data Source に Excel ファイル( *.xls )を指定するが、CSV では、Data Source
に CSV ファイル( *.csv )が格納されて居るディレクトリ(フォルダ)を指定する。
此の事は、同一ディレクトリに格納されて居る複数の CSV ファイルを、同一のデータベースに於
ける複数のテーブルと看做す事が出来る事を意味して居る。
亦、Excel では、Extended Properties に "Excel x.x;" を指定するが、CSV では、"Text;Delimited;"
を指定する。
デリミタ(Delimitation)は、プログラミング用語と仕ては、区切り記号を意味して居るが、此処
では、カンマ( , )を意味して居る。従って、カンマ以外の区切り記号を使用して居る場合(タ
ブ区切り等)は、対象と成らない事に注意を要する。
■ クエリでのテーブル指定
Excel では、テーブル名にシート名を指定するが、CSV では、対象と成る CSV ファイル名を指定
する。
.¥ は、相対パスを指定する記述法
で、カレントディレクトリを意味
する。
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-8-
■ ADODB で TSV を操作するプログラムリスト(変更点) ■
■ Private Sub AdoCsv_Load(フォームが読み込まれた時の処理)
' 接続文字列の設定
Cs = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=.¥;" & _
"Extended Properties=""Text"";" & _
"Persist Security Info=False"
' 選択クエリの設定
SQL = "SELECT * FROM サークル名簿.txt;"
■ Private Sub RadioButtonCheckedChanged(ラジオボタンのチェックが変化した時の処理)
' 選択クエリの設定
If FLT = "" Then
SQL = "SELECT * FROM サークル名簿.txt ORDER BY " & SRT & " ASC;"
Else
SQL = "SELECT * FROM サークル名簿.txt WHERE " & FLT & _
" ORDER BY " & SRT & " ASC;"
End If
変更点
■ 接続文字列
Excel では、Data Source に Excel ファイル( *.xls )を指定するが、TSV では、Data Source
に TSV ファイル( *.txt )が格納されて居るディレクトリ(フォルダ)を指定する。
此の事は、同一ディレクトリに格納されて居る複数の TSV ファイルを、同一のデータベースに於
ける複数のテーブルと看做す事が出来る事を意味して居る。
亦、Excel では、Extended Properties に "Excel x.x;" を指定するが、TSV では、"Text;"を指定す
る。
デリミタ(Delimitation)は、プログラミング用語と仕ては、区切り記号を意味して居るが、此処
では、カンマ( , )を意味して居る。従って、カンマ以外の区切り記号を使用して居る場合(タ
ブ区切り等)は、対象と成らない為、別途、スキーマファイル(後述)を用意する必要が有る。
■ クエリでのテーブル指定
Excel では、テーブル名にシート名を指定するが、TSV では、対象と成る TSV ファイル名を指定
する。
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-9-
■ TSV ファイルの為のスキーマファイル
前述の様に、Extended Properties で指定するデリミタ(Delimitation)は、プログラミング用語と仕
ては、区切り記号を意味して居るが、此処では、カンマ( , )を意味して居る為、カンマ以外の区切り
記号を使用して居る場合(タブ区切り等)は、Delimited を指定しても、其の対象と成らない為、別途
でスキーマファイルを用意する必要が有る。
サンプルプログラムで使用して居るスキーマファイル(schema.ini)の内容は、下記の通りで有る。此
れを、TSV ファイルを格納して居るディレクトリ(フォルダ)に格納して置く必要が有る。
[サークル名簿.txt]
ColNameHeader=True
Format=TabDelimited
Col1=登録番号 Text
Col2=氏名 Text
Col3=フリガナ Text
Col4=郵便番号 Text
Col5=住所 Text
Col6=電話番号 Text
Col7=職種/業種 Text
Col8=生年月日 Text
1 行目には、ブラケット( [ ] )で囲み、 対象と成る TSV ファイル名を指定する。
2 行目の ColNameHeader キーには、最初の行がタイトル行(列見出し)で有る場合は、True を、然
うでない場合(最初からデータ行)は、False を指定する。
3 行目の Format キーには、区切り文字を設定する。区切り文字には、下記が設定出来る。
TabDelimited:タブを区切り文字とする場合
CSVDelimited:カンマを区切り文字とする場合
Delimited(<文字>):引数に指定した 1 文字を区切り文字とする場合
※ カンマ区切りの場合は、特にスキーマファイルを作成する必要は無いので、CSVDelimited を指
定する事は、先ず無いと思われる。
4 行目以降の Col1~キーには、各フィールドのフィールド名とデータ型等を設定する。データ型に指定
出来る値は、下記の通りで有る。
データ型 指定値
Bit 型 Bit
バイト型 Byte
整数型 Short
長整数型 Long
通貨型 Currency
単精度浮動小数点数型 Single
倍精度浮動小数点数型 Double
日付/時刻型 DateTime
テキスト型 Text
メモ型 Memo
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-10-
■ OleDb で EXCEL を操作するプログラムリスト ■
前述の変更を行えば、CSV や TSV にも適用可能
Imports System.Data.OleDb
Public Class AdoExcel
Private Cn As New OleDbConnection( )
Private Cm As New OleDbCommand( )
Private Da As New OleDbDataAdapter( )
Private Ds As New DataSet( )
Private FirstFlag As Boolean = True
' フォームが読み込まれた時の処理
Private Sub AdoTsv_Load( ByVal sender As System.Object, ByVal e As System.EventArgs ) _
Handles MyBase.Load
Dim SQL As String
Dim Cs As String
Dim P As String
' 起動パスの取得
P = Application.StartupPath : If Not P.EndsWith( "¥" ) Then P &= "¥"
' 接続文字列の設定
Cs = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & P & "サークル名簿.xls;" & _
"Extended Properties=""Excel 8.0;"";" & _
"Persist Security Info=False"
Cn.ConnectionString = Cs
' コネクションの設定
Cm.Connection = Cn
' 選択クエリの設定
SQL = "SELECT * FROM [サークル名簿$];"
Cm.CommandText = SQL
' データの取得
Da.SelectCommand = Cm
Ds.Clear( )
Da.Fill(Ds, "circle")
' データグリッドビューへのデータ表示
Call DispData( )
FirstFlag = False
End Sub
データベースを操作する為のオブ
ジェクトを宣言して居る。
取得したデータを格納する為のオ
ブジェクトを宣言して居る。
接続文字列は、ADO の場合と全く
同じで有る。
データベースより、選択クエリで
抽出したデータを、データセット
に circle と謂う名前を付けて格納
して居る。
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-11-
' フォームが閉じられ様と仕た時の処理
Private Sub AdoCsv_FormClosing( ByVal sender As Object, _
ByVal e As System.Windows.Forms.FormClosingEventArgs ) Handles Me.FormClosing
If MessageBox.Show( "終了しますか?", "プログラムの終了", MessageBoxButtons.YesNo, _
MessageBoxIcon.Question ) = Windows.Forms.DialogResult.Yes Then
If Ds IsNot Nothing Then Ds.Dispose( )
If Da IsNot Nothing Then Da.Dispose( )
If Cm IsNot Nothing Then Cm.Dispose( )
If Cn IsNot Nothing Then Cn.Close( ) : Cn.Dispose( )
Application.Exit( )
Else
e.Cancel = True
End If
End Sub
' ラジオボタン(あ~わ、全)のチェックが変化した時の処理
Private Sub RadioButtonCheckedChanged( ByVal sender As System.Object, _
ByVal e As System.EventArgs ) _
Handles radA.CheckedChanged, radY.CheckedChanged, radW.CheckedChanged, _
radT.CheckedChanged, radS.CheckedChanged, radR.CheckedChanged, _
radN.CheckedChanged, radM.CheckedChanged, radK.CheckedChanged, _
radH.CheckedChanged, radAll.CheckedChanged
' フォーム生成時のイベント発生の防止
If FirstFlag Then Exit Sub
Dim OBJ As RadioButton = DirectCast( sender, RadioButton )
Dim SQL As String = ""
Dim FLT As String = ""
Dim SRT As String = ""
' フィルタ(抽出条件)の設定
Select Case OBJ.Text
Case "あ": FLT = "フリガナ<'カ'"
Case "か": FLT = "フリガナ>'オ゚ン' AND フリガナ<'サ'"
Case "さ": FLT = "フリガナ>'コ゚ン' AND フリガナ<'タ'"
Case "た": FLT = "フリガナ>'ソ゚ン' AND フリガナ<'ナ'"
Case "な": FLT = "フリガナ>'ト゚ン' AND フリガナ<'ハ'"
Case "は": FLT = "フリガナ>'ノ゚ン' AND フリガナ<'マ'"
Case "ま": FLT = "フリガナ>'ポン' AND フリガナ<'ヤ'"
Case "や": FLT = "フリガナ>'モ゚ン' AND フリガナ<'ラ'"
Case "ら": FLT = "フリガナ>'ヨ゚ン' AND フリガナ<'ワ'"
Case "わ": FLT = "フリガナ>'ロ゚ン' AND フリガナ<'ン'"
Case "全": FLT = ""
End Select
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-12-
' ソート項目の設定
If radNumber.Checked Then
SRT = "登録番号"
Else
SRT = "フリガナ"
End If
If FLT = "" Then
SQL = "SELECT * FROM [サークル名簿$] ORDER BY " & SRT & " ASC;"
Else
SQL = "SELECT * FROM [サークル名簿$] WHERE " & FLT & _
" ORDER BY " & SRT & " ASC;"
End If
Cm.CommandText = SQL
' データの取得
Da.SelectCommand = Cm
Ds.Clear( )
Da.Fill( Ds, "circle" )
' データグリッドビューへのデータ表示
Call DispData( )
End Sub
' データグリッドビューへデータを表示するメソッド
Private Sub DispData( )
Dim I As Integer
Dim J As Integer
Dim C As Integer = Ds.Tables( "circle" ).Columns.Count - 1
' データグリッドビューに列を追加(フォームロード時而巳)
If FirstFlag Then
For I = 0 To C
dgvMember.Columns.Add( Ds.Tables( "circle" ).Columns( I ).ColumnName, _
Ds.Tables( "circle" ).Columns( I ).ColumnName )
Next
End If
' データグリッドビューに行を追加
dgvMember.Rows.Clear( )
For I = 0 To ( Ds.Tables( "circle" ).Rows.Count - 1 )
Dim R As New DataGridViewRow( )
R.CreateCells( dgvMember )
For J = 0 To C
R.Cells( J ).Value = Ds.Tables( "circle" ).Rows( I ).Item( J )
Next
dgvMember.Rows.Add( R )
Next
End Sub
End Class
参考
此処では、データセットに格納
された個々のデータを操作す
る方法を理解して貰う為に、此
の様な方法を採用して居るが、
データセットは、簡単に、下記
の様に、データグリッドビュー
とバインドする事が出来る。
With dgvMember
.DataSource = Ds
.DataMember = "circle"
End With
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-13-
ADO と ADO.NET
Visual Basic.NET では、従来の ADO を従来の方法で使用する事も出来るが、通常、データベースにア
クセスする為に ADO.NET を使用する。此処では、Windows 上で動作するアプリケーションの開発に
必要な知識を中心に、ADO と ADO.NET の差異を説明する。
Visual Basic 6.0 では、データベースにアクセスする為に ADO(ActiveX Data Object)を使用するが
ADO.NET は、此れを.NET Framework 用に進化させた物で有り、両者は、データアクセスの概念に大
きな差異が有る。
■ データアクセス用のコンポーネント
ADO Visual Basic 6.0 では、データアクセス用のコンポーネントに ADO データコントロール(ADODC)が
有り、下記の機能を提供して居る。
・データベースに接続する。
・データベースから必要なデータを取得する。
・フォーム上のコントロールとデータベースを連結する。
ADO.NET ADO.NET には、ADO の様な便利なコンポーネントは無い。コネクションを使用してデータベースに
接続し、データアダプタを使用して必要なデータを取得する。
■ データの保持方法
ADO ADO では、取得したデータをレコードセットで管理する。レコードセットは、メモリ上に保持した仮
想テーブルの様な物で有る。
ADO.NET ADO.NET では、データセットに依り、データベースと同じ物をメモリ上に保持する事が出来る。デー
タセットには、複数のテーブルの構造や、主キーやリレーションシップ等の属性を定義する事が出来る。
亦、実行時には、取得したデータを管理する事も出来る。
■ レコードの扱い方
ADO ADO のレコードセットに含まれるレコードは Bookmark プロパティに依り管理されて居り、孰れかの
レコードが必ず選択された状態に成って居る。因みに、レコードセットを取得した初期状態では、先頭
のレコードが選択された状態に成って居る。此のレコードをカレントレコードと呼び、亦、MoveNext
メソッドや MovePrevious メソッド等に依り、カレントレコードを移動する事が出来る。
ADO.NET ADO.NET には、カレントレコードと謂う概念は無い。其の為、レコードを移動する為のメソッドも無
い。データセットに保持されたデータは、行のコレクションと仕て扱われ、各レコードは、配列の要素
番号を使用して識別する。
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-14-
■ 接続方法
ADO ADO では、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ
を取得し、更新する事も可能で有るが、実際には、データの転送時以外は、データベースに接続して居
る必要が無い場合が多い。亦、データベースへの接続を維持する事で、システムリソースを消費し、パ
フォーマンスが低下すると謂う負の側面も有る。
ADO.NET ADO.NET では、データセットに依り、データベースと粗同じ物をメモリ上に保持する事が出来るので
データベースに接続する必要が有るのは、データセットにデータを取得する時と、データセットで変更
した内容をデータベースに転送する時丈で有る。其れ以外の時はデータベースの接続を解除し、データ
セットを利用してデータベース操作を行う。
■ ADO と ADO.NET の使い分け
新規にアプリケーションを開発する時は、ADO.NET を利用すると、豊富なツールを利用して、効率良
くアプリケーションを開発する事が出来る。ADO.NET では、データベースと常時接続する必要が無い
為、システムの負荷を軽減する事が出来る。併し、非接続型故に、大量のレコードの即時更新や、常に
最新の情報が必要な場合には、不適格で有り、此の様な場合は、常時接続型の ADO を利用すると良
い。.NET Framework でも、ADO は、サポートされて居る。
データベース
フォーム
フォーム
データセット
データベース
データアダプタ
コネクション
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-15-
ADODB.Connection オブジェクト
データベースと接続する為のオブジェクト
Connection オブジェクトは、データソースへの接続を表し、データソースとの固有のセッ
ションを表す。クライアントサーバーデータベースシステムの場合、此のオブジェクトは
サーバーへの実際のネットワークに対応する。
ADODB.Connection の Open メソッド
データソースへの接続を開くメソッド
Connection.Open( 引数 1, 引数 2, 引数 3, 引数 4 )
データソースへの物理的な接続を設定する。此のメソッドが完了すると接続状態が確立し、
コマンドを発行して結果を処理する事が出来る。
引数 1 には、接続情報(ConnectionString、後述)を指定し、省略する事が出来る。
引数 2 には、接続を確立する際に必要なユーザー名を指定し、省略する事が出来る。
引数 3 には、接続を確立する際に必要なパスワードを指定し、省略する事が出来る。
引数 4 には、同期接続、非同期接続の孰れかを示す定数を指定し、省略する事が出来る。
ADODB.Connection の Execute メソッド
指定されたクエリ、SQL ステートメント、ストアドプロシージャ等を実行するメソッド
Connection.Execute( 引数 1, 引数 2, 引数 3 )
指定した接続上で、引数1で指定されたメソッドに渡すクエリが実行される。
引数 1 には、実行する SQL ステートメント、テーブル名等を指定し、必ず指定する。
引数 2 には、プロバイダが返す操作の結果を反映するレコード数を指定し、省略する事が出来る。
引数 3 には、プロバイダが引数 1 を評価する方法を示す定数を指定し、省略する事が出来る。
ADODB.Connection の Close メソッド
開いて居るオブジェクト、及び、依存する総てのオブジェクトを閉じるメソッド
Connection.Close( )
Connection オブジェクトを閉じて、関連するシステムリソースを解放する。
オブジェクトを閉じてもメモリからは削除されず、プロパティ設定を変更してもう一度開く事が出来る。
メモリからオブジェクトを完全に削除するには、オブジェクト変数を Nothing に設定する(Dispose メ
ソッドがサポートされて居ないオブジェクトの開放は、Nothing を代入する事で行う)。
機 能
解 説
機 能
書 式
解 説
機 能
書 式
解 説
機 能
書 式
解 説
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-16-
ADODB.Connection の ConnectionString プロパティ
データソースへの接続を確立する為に必要な情報を設定・取得するプロパティ
Connection.ConnectionString = "キーワード 1=値; キーワード 2=値; …"
セミコロンで区切られた一連の引数と値のセットを含む詳細な接続文字列を引き渡す事に
依りデータソースを指定する。
キーワードの内、省略出来ないキーワードは、Provider と Data Source の 2 種で有る。
Provider キーワード:接続するデータベースの種類を表す。Access2000 形式のデータベースに接続す
る場合は、Microsoft.Jet.OLEDB.4.0 と謂う値を使用する。
Data Source キーワード:接続するデータベースファイル名をドライブ名からパスを含めた形で指定出
来る。パス名を省略した場合は,カレントフォルダが対象に成る。
ADO は、ConnectionString プロパティで 4 種類の引数をサポートして居る。其他の引数は ADO で処
理されずに、直接プロバイダに引き渡される。下記に ADO がサポートする引数を示す。
引数 説明
Provider= 接続に使用するプロバイダ名を指定
File Name= 設定済みの接続情報を含むプロバイダ固有のファイル名を指定
Remote Provider= クライアント側の接続を開く際に使用するプロバイダ名を指定(RDS 而巳)
Remote Server= クライアント側の接続を開く際に使用するサーバーのパス名を指定(RDS 而巳)
URL= ファイルやディレクトリ等のリソースを識別する絶対 URL を指定
ConnectionString プロパティを設定して Connection オブジェクトを開いた後で、プロバイダがプロパ
ティの内容を変更する場合が有る。例えば、ADO で定義された引数名が、プロバイダで該当する引数
名にマップされる場合等で有る。
ConnectionString プロパティは、Open メソッドの ConnectionString 引数に使用された値を自動的に
継承する。従って、Open メソッドの呼び出し中に現在の ConnectionString プロパティを上書きする事
が出来る。
File Name 引数に依り関連の有るプロバイダが呼び出される為、Provider と File Name 引数の両方を
引き渡す事は出来ない。
接続が閉じて居る場合の ConnectionString プロパティは読み取り・書き込みの両用に成って居るが、
接続が開いて居る場合は読み取り専用に成って居る。
ConnectionString プロパティで引数が重複しても無視される。引数では、最後のインスタンスが適用さ
れる。
RDS での使用:クライアント側の Connection オブジェクトで使用される場合、ConnectionString プ
ロパティには、Remote Provider 及び Remote Server パラメータ而巳を指定する。猶、RDS(Remote
Data Service)とは、Internet Information Server 等を中継して、データソースへのアクセス、及び、
更新を行う事を目的とするオブジェクトを謂う。
機 能
書 式
解 説
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-17-
Visual Basic 6.0 に付属して居る OLE DB プロバイダ毎の設定値は、下記の通りで有る。
OLE DB プロバイダ ConnectString プロパティの例
Microsoft Jet 4.0 OLE DB Provider Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MDB ファイル名
Microsoft Jet 3.51 OLE DB Provider Provider=Microsoft.Jet.OLEDB.3.51;Data Source=MDB ファイル名
Microsoft OLE DB Provider for SQL Server Provider=SQLOLEDB;User ID=ユーザーID;Data Source=サーバー名
Microsoft OLE DB Provider for Oracle Provider=MSDAORA; User ID=ユーザーID;Data Source=データベース別名
Microsoft OLE DB Provider for ODBC Drivers Provider=MSDASQL;User ID=ユーザーID;Data Source=データソース名
ADO では、データベースの種類を Connection の Extended Properties プロパティで指定する。下記の
表は、開こうとして居る ISAM の指定に使用する文字列の一覧で有る。
データベース 文字列
dBASE III dBASE III;
dBASE IV dBASE IV;
dBASE 5 dBASE 5.0;
Paradox 3.x Paradox 3.x;
Paradox 4.x Paradox 4.x;
Paradox 5.x Paradox 5.x;
Excel 3.0 Excel 3.0;
Excel 4.0 Excel 4.0;
Excel 5.0 / Excel 95 Excel 5.0;
Excel 97 Excel 97;
Excel 2000 Excel 8.0;
HTML Import HTML Import;
HTML Export HTML Export;
Text(CSV ファイル、TSV ファイル等) Text;
ODBC ODBC;
DATABASE=database;
UID=user;
PWD=password;
DSN=datasourcename;
Persist Security Info は、機密扱いの認証情報を保存するか何うかを設定し、True なら保存する、False
なら保存しないと謂う事に成る。
Persist Security Info を True に設定すると、ユーザーID やパスワード等のセキュリティ関連情報は、
接続を開いた後も、接続から取得する事が出来る。接続時にユーザーID とパスワードを渡して居る場
合には、接続を開いた後で、其の情報を破棄する事が最も安全で有る。即ち、セキュリティを向上させ
る方法は、Persist Security Info を False に設定する事で有る。
此れは、開いた状態の接続を信頼されて居ないソースに提供したり、接続情報をディスクに保持して居
る場合に特に重要で有る。Persist Security Info を False の儘に仕て置けば、信頼されて居ないソース
は、接続用のセキュリティ関連情報にアクセス出来ず、セキュリティ関連情報が接続文字列情報と共に
ディスクに保存される事も無い。
Persist Security Info は、既定では False に設定されて居る。
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-18-
ADODB.Connection の CommandType プロパティ
Command オブジェクトの型を設定・取得するプロパティ
Connection.CommandType = 定数
CommandType プロパティの評価を最適化する目的で使用する。
定数には、下記の CommandTypeEnum 値を設定する。
定数 説明
adCmdText CommandText をコマンド文字列に依る定義、又は、ストアドプロシージャ
の呼出と仕て評価する。
adCmdTable CommandText を、総ての列が内部で生成された SQL クエリーに依り返され
るテーブル名と仕て評価する。
adCmdTableDirect CommandText を総ての列を返すテーブル名と仕て評価する。
adCmdStoredProc CommandText をストアドプロシージャ名と仕て評価する。
adCmdUnknown CommandText プロパティのコマンドタイプは不明で有る(既定値)。
adCmdFile CommandText を永続化されて居る Recordset のファイル名と仕て評価す
る。
adExecuteNoRecords CommandText が、行を返さないコマンド、又は、ストアドプロシージャ(例
えば、データの挿入而巳を行うコマンド)で有る事を示す。行が取得されて
も、其等は破棄され、返されない。常に adCmdText 又は adCmdStoredProc
と組み合わせて使用する。
CommandType プロパティの値が adCmdUnknown(既定値)の場合、パフォーマンスが低下する事が
有る。此れは、CommandText プロパティの型が SQL ステートメント、ストアドプロシージャ、又は
テーブル名の孰れかで有るかを調べる為にプロバイダを呼び出す必要が有る為で有る。使用して居るコ
マンドタイプが明らかな場合は、CommandType プロパティを設定する事に依り、該当するコードに直
接移動する事が出来る。CommandType プロパティが CommandText プロパティのコマンドタイプと
一致しない場合に Execute メソッドを呼び出すと、エラーが発生する。
adExecuteNoRecords 定数は、内部処理を最小限にする事でパフォーマンスを向上させる。此の定数は
単独で使用される事は無い。常に adCmdText 又は adCmdStoredProc と組み合わせて使用される(例
えば、adCmdText+adExecuteNoRecords)。adExecuteNoRecords が Recordset.Open メソッド、又は
メソッドに使用されて居る Command オブジェクトと使用された場合、エラーが発生する。
参考:CommandText プロパティは、SQL ステートメント、テーブル名、又は、ストアドプロシージャ
の呼出等、プロバイダのコマンドを含む文字列型の値を設定・取得するプロパティで、既定値はヌルス
トリング(長さ 0 の文字列)で有る。
通常は SQL ステートメントを使用するが、ストアドプロシージャの呼出等、プロバイダが認識する他
の種類のコマンドステートメントでも構わない。猶、SQL ステートメントは、特定の文法、又は、プロ
バイダのクエリープロセッサがサポートするバージョンでなければ成らない。
CommandType プロパティの設定値に依り、CommandText プロパティが変更される場合が有る。
CommandText プロパティは何時でも読み出す事が出来、ADO がコマンド実行中に使用する実際のコ
マンド文字列の参照も可能で有る。
機 能
書 式
解 説
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-19-
ADODB.Connection の CursorType プロパティ
Recordset オブジェクトで使用されて居るカーソルタイプを設定・取得するプロパティ
Connection.CursorType = 定数
Recordset オブジェクトを開く時に使用するカーソルタイプを指定する為に使用する。
定数には、下記の CursorTypeEnum 値を設定する。
定数 説明
adOpenForwardOnly 前方スクロールタイプカーソル。レコードを前方向而巳にスクロール出来
る事を除き、静的カーソルと同じ属性を持つ。レコードセットを一度丈ス
クロールする必要が有る場合は、此のカーソルに依り性能を向上させる事
が出来る(既定値)。
adOpenKeyset キーセットカーソル。動的カーソルと同じ様な属性を持つが、他のユーザ
が追加したレコードを表示せず、使用中のレコードセットから他のユーザ
が削除したレコードへのアクセスを許可しない。猶、他のユーザが変更し
たデータを表示する事は出来る。
adOpenDynamic 動的カーソル。他のユーザに依る追加、変更、及び、削除を観る事が出来
プロバイダがサポートしないブックマークを除いて、レコードセットで許
容されて居る総ての種類の移動を行う事が出来る。
adOpenStatic 静的カーソル。データの検索、又は、レポートの作成に使用する為の、レ
コードの静的コピーで有る。他のユーザに依る追加、変更、又は、削除は
表示されない。
CursorType プロパティは、Recordset が閉じて居る場合は、読み取り・書き込み、開いて居る場合は
読み取り専用に成って居る。
CursorLocation プロパティが adUseClient に設定されて居る場合、adUseStatic の設定而巳サポート
されて居る。サポートされて居ない値が設定された場合でも、エラーは発生しない。此の場合、サポー
トされる最も類似する CursorType が代わりに使用される。
要求したカーソルタイプをプロバイダがサポートして居ない場合、他のカーソルタイプが返される。
Recordset オブジェクトが開いて居る時、CursorType プロパティは実際に使用されて居るカーソルタ
イプと一致する様に変更される。返されたカーソル特有の機能を調べるには、Supports メソッドを使
用する。Recordset を閉じると、CursorType プロパティは元の設定値に戻えう。
注意:動的カーソル、又は、前方スクロールタイプカーソルで Supports(adUpdateBatch) が True を
返す事が有るが、バッチ更新はキーセットカーソル、又は、静的カーソルで行う。LockType プロパテ
ィを adLockBatchOptimistic に設定してから、CursorLocation プロパティを adUseClient に設定して、
バッチ更新に必要な Microsoft Client Cursor Engine を有効にする。
RDS での使用:クライアント側(ADOR)の Recordset オブジェクトで使用される場合、CursorType
プロパティは adOpenStatic に而巳設定する事が出来る。
機 能
書 式
解 説
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-20-
ADODB.Connection の CursorLocation プロパティ
カーソルエンジンの場所を設定・取得するプロパティ
Connection.CursorLocation = 定数
此のプロパティで、プロバイダにアクセス可能な様々なカーソルライブラリの中からカーソ
ルエンジンを選択する。通常は、クライアント側カーソルライブラリ、又は、サーバー側カ
ーソルライブラリから選択する。
定数には、下記の定数値を設定する。
定数 説明
adUseNone カーソルサービスは使用されない(此の定数は現在は使用されないが、以前のバージ
ョンとの互換性を保つ為に装備されて居る)。
adUseClient ローカルカーソルライブラリより供給されたクライアント側のカーソルを使用する。
ローカルカーソルエンジンを使うと、ドライバに依り供給されるカーソルには無い多
くの機能を使う事が出来る。従って、此の設定を使用するとより高度な機能が提供さ
れる。以前のバージョンとの互換性を保つ為に、同じ機能の adUseClientBatch もサ
ポートされて居る。
adUseServer データプロバイダカーソル、又は、ドライバに依り供給されるカーソルを使用する。
此等のカーソルは柔軟に使用出来、他のユーザがデータソースに加える変更を検出す
る事が出来る。併し、Microsoft Client Cursor Provider の幾つかの機能(分離され
たレコードセット等)はサーバー側カーソルではシミュレート出来ない為、此等の機
能を此の設定で使用する事は出来ない(既定値)。
此のプロパティ設定は、プロパティが設定された後に確立された接続而巳に作用する。CursorLocation
プロパティを変更しても既存の接続には影響しない。
此のプロパティは、Connection、又は、閉じて居る Recordset 上では読み取り・書き込みで、開いて居
る Recordset 上では読み取り専用で有る。
Connection.Execute カーソルは、此のプロパティ設定を継承する。Recordsets は、自動的に此の設定
を関連付けられた接続から継承する。
ADODB.Connection の RecordSource プロパティ
レコードセットを返すステートメント又はクエリーを設定・取得するプロパティ
Connection.RecordSource = 値
通常は選択クエリ(SELECT 構文)を指定する。
値には、レコードソースを指定する文字列式を指定し、設定値は、下記の通りで有る。
設定値 内容
テーブル名 データベースのテーブルの名前で有る。
SQL クエリー データソースに適した構文を使用した有効な SQL 文字列で有る。
機 能
書 式
解 説
機 能
書 式
解 説
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-21-
ADODB.Recordset オブジェクト
検索文(選択クエリ)を発行した際にデータを格納する為のオブジェクト
Recordset オブジェクトは、基に成るテーブルからのレコードセット全体、又は、コマンド
の実行に依り返された結果のレコードを表し、常にレコードセット内の1つのレコード而巳
をカレントレコードと仕て参照する。亦、Recordset オブジェクトは、レコード(行)とフィールド(列)
で構成される。Recordset オブジェクトは必要な丈、作成する事が出来る。
ADODB.Recordset の Open メソッド
カーソルを開くメソッド
Recordset.Open( 引数 1, 引数 2, 引数 3, 引数 4, 引数 5 )
ベーステーブルからのレコード、クエリ結果、又は、以前に保存された Recordset を表すカ
ーソルを開く事が出来る。
引数 1 には、実行する SQL ステートメント、テーブル名等を指定し、省略する事が出来る。
引数 2 には、有効な Connection オブジェクト変数名を指定し、省略する事が出来る。
引数 3 には、Recordset を開く際にプロバイダが使うカーソルタイプを指定し、省略する事が出来る。
引数 4 には、Recordset を開く際にプロバイダが使うロックの種類を指定し、省略する事が出来る。
引数 5 には、プロバイダが引数 1 を評価する方法を示す定数を指定し、省略する事が出来る。
ADODB.Recordset の MoveNext メソッド
指定の Recordset オブジェクトの次のレコードに移動して、其のレコードをカレントレコー
ドにするメソッド
Recordset.MoveNext( )
カレントレコードの位置を Recordset の末尾に向かい 1 レコード進める。
カレントレコードが最後のレコードの場合に MoveNext メソッドを呼び出すと、カレントレコードが
Recordset の最後のレコードの後に設定され、EOF が True に成る。EOF プロパティが既に True の場
合、前方へ移動しようとするとエラーが発生する。
カレントレコードの位置を変更するには、他に下記のメソッドが有る。
MoveFirst Recordset の最初のレコードに移動する。
MoveLast Recordset の最後のレコードに移動する。
MovePrevious Recordset の先頭に向かい 1 レコード戻る。
前方スクロール而巳可能なレコードセットで両方向スクロールのサポートが必要な場合、CacheSize プ
ロパティを使用してカーソルの後方スクロールをサポートするレコードキャッシュを作成し、Move メ
ソッドを使用して移動する事が出来る。キャッシュされたレコードはメモリにロードされる為、必要以
上のレコードのキャッシュは避ける可きで有る。前方スクロール而巳可能なレコードセットで
MoveFirst メソッドを呼び出す事は出来るが、其の結果、Recordset オブジェクトを生成するコマンド
をプロバイダが再度実行する可能性が有る。
機 能
解 説
機 能
書 式
解 説
機 能
書 式
解 説
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-22-
ADODB.Recordset の Close メソッド
開いて居るオブジェクト、及び、依存する総てのオブジェクトを閉じるメソッド
Recordset.Close( )
Recordset オブジェクトを閉じて、関連するシステムリソースを解放する。
オブジェクトを閉じてもメモリからは削除されず、プロパティ設定を変更してもう一度開く事が出来る。
メモリからオブジェクトを完全に削除するには、オブジェクト変数を Nothing に設定する(Dispose メ
ソッドがサポートされて居ないオブジェクトの開放は、Nothing を代入する事で行う)。
ADODB.Recordset の Requery メソッド
クエリを再実行して Recordset オブジェクトのデータを更新するメソッド
Recordset.Requery( 引数 )
オブジェクトの基に成るクエリ(CommandText プロパティに設定されて居るクエリ)を再
実行して Recordset オブジェクトのデータを更新する。
引数には、此の操作が作用するオプションを示すビットマスクを指定し、省略可能で有る。此のパラメータが adAsyncExecute に設定されて居る場合、此の操作は非同期で実行され、完了するとRecordsetChangeComplete イベントが発生する。 Requery メソッドを使用して、元のコマンドを再実行してデータをもう一度格納する事に依り、データソースから Recordset オブジェクトの内容全体を更新する。此のメソッドの呼出は、Close 及び Openメソッドを連続して呼び出すのと同じ有る。カレントレコードの編集中、又は、新規レコードを追加して居る時に此のメソッドを呼び出すと、エラーが発生する。 Recordset オブジェクトが開いて居る間、カーソルの属性を定義するプロパティ(CursorType、LockType、MaxRecords 等)は読み取り専用に成って居る。此の為、Requery メソッドでは、現在のカーソルしか更新する事は出来ない。カーソルのプロパティを変更して結果を参照するには、Close メソッドを使用してプロパティをもう一度読み取り/書き込み専用にする必要が有る。此の操作の後、プロパティ設定を変更して Open メソッドを呼び出し、カーソルを再度開く。
ADODB.Recordset の RecordCount プロパティ
Recordset オブジェクトに存在する現在のレコード数を示すプロパティ
Recordset.RecordCount
Recordset オブジェクトに有るレコード数を調べる為に使用する。レコード数が解ら無い場
合、又は、プロバイダやカーソルの種類が RecordCount をサポートして居ない場合は、プ
ロパティは -1 を返す。閉じて居る Recordset 上で RecordCount プロパティを読み込むと、エラーが発
生する。
猶、此のプロパティは、ADODB.ConnectionオブジェクトのCursorLocationプロパティが adUseClient
でないと、サーバー側カーソルではシミュレート出来ない為、使用する事は出来ない。
機 能
書 式
解 説
機 能
書 式
解 説
機 能
書 式
解 説
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-23-
ADODB.Recordset の Fields コレクション
Recordset オブジェクトの総ての Field オブジェクトが含まれるコレクション
Recordset オブジェクトは、Recordset 内の列に対応する Field オブジェクトで構成される
Fields コレクションを持つ。
Fields コレクションは、コレクション内のオブジェクト数(即ち、フィールドの数)を示す Count プ
ロパティが有る。コレクションのメンバ(要素)は、常に 0 から順に番号が割り当てられる為、0 から
Count プロパティより 1 小さい値迄のループを使用すると、総てのメンバにアクセスする事が出来る。
猶、Count プロパティが 0 の場合、コレクションにはオブジェクトが含まれて居ない事を意味する。
各々のメンバ(Field オブジェクト)は、下記の様に、フィールド名、又は、序数を用いて表わす事が
出来る。
フィールド名使用:Recordset.Fields( "タイトル" )
序 数 使 用:Recordset.Fields( 1 )
序数は、SELECT 文で指定したフィールドの順番(アスタリスク * で総てのフィールドを指定した場
合は、テーブルに定義されて居る順番)に割り当てられ、最初の要素は 0 で有る。 ADODB.Recordset の Field オブジェクト
共通のデータ型を持つデータの列を表すオブジェクト
Fields コレクション内の個々の Field オブジェクトを指す。
Field オブジェクトの Value プロパティを使用して、カレントレコードのデータを設定、又は、参照す
る事が出来る。但し、Field オブジェクトのコレクション、メソッド、プロパティの中には、プロバイ
ダが公開する機能に依っては使用出来ない物も有る。一般に Field オブジェクトのコレクション、メソ
ッド、プロパティを使用して、次の操作が可能で有る。 ・Name プロパティを使用して、フィールド名を参照する。
・Value プロパティを使用して、フィールド内のデータ表示や変更を行う。
・Type、Precision、NumericScale プロパティを使用して、フィールドの基本特性を参照する。
・DefinedSize プロパティを使用して、宣言したフィールドサイズを参照する。
・ActualSize プロパティを使用して、与えられたフィールド内の実際のデータサイズを参照する。
・Attributes プロパティ、Properties コレクションを使用して、指定フィールドで適用出来る機能の種類を識別する。
・AppendChunk、GetChunk メソッドを使用して、長バイナリ型や文字型データを含むフィールドの値を操作する。
猶、総てのメタデータプロパティ(Name、Type、DefinedSize、Precision、NumericScale)は、Field
オブジェクトの Recordset を開く前に利用出来る。動的にフォームを作成する場合に便利で有る。 ADODB.Recordset の EOF プロパティ
カレントレコードの位置が最後のレコードより後に有る事を示すプロパティ
Recordset.EOF
カレントレコードの位置が最後のレコードより後に有る場合は True を返し、カレントレコ
ードの位置が最後のレコード上、又は、其れ以前に有る場合は False を返す。
猶、BOF プロパティは、カレントレコードの位置が最初のレコードより前に有る場合は True を返し、
カレントレコードの位置が最初のレコード上、又は、其れ以降にある場合は False を返す。
BOF 及び EOF プロパティは、Recordset オブジェクトがレコードを含むか何うか、又は、他のレコー
ドに移動した時に Recordset オブジェクトの限界を超えて居ないか何うかを調べる為に使用する。
機 能
書 式
解 説
機 能
解 説
機 能
解 説
VB 2005 ① 【VB 2005 実用Ⅲ noa】
-24-
参考事項
■ ODBC 接続
Access ファイル同様、Excel ファイルや CSV・TSV ファイルも、ODBC(Open DataBase Connectivity)
を使用して接続する事が出来る。
猶、最初の行が列見出し(フィールド名)でない Excel ファイルや CSV・TSV ファイルでは、ODBC
ドライバのバグに依り FirstRowHasNames=0 を設定しても、最初の行は常に列見出しと看做される為
最初の行が欠落して仕舞う事に注意を要する。
■ 接続文字列の Extended Properties 属性
データソースに Access ファイルを使用する場合は、通常、此の設定は、必要無いが、Jet プロバイダは、
特に指定が無ければ、Access データベースを想定する為、Excel ファイルや CSV・TSV ファイルに接
続する場合、此の設定を省略すると、接続は正しく行われない。
最初の行が列見出し(フィールド名)でない Excel ファイルや CSV ファイルでは、既定では、最初の
行を列見出しと看做す為、最初の行が欠落して仕舞うので、此処で、Text; に続き HDR=No; を指定す
る必要が有る。此の場合、フィールドには、プロバイダに依り、F1、F2 等の名前が付けられる。
■ Microsoft Jet OLE DB 3.51 プロバイダの使用
Microsoft Jet OLE DB 3.51 プロバイダは、Jet ISAM ドライバをサポートして居ない為、実行時に『組
み込み可能な ISAM ドライバは見付かりませんでした』と謂うエラーが発生する。
■ ユーザー名とパスワード
ユーザー名やパスワードは、Excel や CSV・TSV ファイル接続には適用され無い為、無視する。猶、パ
スワードで保護された Excel ファイルはデータソースと仕て開く事は出来ない。其の為、ADO 接続で
Excel ファイルを使用する場合は、予め、パスワード保護を解除して置く必要が有る。
■ Excel に於けるレコードソースの指定
レコードソースの指定に関する記述法は、下記の通りで有る。
レコードソース 解説 記述例
ワークシート シート名の後にドル記号を付け角括弧で囲む SELECT * FROM [Sheet1$]
名前付き範囲 定義済みの名前を使用する SELECT * FROM MyRange
名前無し範囲 シート名の後に範囲を記述して角括弧で囲む SELECR * FROM [Sheet1$A1:D10]
猶、上記では、レコードソースの指定法に重点を置いて居る為、最も簡単な選択クエリを記述して居る
が、GROUP BY や WHERE を用いた選択クエリを記述する事も可能で有る。
参考:コマンドタイプに adCmdText を選択すると、コマンドテキストに選択クエリを入力する事に成
るが、コマンドタイプに adCmdTable を選択すると、Jet プロパイダを使用して居る場合は、指定のブ
ックで利用可能な名前付き範囲とワークシート名の両方が、ドロップダウンリストに表示される。但し
此の場合、ワークシート名にドル記号は正しく追加されるが、必要な角括弧は追加され無い為、手作業
で、ワークシート名を角括弧で囲む必要が有る事に注意を要する。
Top Related