ado でxml 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfmicrosoft...

14
VB 2005 VB 2005 実用Ⅲ noa】 -1- プログラムの概要 インターネットの普及、企業間の取引(B to Bの拡大を背景に、一対多の電子商取引に加えて、 多対多のマーケットプレイス等の動きが急進 展して居る状況に於いて、異なる情報システム 間での情報交換が円滑、且つ、容易に出来る手 段が必要とされた。其処で、其の手段と仕て、 現在、XML がインターネット上でのデータ交 換の基盤技術と仕て広く認識されて居る。 XML 文書は、テキスト形式で有る為、様々な コンピュータに於いて、テキストエディタで容 易に読み書き出来る事に加えて、各データが何を意味して居るかを理解し易いタグを自由に付ける事が 出来る事や、仕様が簡潔なので、XML 文書を操作するプログラムが容易に作成する事が出来る事等の 利点が有る。 今後益々用途が拡がると予想される XML を操作するプログラミングに馴れて置く事は、必要な事で有 る。 XML を操作するには、 DOM Document Object Module)を使用する事が多いが、此処では、 XML ファイルのテキストデータを、ADO データコントロールのレコードセットに読み取り、此の情報を、 データグリッドにデータバインディングして表示すると共に、 XML ファイルのテキストデータに対し、 追加、更新、削除を行う。 ADO XML 操作 ActiveX Data ObjectsADODB オブジェクト、DAO オブジェクト) ADODB.RecordsetCursorLocationCursorypeLockTypeレコードセットに依る XML 保存(Save メソッド、 PersistFormat 引数、 adPersistXML 定数) レコードセットに依る XML 読込(Open メソッド、Options 引数、adCmdFile 定数) レコードセットの操作(AddNew メソッド、Delete メソッド、Update メソッド) データバインディング(データグリッド、DataSource プロパティ) DAOWorkspace オブジェクト、Database オブジェクト、TableDefs オブジェクト) 今回の課題項目 レコードセットに依る XML 保存(Save メソッド、 PersistFormat 引数、 adPersistXML 定数) レコードセットに依る XML 読込(Open メソッド、Options 引数、adCmdFile 定数) レコードセットの操作(AddNew メソッド、Delete メソッド、Update メソッド) データバインディング(データグリッド、DataSource プロパティ) データバインディング(テキストボックス、DataSourceDataMember プロパティ) DAOWorkspace オブジェクト、Database オブジェクト、TableDefs オブジェクト) 今回の重点項目 VB オートメーション

Upload: others

Post on 29-Jun-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ADO でXML 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfMicrosoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX Microsoft DataGrid Control 6.0 (SPx) (OLEDB)

VB 2005 ③ 【VB 2005 実用Ⅲ noa】

-1-

プログラムの概要

インターネットの普及、企業間の取引(B to B)

の拡大を背景に、一対多の電子商取引に加えて、

多対多のマーケットプレイス等の動きが急進

展して居る状況に於いて、異なる情報システム

間での情報交換が円滑、且つ、容易に出来る手

段が必要とされた。其処で、其の手段と仕て、

現在、XML がインターネット上でのデータ交

換の基盤技術と仕て広く認識されて居る。

XML 文書は、テキスト形式で有る為、様々な

コンピュータに於いて、テキストエディタで容

易に読み書き出来る事に加えて、各データが何を意味して居るかを理解し易いタグを自由に付ける事が

出来る事や、仕様が簡潔なので、XML 文書を操作するプログラムが容易に作成する事が出来る事等の

利点が有る。

今後益々用途が拡がると予想される XML を操作するプログラミングに馴れて置く事は、必要な事で有

る。XML を操作するには、DOM(Document Object Module)を使用する事が多いが、此処では、XML

ファイルのテキストデータを、ADO データコントロールのレコードセットに読み取り、此の情報を、

データグリッドにデータバインディングして表示すると共に、XML ファイルのテキストデータに対し、

追加、更新、削除を行う。

ADO で XML 操作

□ ActiveX Data Objects(ADODB オブジェクト、DAO オブジェクト)

□ ADODB.Recordset(CursorLocation、Cursorype、LockType)

□ レコードセットに依る XML 保存(Save メソッド、PersistFormat 引数、adPersistXML 定数)

□ レコードセットに依る XML 読込(Open メソッド、Options 引数、adCmdFile 定数)

□ レコードセットの操作(AddNew メソッド、Delete メソッド、Update メソッド)

□ データバインディング(データグリッド、DataSource プロパティ)

□ DAO(Workspace オブジェクト、Database オブジェクト、TableDefs オブジェクト)

今回の課題項目

□ レコードセットに依る XML 保存(Save メソッド、PersistFormat 引数、adPersistXML 定数)

□ レコードセットに依る XML 読込(Open メソッド、Options 引数、adCmdFile 定数)

□ レコードセットの操作(AddNew メソッド、Delete メソッド、Update メソッド)

□ データバインディング(データグリッド、DataSource プロパティ)

□ データバインディング(テキストボックス、DataSource・DataMember プロパティ)

□ DAO(Workspace オブジェクト、Database オブジェクト、TableDefs オブジェクト)

今回の重点項目

VB オートメーション ③

Page 2: ADO でXML 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfMicrosoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX Microsoft DataGrid Control 6.0 (SPx) (OLEDB)

VB 2005 ③ 【VB 2005 実用Ⅲ noa】

-2-

■ 参照設定とコンポーネントの追加 ■

参照設定

此処では、XML ファイルと MDB ファイルを操作する為に ADODB を、亦、MDB ファイルよりテー

ブル情報を取得する為に DAO を使用して居るので、事前に下記の参照設定を行う必要が有る。参照設

定は、メニューバーより『プロジェクト』→『参照設定』と進み、下記のダイアログで指定する。

Microsoft ActiveX Data Objects x.x Library

Microsoft DAO x.x Objects ibrary

参照設定を行うと、事前バインディングが可能と成り、下記の様に、データ型の入力時等に、インテリ

センスが表示される様に成る。

コンポーネントの追加

亦、此処では、ファイルを指定する為に CommonDialog コントロール、亦、データをグリッド表示す

る為に DataGrid コントロールと謂うツールボックスに標準では表示され無いコントロールを使用して

居るので、事前に下記のコントロールを追加する必要が有る。コントロールの追加は、メニューバーよ

り『プロジェクト』→『コンポーネント』と進み、ダイアログで指定する。

Microsoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX

Microsoft DataGrid Control 6.0 (SPx) (OLEDB) MSDATGD.OCX

上記の操作で、追加したコントロールが、ツールボックスに表示され、標準のコントロールと同じ様に

使用する事が出来る様に成る。

Page 3: ADO でXML 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfMicrosoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX Microsoft DataGrid Control 6.0 (SPx) (OLEDB)

VB 2005 ③ 【VB 2005 実用Ⅲ noa】

-3-

■ オブジェクト・プロパティ一覧 ■

コントロールの種類 プロパティ プロパティの設定値

フォーム オブジェクト名 Form1

Caption ADO に依る XML の操作

Font MS明朝、標準、9

StartUpPosition 2 - 画面の中央

ピクチャボックス1 オブジェクト名 picXML

Appearance 0 – フラット

BackColor &H00FFFFFF(白)

ピクチャボックス2 オブジェクト名 picMDB

Appearance 0 – フラット

BackColor &H00FFFFFF(白)

ラベル1 オブジェクト名 lblDatabaseName

BackStyle 0 – 透明

Caption データベース名

ラベル2 オブジェクト名 lblTableName

BackStyle 0 – 透明

Caption テーブル名

ラベル3 オブジェクト名 lblDatabase

BackColor &H00FFFFFF(白)

BorderStyle 1 – 実線

ラベル4 オブジェクト名 lblFieldName

Appearance 1 – 右揃え

Caption 項目名

Index 0~11(コントロール配列)

ピクチャボックス1

コンボボックス

テキストボックス

データグリッド

コモンダイアログ

メニュー ピクチャボックス2

ラベル1 ラベル2 ラベル3 ラベル4

コマンドボタン

Page 4: ADO でXML 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfMicrosoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX Microsoft DataGrid Control 6.0 (SPx) (OLEDB)

VB 2005 ③ 【VB 2005 実用Ⅲ noa】

-4-

コントロールの種類 プロパティ プロパティの設定値

コンボボックス オブジェクト名 cboTable

データグリッド オブジェクト名 dgdDisp

コモンダイアログ オブジェクト名 cdlFile

CancelError True

テキストボックス オブジェクト名 txtFieldValue

Index 0~11(コントロール配列)

Text 空白

コマンドボタン オブジェクト名 cmdQuery

Index 0~2(コントロール配列)

Caption Index 0:追加

Index 1:変更

Index 2:削除

メニュー

※ 上記の『・・・・』は、サブメニューを示すインデントで有り、 を

用いて記述する

※ 上記の『-』は、区切線を示し、ハイフン(マイナス記号)を用いて記

述する。

※ メニューエディタを表示するには、オブジェクト画面にして、メニューバーの『ツール』より『メ

ニューエディタ』をクリックして、下記のダイアログボックスを表示させる。

※ 『メニューバー』は、フォームの『タイトルバー』の直ぐ下に表示される。メニューバーには、複

数の『メニュータイトル』を表示出来る。メニュータイトルをクリックすると、メニューがドロッ

プダウンしてメニュー項目が表示される。メニュー項目には、コマンド、区分線、サブメニュータ

イトル等が有り、各メニュー項目は、メニューエディタで定義されたメニューコントロールに対応

して居る。猶、斯くメニュー項目に対するイベントプロシージャを記述するには、メニュー項目を

クリックする。

Page 5: ADO でXML 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfMicrosoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX Microsoft DataGrid Control 6.0 (SPx) (OLEDB)

VB 2005 ③ 【VB 2005 実用Ⅲ noa】

-5-

■ プログラムリスト ■ Option Explicit Private FileMDB As String Private FileXML As String Private FldNum As Integer Private RsXML As ADODB.Recordset ' フォームが読み込まれた時の処理 Private Sub Form_Load( ) ' レコードセットの設定 Set RsXML = New ADODB.Recordset RsXML.CursorLocation = adUseClient RsXML.CursorType = adOpenKeyset RsXML.LockType = adLockOptimistic End Sub ' フォームが閉じられ様と仕た時の処理 Private Sub Form_QueryUnload( Cancel As Integer, UnloadMode As Integer ) If RsXML.State = adStateOpen Then RsXML.Close Set RsXML = Nothing End Sub ' メニュー(MDB ファイルの読込)がクリックされた時の処理 Private Sub mnuFileMDB_Click( ) ' テーブル名の取得には DAO を使用(参考:VB実用Ⅰ-①) Dim WS As Workspace Dim DB As Database Dim TD As TableDef ' 読込ファイル名の設定 cdlFile.InitDir = App.Path cdlFile.DialogTitle = "読込 MDB ファイルの指定" cdlFile.Filter = "Access ファイル(*.mdb)|*.mdb|総てのファイル(*.*)|*.*" On Error Resume Next cdlFile.ShowOpen If Not Err.Number = 0 Then Exit Sub FileMDB = cdlFile.FileName ' データベース名の表示 lblDatabase.Caption = cdlFile.FileTitle ' テーブル名の取得 cboTable.Clear Set WS = DBEngine.Workspaces( 0 ) Set DB = WS.OpenDatabase( FileMDB ) For Each TD In DB.TableDefs If Not TD.Name Like "MSys*" Then cboTable.AddItem TD.Name End If Next If Not cboTable.ListCount < 1 Then cboTable.ListIndex = 0 End If ' 後始末 DB.Close: WS.Close Set TD = Nothing: Set DB = Nothing: Set WS = Nothing End Sub

此処で宣言した変数の有効期間は

宣言された時点から、プログラム

の終了迄で有る。

此処で宣言した変数の有効期間は

宣言された時点から、プロシージ

ャの終了迄で有る。

XML ファイルを読み込む為には

ADODB のレコードセットが有れ

ば良く、コネクションは必要無い。

Filter プロパティを設定して、関

係の無いファイルが表示されるの

を制限するする。

FileName プロパティがプルパス

で有るのに対し、FileTitle プロパ

ティは、ファイル名丈を返す。

使用済のデータベースとワークス

ペースは、必ずクローズし、メモ

リから解放して置く必要が有る。

TableDefs コレクションには、デ

ータベースに含まれる総てのテー

ブルの情報が格納されて居る。

頭に Msys が付くテーブルは、シ

ステム(MS Access)が使用して

居るテーブルなので、除外する。

Page 6: ADO でXML 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfMicrosoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX Microsoft DataGrid Control 6.0 (SPx) (OLEDB)

VB 2005 ③ 【VB 2005 実用Ⅲ noa】

-6-

' メニュー(XML ファイルの作成)がクリックされた時の処理 Private Sub mnuFileMake_Click( ) ' MDB からの読込、XML への書込には ADO を使用 Dim Cn As ADODB.Connection Dim Rs As ADODB.Recordset Dim T As String ' 対象テーブル名の取得 If cboTable.ListIndex < 0 Then Exit Sub Else T = cboTable.List( cboTable.ListIndex ) End If ' 保存ファイル名の設定 cdlFile.DialogTitle = "保存 XML ファイルの指定" cdlFile.Filter = "XML ファイル(*.xml)|*.xml|総てのファイル(*.*)|*.*" cdlFile.FileName = "*.xml" cdlFile.DefaultExt = "xml" On Error Resume Next cdlFile.ShowSave If Not Err.Number = 0 Then Exit Sub FileXML = cdlFile.FileName ' コネクションの確立 Set Cn = New ADODB.Connection Cn.CursorLocation = adUseClient Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileMDB & _ ";Persist Security Info=False" On Error Resume Next Cn.Open If Not Err.Number = 0 Then MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "エラー" Exit Sub End If ' レコードセットの設定 Set Rs = New ADODB.Recordset Rs.CursorLocation = adUseClient Rs.CursorType = adOpenStatic Set Rs.ActiveConnection = Cn ' レコードセットに本テーブルの内容を読込と保存 On Error Resume Next Rs.Open T If Not Err.Number = 0 Then MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "エラー" Exit Sub End If ' レコードセットの内容を XML 形式で保存 Rs.Save FileXML, adPersistXML ' メッセージの表示 MsgBox "保存しました。", vbInformation, "保存終了" ' 後始末 Rs.Close: Cn.Close Set Rs = Nothing: Set Cn = Nothing End Sub

此処で宣言した変数は宣言したサ

ブプロシージャ内でしか値の参照

と設定を行う事が出来ない。

Filter プロパティを設定して、関

係の無いファイルが表示されるの

を制限するする。

DefaultExt プロパティを設定し

て置くと、拡張子を省略した場合

に、設定した拡張子が自動的に付

加される。

Save メソッドの第2引数に

adPersistXML を指定すると、レ

コードセットの内容が XML 形式

で保存される。

使用済のコネクションとレコード

セットは、必ずクローズし、メモ

リから解放して置く必要が有る。

レコードセットは、オープンする

時にコネクションを指定する事も

出来るが、此の様に予めコネクシ

ョンと関連付けて置く事も可能。

此処では、選択クエリを用いずに

テーブルを指定して、全データを

取り込んで居る。

Page 7: ADO でXML 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfMicrosoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX Microsoft DataGrid Control 6.0 (SPx) (OLEDB)

VB 2005 ③ 【VB 2005 実用Ⅲ noa】

-7-

' メニュー(XML ファイルの読込)がクリックされた時の処理 Private Sub mnuFileOpen_Click( ) ' XML からの読込には ADO を使用 ' 読込ファイル名の設定 cdlFile.DialogTitle = "読込 XML ファイルの指定" cdlFile.Filter = "XML ファイル(*.xml)|*.xml|総てのファイル(*.*)|*.*" On Error Resume Next cdlFile.ShowOpen If Not Err.Number = 0 Then Exit Sub FileXML = cdlFile.FileName ' レコードセットのオープン If RsXML.State = adStateOpen Then RsXML.Close RsXML.Open FileXML, Options:=adCmdFile ' データグリッドに表示 Set dgdDisp.DataSource = RsXML ' フィールド数の取得 FldNum = RsXML.Fields.Count If FldNum > 12 Then FldNum = 12 picXML.Enabled = True End Sub ' データグリッド(表示)がクリックされた時の処理 Private Sub dgdDisp_Click( ) Dim I As Integer ' レコードデータの表示 For I = 0 To ( FldNum – 1 ) lblFieldName( I ).Caption = RsXML.Fields( I ).Name & "" txtFieldValue( I ).Text = RsXML.Fields( I ).Value & "" Next I For I = FldNum To 11 lblFieldName( I ).Caption = "" txtFieldValue( I ).Text = "" Next I End Sub ' コマンドボタン(クエリ)がクリックされた時の処理 Private Sub cmdQuery_Click( Index As Integer ) ' XML への操作には ADO を使用 Dim I As Integer Dim S As String Select Case Index ' 追加 Case 0 ' 新しいレコードセットの追加 RsXML.AddNew ' フィールド値の設定 For I = 0 To ( FldNum – 1 ) RsXML.Fields( I ).Value = txtFieldValue( I ).Text Next I S = "追加"

Options を adCmdFile に設定す

ると、ADO は、データベースの代

わりに通常のファイルからデータ

を取り出す物と認識する。

レコードセットが開いて居る時に

再度オープンすると、エラーが発

生するので、一旦閉じる。

レコードセット内の総てのフィー

ルド値を、テキストボックスの値

で書き換えて居る。

AddNew メソッドは、レコードセ

ットに更新可能な新規レコードを

作成するメソッドで有る。

此処では、フィールド値を表示す

るテキストボックスが 12 個しか

用意して居ない為、フィールドの

最大個数を 12 に限定して居る。

データグリッドの最左列をクリッ

クすると、レコードセット内のカ

レントレコードが移動する。

レコードセット内のカレントレコ

ードの値を、テキストボックスと

ラベルに表示して居る。

此処で宣言した変数は宣言したサ

ブプロシージャ内でしか値の参照

と設定を行う事が出来ない。

Filter プロパティを設定して、関

係の無いファイルが表示されるの

を制限するする。

Page 8: ADO でXML 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfMicrosoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX Microsoft DataGrid Control 6.0 (SPx) (OLEDB)

VB 2005 ③ 【VB 2005 実用Ⅲ noa】

-8-

' 変更 Case 1 ' フィールド値の設定 For I = 0 To ( FldNum – 1 ) RsXML.Fields( I ).Value = txtFieldValue( I ).Text Next I S = "変更" ' 削除 Case 2 RsXML.Delete adAffectCurrent S = "削除" End Select ' メッセージの表示 MsgBox S & "しました。", vbInformation, S & "終了" ' レコードセットの内容を XML 形式で保存 RsXML.Update RsXML.Save FileXML, adPersistXML End Sub ' メニュー(終了)がクリックされた時の処理 Private Sub mnuFileFinish_Click( ) Unload Me End End Sub

レコードの追加・変更・削除を行

えば Update メソッドを呼び出し

て更新する必要が有る。

直接 XML ファイルを編集する事

は出来ない為、レコードセットの

内容で上書き保存する。

adAffectCurrent は、既定の引数

なので省略しても良いが、明記し

て置く事が望ましい。

レコードセット内の総てのフィー

ルド値を、テキストボックスの値

で書き換えて居る。

作業が終了すれば、其の旨を通知

するメッセージを表示して、誤操

作を防ぐ様にする事が望ましい。

名前付き引数の指定

Visual Basic では、多くの組み込み関数、ステートメント、及び、メソッドで引数を指定する時

に名前付き引数を使用する事が出来る。名前付き引数を使うと、構文で決められた引数の順序に

関係無く、任意の順序で、必要な引数丈を指定する事が出来る。名前付き引数に値を代入するに

は引数名、コロンの後に等号( := )と値を、Options := adCmdFile の様に記述する。各引数指

定の間はカンマで区切り、指定する順序は自由で有る。

例えば、ADODB.Recordset オブジェクトの Open メソッドの構文は、下記の通りで有る。

recordset.Open Source, ActiveConnection, CursorType, LockType, Options

此れを、名前付き引数を使用せずに記述すると、下記の様に、一部の引数を省略する場合でも、

引数の順序を変えない為に、区切りのカンマを記述する必要が有る。。

RsXML.Open FileXML, , , , adCmdFile

併し、名前付き引数を使用して記述すると、下記の様に、区切りのカンマを含めて、不要な引数

を省略する事が出来る。

RsXML.Open FileXML, Options:=adCmdFile

猶、名前付き引数がサポートされて居ないメソッドも有るので、名前付き引数を使用する場合は

事前にマニュアル等で調べて置く必要が有る。

Page 9: ADO でXML 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfMicrosoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX Microsoft DataGrid Control 6.0 (SPx) (OLEDB)

VB 2005 ③ 【VB 2005 実用Ⅲ noa】

-9-

ADODB.Recordset の Open メソッド

カーソルを開くメソッド

Object.Open Source, ActiveConnection, CursorType, LockType, Options

ベーステーブルからのレコード、クエリ結果、又は、以前に保存された Recordset を表すカ

ーソルを開く。

Recordset オブジェクトのプロパティに直接対応する引数(Source、CursorType、LockType…此等は

予め別個に設定して置く事も出来る)と、プロパティの関係は、下記の通りで有る。

・Recordset オブジェクトを開く前のプロパティは、読み取り/書き込み可能で有る。

・Open メソッドの実行中に対応する引数が引き渡されない限り、プロパティの設定値が使用される。

引数を引き渡すと、プロパティ設定が上書きされて引数の値に更新される。

・Recordset を開いた後は、プロパティは読み取り専用に成る。

Source 引数には、Command オブジェクト変数、SQL ステートメント、ストアドプロシージャ、テー

ブル名、又は、ファイルのフルパス名の孰れかをデータソースとして指定する。Source がファイルのパ

ス名で有る場合は、下記の孰れかで指定する事が出来る。

フルパス 例:"c:¥temp¥data.mdb"

相対パス 例:"..¥data.mdb"

URL 例:"http://files/data.xml"

ActiveConnection 引数は、ActiveConnection プロパティに対応し、Recordset オブジェクトを開く接

続を指定する(省略可能:データソースが XML ファイルの場合は、不要なので、省略する)。

※ Source 引数で Command オブジェクトを引き渡し、同時に ActiveConnection 引数を引き渡すと、

エラーが発生する。Command オブジェクトの ActiveConnection プロパティは、予め有効な

Connection オブジェクト、又は、接続文字列に設定する必要が有る。

CursorType 引数には、Recordset を開く際にプロバイダが使用するカーソルタイプを決める為の定数

を CursorTypeEnum 値で指定する(省略可能)。

定数 説明

adOpenForwardOnly 前方スクロールタイプカーソル。レコードを前方向而巳にスクロール出来

る事を除き、静的カーソルと同じ属性を持つ。レコードセットを一度丈ス

クロールする必要が有る場合は、此のカーソルに依り性能を向上させる事

が出来る(既定値)。

adOpenKeyset キーセットカーソル。動的カーソルと同じ様な属性を持つが、他のユーザ

が追加したレコードを表示せず、使用中のレコードセットから他のユーザ

が削除したレコードへのアクセスを許可しない。猶、他のユーザが変更し

たデータを表示する事は出来る。

adOpenDynamic 動的カーソル。他のユーザに依る追加、変更、及び、削除を観る事が出来

プロバイダがサポートしないブックマークを除いて、レコードセットで許

容されて居る総ての種類の移動を行う事が出来る。

adOpenStatic 静的カーソル。データの検索、又は、レポートの作成に使用する為の、レ

コードの静的コピーで有る。他のユーザに依る追加、変更、又は、削除は

表示されない。

機 能

書 式

解 説

Page 10: ADO でXML 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfMicrosoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX Microsoft DataGrid Control 6.0 (SPx) (OLEDB)

VB 2005 ③ 【VB 2005 実用Ⅲ noa】

-10-

LockType 引数には、Recordset を開く際にプロバイダが使うロック(同時実行制御)の種類を決める

為の定数を LockTypeEnum 値で指定する(省略可能)。

定数 説明

adLockReadOnly 読み取り専用。データの変更は出来ない(既定値)。

adLockPessimistic レコード毎の排他的ロック。通常、編集の際にプロバイダがデータソース

でレコードをロックする事に依り、確実にレコードを編集出来る為に必要

な最小限のロックを使用する。

adLockOptimistic レコード毎の共有的ロック。Update メソッドを呼び出した場合而巳、プ

ロバイダが共有的ロックを使用してレコードをロックする。

adLockBatchOptimistic 共有的バッチ更新。即時更新モードに対して、バッチ更新モードの場合に

必要で有る。

Options 引数には、Source 引数が Command オブジェクト以外の設定値を表す場合、又は、以前に保

存して居たファイルから Recordset を復元する場合に、プロバイダが引数を評価する方法を示す為の値

を下記の定数で指定する(省略可能:データソースが XML ファイルの場合は、adCmdFile を指定)。

定数 説明

adCmdText プロバイダがSourceをコマンド文字列に依る定義と仕て評価する事を

指定する。

adCmdTable ADO が Source に名前を付けられたテーブルから総ての行を返す SQL

クエリを生成する事を指定する。

adCmdTableDirect プロバイダがSourceに名前を付けられたテーブルから総ての行を返す

事を指定する。

adCmdStoredProc プロバイダがSourceをストアドプロシージャと仕て評価する事を指定

する。

adCmdUnknown Source 引数に指定されたコマンドタイプが不明で有る事を指定する。

adCmdFile Source 引数に指名されたファイルから永続化(保存)された Recordset

を復元する事を指定する。

adAsyncExecute Source 引数を非同期実行する事を指定する。

adAsyncFetch InitialFetchSize プロパティに指定された初期量の残りの行を非同期

でフェッチする事を指定する。フェッチされた事が無い行が要求され

た場合は、要求された行が利用可能に成る迄は、メインスレッドはブ

ロックされる。

adAsyncFetchNonBlocking フェッチ中にブロックされた事の無いメインスレッドを指定する。要

求された行がフェッチされた事の無い場合は、現在の行が自動的にフ

ァイルの最後に移動する。

※ Source 引数で Command オブジェクト以外の値を引き渡す場合は、Options 引数を使用して Source

引数の評価を最適化する事が出来る。Options 引数が定義されて居ない場合は、パフォーマンスが低

下する可能性が有る。此れは、引数が SQL ステートメント、ストアドプロシージャ、テーブル名、

ファイル名の孰れで有るかを判断する為に、プロバイダを呼び出す必要が有るからで有る。指定す

る Source の種類が予め判明して居る場合は、Options 引数を設定する事に依り、該当するコードに

直接ジャンプさせる事が出来る。猶、Options 引数が Source の種類と一致しない場合は、エラーが

発生する。

Page 11: ADO でXML 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfMicrosoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX Microsoft DataGrid Control 6.0 (SPx) (OLEDB)

VB 2005 ③ 【VB 2005 実用Ⅲ noa】

-11-

ADODB.Recordset の Save メソッド

Recordset をファイルに永続化(保存)するメソッド

Object.Save FileName, PersistFormat

レコードセットの内容を指定したファイルの保存する。

FileName には、Recordset が保存されるファイルのフルパス名を指定する。

PersistFormat には、Recordset が保存される形式を指定する定数を PersistFormatEnum 値で指定す

る(省略可能)。

定数 説明

adPersistADTG 適切な Advanced Data Tablegram 形式で保存(既定値)。

adPersistXML XML 形式で保存。

Save メソッドは開いて居る Recordset で而巳、呼び出す事が出来る。亦、保存後、Open メソッドを使

用して、FileName から Recordset を復元する事が出来る。

Filter プロパティが Recordset に対して有効で有る場合、フィルタでアクセス出来る行(レコード)而

巳が保存される。Recordset が階層型の場合、カレントで有る子レコードセットと、其の子レコードセ

ットが保存されるが、親レコードセットは保存されない。

Recordset を初めて保存する時には、FileName を指定するが、続いて Save を呼び出す場合、FileName

を省略しなければ、実行時エラーが発生する。亦、続いて新たに FileName を使用して Save を呼び出

す場合、Recordset は新規ファイルに保存される。併し、此の新規ファイルと元のファイルは両方開い

て居る。

Save は、Recordset や FileName を閉じない。従って、Recordset を使用した作業を継続して、最新の

変更を保存する事が出来る。FileName は、Recordset が閉じる迄、開いた儘で有り、此の間、他のア

プリケーションは、FileName に対して読み込みは行えるが、書き込みは出来ない。

セキュリティ上の理由に依り、Save メソッドは、Microsoft Internet Explorer で実行されるスクリプ

トからは、低レベルとカスタムのセキュリティ設定の使用而巳が許可される。セキュリティの問題の詳

細に付いては、下記のサイトを参照され度い。

Security Issues in the Microsoft Internet Explorer:http://www.microsoft.com/data/techmat.htm

Save メソッドが、非同期の Recordset のフェッチ、実行、又は、更新操作の進行中に呼び出された場

合、Save は非同期操作が完了する迄、待機する。

Save メソッドが終了すれば、カレント行の位置は Recordset の最初の行に成る。

最良の結果を得る為に、Saveで、CursorLocationプロパティを adUseClientに設定する事を推奨する。

プロバイダが、Recordset オブジェクトを保存する為に必要な総ての機能をサポートして居ない場合は、

クライアントカーソルが、此の機能を提供する。

機 能

書 式

解 説

Page 12: ADO でXML 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfMicrosoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX Microsoft DataGrid Control 6.0 (SPx) (OLEDB)

VB 2005 ③ 【VB 2005 実用Ⅲ noa】

-12-

ADODB.Recordset の Update メソッド

カレントレコードへの変更内容を保存するメソッド

Object.Update Fields, Values

AddNew メソッドの呼び出し以後、又は、既存のレコードのフィールド値の変更後に行われ

るカレントレコードへの変更内容を保存する。

Fields 引数には、単一の名前を表す値、又は、変更するフィールドの名前や位置を表す配列を指定する

(省略可能)。

Values 引数には、単一の値を表す値、又は、新規レコードのフィールド値を表す配列を指定する(省略

可能)。

Update メソッドを呼び出した後も、カレントレコードはカレントと仕て維持される。

Update メソッドを呼び出す前に追加や編集中のレコードから移動した場合、ADO は Update を自動的

に呼び出して変更を保存するので、カレントレコードへの変更をキャンセルする場合や新たに追加した

レコードを破棄する場合は、CancelUpdate メソッドを呼び出す必要が有る。

ADODB.Recordset の AddNew メソッド

更新可能な新規レコードを作成するメソッド

Object.AddNew FieldList, Values

レコードセットに新規レコードを作成し、初期化する。

FieldList 引数には、単一の名前、又は、新規レコードのフィールドの名前か位置を表す配列を指定す

る(省略可能)。

Values 引数には、新規レコードのフィールドの単一の値か値の配列を指定する。Fields 引数が配列の

場合、Values 引数も同じメンバ数の配列にする必要が有る。其れ以外の場合は、エラーが発生する。亦

各配列では、フィールド名の順番をフィールド値の順番に一致させる必要が有る。

現在のレコードセットにレコードを追加出来るか何うかは、Supports メソッドの adAddNew を使用し

て確認する事が出来る。

ブール型変数 = Object.Supports( adAddNew ) ' サポートして居る場合は True を返す。

亦、adDelete でレコードを削除出来るか何うか、adUpdate で既存のデータを変更出来るか何うか等を

確認する事が出来る。

AddNew メソッドを呼び出した後は、新規レコードがカレントレコードに成り、Update メソッドを呼

び出した後も其の儘カレントレコードに成る。

カレントレコードの編集中、又は、新規レコードの追加中に、AddNew メソッドを呼び出すと、Update

メソッドが呼び出されて、総ての変更を保存してから、新規レコードを作成する。

機 能

書 式

解 説

機 能

書 式

解 説

Page 13: ADO でXML 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfMicrosoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX Microsoft DataGrid Control 6.0 (SPx) (OLEDB)

VB 2005 ③ 【VB 2005 実用Ⅲ noa】

-13-

ADODB.Recordset の Delete メソッド

カレントレコード、又は、レコードのグループを削除するメソッド

Object.Delete AffectRecords

レコードセットのカレントレコード、又は、レコードのグループに削除の為のマークが付け

られる。実際に削除される時期は、更新モードに依り異なる。

AffectRecords引数には、Deleteメソッドに依り影響を受けるレコードの数を決める定数をAffectEnum

値で指定する。

定数 説明

adAffectCurrent カレントレコード而巳を削除(既定値)。

adAffectGroup 現在の Filter プロパティを満たすレコードを削除。此のオプションを使用す

るには Filter プロパティを有効な定義済みの定数の孰れかに設定する必要が

有る。

adAffectAllChapters 総てのチャプタレコードを削除。

即時更新モードでは、直ぐにデータベースで削除が行われるが、其れ以外のモードでは、キャッシュか

ら削除するレコードがマークされ、UpdateBatch メソッドを呼び出した時に(UpdateBatch メソッド

を呼び出すと、変更を一括してプロバイダに転送する前に、Update メソッドが自動的に呼び出されて

カレントレコードに対する未処理の変更が総て保存される)、実際に削除される。削除されたレコード

を参照するには、Filter プロパティを使用する。猶、レコードセットでレコードの削除が使用出来ない

場合は、エラーが発生する

削除されたレコードからフィールド値を取得すると、エラーが発生する。削除したカレントレコードは

別のレコードに移動する迄、其の儘カレントレコードに成る。削除レコードから移動すると、其のレコ

ードにアクセス出来なく成る。

ADODB.Recordset の LockType プロパティ

編集中にレコードに適用されたロックの種類を設定・取得するプロパティ

Object.LockType = 定数

レコードセットを開く前に、プロバイダがレコードセットを開く時に使用するロックの種類

を指定する。設定値の取得も可能で有る。

定数には、下記の定数値を LockTypeEnum 値で設定する。

定数 説明

adLockReadOnly 読み取り専用(既定値)

adLockPessimistic レコード毎の排他的ロック

adLockOptimistic レコード毎の共有的ロック

adLockBatchOptimistic 共有的バッチ更新

adLockReadOnly では、データの更新は出来ない。亦、adLockOptimistic では、Update メソッドを呼

び出した場合而巳、プロバイダが共有的ロックを使用してレコードをロックする。

機 能

書 式

解 説

機 能

書 式

解 説

Page 14: ADO でXML 操作 - xdomainjunko036.html.xdomain.jp › pdf › automation › vb08.pdfMicrosoft Common Dialog Control 6.0 (SPx) COMDLG32.OCX Microsoft DataGrid Control 6.0 (SPx) (OLEDB)

VB 2005 ③ 【VB 2005 実用Ⅲ noa】

-14-

ADODB.Recordset の State プロパティ

オブジェクトの状態を取得するプロパティ

値 = Object.State

非同期メソッドを実行して居る Recordset オブジェクトに、現在のオブジェクトの状態が接

続中、実行中、又は、フェッチ中の孰れで有るかを示す。

戻り値には、下記の孰れかの長整数型の値を返す。

定数 説明

adStateClosed オブジェクトが閉じて居る事を示す(既定値)。

adStateOpen オブジェクトが開いて居る事を示す。

adStateConnecting オブジェクトが接続中で有る事を示す。

adStateExecuting オブジェクトがコマンド実行中で有る事を示す。

adStateFetching オブジェクトの行がフェッチ中で有る事を示す。

State プロパティを使用して、オブジェクトの現在の状態を何時でも調べる事が出来る。猶、此のプロ

パティは読み取り専用で、値を設定する事は出来ない。

Recordset オブジェクトの State プロパティは、値を組み合わせて持つ事が出来る。例えば、ステート

メントが実行中で有る場合、プロパティの値は、adStateOpen と adStateExecuting の組み合わせに成

る。

ADODB.Recordset の Fields コレクション

Recordset オブジェクトは、Field オブジェクトで構成される Fields コレクションを持つ。各 Field オ

ブジェクトは、Recordset 内の列に対応する。

Fields コレクションには、内包する Field オブジェクトの個数を示す Count プロパティが有る。Count

プロパティが 0 の場合は、コレクションには、オブジェクトが含まれて居ない事を意味する。

コレクションのメンバは、0 から順に番号が割り当てられる為、ループを使用する場合は、常に 0 から

始めて、Count プロパティより 1 小さい値で終わらせる必要が有る。猶、ループ内で Count プロパテ

ィをチェックせずにコレクションのメンバを指定するには、For Each...Next 構文を使用する。

亦、Field オブジェクトは、共通のデータ型を持つデータの列を表し、メソッドやプロパティを使用し

て、下記の操作等を行う事が出来る。

・Name プロパティを使ってフィールド名を取得する。

・Value プロパティを使ってフィールド内のデータ表示や変更を行う。

・Type、Precision、NumericScale プロパティを使って、フィールドの基本特性を取得する。

・DefinedSize プロパティを使って、宣言したフィールドサイズを取得する。

機 能

書 式

解 説