ADO でファイル操作 -...

24
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 ObjectsADODB オブジェクト、参照設定) ADODC に依る接続(プロパティページの利用、ConnectionString接続文字列の設定(ProviderData SourceExtended Propertiesレコードソースの指定(RecordSourceSQL 選択クエリ、範囲指定) データバインディング(データグリッド、DataSource プロパティ) データバインディング(テキストボックス、DataSourceDataMember プロパティ) SQL 構文(SELECT 構文、WHERE 句、ORDER BY 句) 今回の課題項目 接続文字列の設定(Extended Propertiesレコードソースの指定(範囲指定、[Sheet1$]データバインディング(データグリッド、DataSource プロパティ) データバインディング(テキストボックス、DataSourceDataMember プロパティ) SQL 構文(SELECT 構文、WHERE 句、ORDER BY 句) 今回の重点項目 VB オートメーション

Transcript of ADO でファイル操作 -...

Page 1: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 オートメーション ①

Page 2: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 は、バージョンを示す)。

Page 3: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 個)

Page 4: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 のシート名がテーブル名と

仕て扱われる。

此処では、データソースにサーク

ル名簿と謂うエクセルシートを指

定して居る。

選択クエリを指定し、コネクショ

ンを通じてレコードセットを開く

と、データが取得される。

プログラム末尾で定義して居るメ

ソッド(ジェネラルプロシージャ)

を呼び出して居る。

Page 5: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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(統合開発環境)で而巳表示

され、コンパイル済みのプログラムでは表示されない。

開発時の対処法と仕ては、エラーメッセージが表示されると、一旦

プログラムを終了し、再度実行すると良い。

Page 6: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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)

Page 7: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 ファイル名を指定

する。

.¥ は、相対パスを指定する記述法

で、カレントディレクトリを意味

する。

Page 8: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 ファイル名を指定

する。

Page 9: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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

Page 10: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 と謂う名前を付けて格納

して居る。

Page 11: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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

Page 12: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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

Page 13: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 には、カレントレコードと謂う概念は無い。其の為、レコードを移動する為のメソッドも無

い。データセットに保持されたデータは、行のコレクションと仕て扱われ、各レコードは、配列の要素

番号を使用して識別する。

Page 14: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

VB 2005 ① 【VB 2005 実用Ⅲ noa】

-14-

■ 接続方法

ADO ADO では、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

を取得し、更新する事も可能で有るが、実際には、データの転送時以外は、データベースに接続して居

る必要が無い場合が多い。亦、データベースへの接続を維持する事で、システムリソースを消費し、パ

フォーマンスが低下すると謂う負の側面も有る。

ADO.NET ADO.NET では、データセットに依り、データベースと粗同じ物をメモリ上に保持する事が出来るので

データベースに接続する必要が有るのは、データセットにデータを取得する時と、データセットで変更

した内容をデータベースに転送する時丈で有る。其れ以外の時はデータベースの接続を解除し、データ

セットを利用してデータベース操作を行う。

■ ADO と ADO.NET の使い分け

新規にアプリケーションを開発する時は、ADO.NET を利用すると、豊富なツールを利用して、効率良

くアプリケーションを開発する事が出来る。ADO.NET では、データベースと常時接続する必要が無い

為、システムの負荷を軽減する事が出来る。併し、非接続型故に、大量のレコードの即時更新や、常に

最新の情報が必要な場合には、不適格で有り、此の様な場合は、常時接続型の ADO を利用すると良

い。.NET Framework でも、ADO は、サポートされて居る。

データベース

フォーム

フォーム

データセット

データベース

データアダプタ

コネクション

Page 15: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 を代入する事で行う)。

機 能

解 説

機 能

書 式

解 説

機 能

書 式

解 説

機 能

書 式

解 説

Page 16: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 等を中継して、データソースへのアクセス、及び、

更新を行う事を目的とするオブジェクトを謂う。

機 能

書 式

解 説

Page 17: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 に設定されて居る。

Page 18: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 がコマンド実行中に使用する実際のコ

マンド文字列の参照も可能で有る。

機 能

書 式

解 説

Page 19: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 に而巳設定する事が出来る。

機 能

書 式

解 説

Page 20: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 文字列で有る。

機 能

書 式

解 説

機 能

書 式

解 説

Page 21: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 オブジェクトを生成するコマンド

をプロバイダが再度実行する可能性が有る。

機 能

解 説

機 能

書 式

解 説

機 能

書 式

解 説

Page 22: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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

でないと、サーバー側カーソルではシミュレート出来ない為、使用する事は出来ない。

機 能

書 式

解 説

機 能

書 式

解 説

機 能

書 式

解 説

Page 23: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 オブジェクトの限界を超えて居ないか何うかを調べる為に使用する。

機 能

書 式

解 説

機 能

解 説

機 能

解 説

Page 24: ADO でファイル操作 - xdomainjunko036.html.xdomain.jp/pdf/automation/vb01.pdf型のADO(ADODB)も使用する事が出来、選択肢が増えた。リアルタイム処理を行う接続型は、デー

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 プロパイダを使用して居る場合は、指定のブ

ックで利用可能な名前付き範囲とワークシート名の両方が、ドロップダウンリストに表示される。但し

此の場合、ワークシート名にドル記号は正しく追加されるが、必要な角括弧は追加され無い為、手作業

で、ワークシート名を角括弧で囲む必要が有る事に注意を要する。