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

VB実用Ⅲ③ ADOでXML操作

N/A
N/A
Protected

Academic year: 2021

シェア "VB実用Ⅲ③ ADOでXML操作"

Copied!
14
0
0

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

全文

(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 オブジェクト)

今回の重点項目

(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

上記の操作で、追加したコントロールが、ツールボックスに表示され、標準のコントロールと同じ様に 使用する事が出来る様に成る。

(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 コマンドボタン

(4)

コントロールの種類 プロパティ プロパティの設定値 コンボボックス オブジェクト名 cboTable データグリッド オブジェクト名 dgdDisp コモンダイアログ オブジェクト名 cdlFile CancelError True テキストボックス オブジェクト名 txtFieldValue Index 0~11(コントロール配列) Text 空白 コマンドボタン オブジェクト名 cmdQuery Index 0~2(コントロール配列) Caption Index 0:追加 Index 1:変更 Index 2:削除 メニュー ※ 上記の『・・・・』は、サブメニューを示すインデントで有り、 を 用いて記述する ※ 上記の『-』は、区切線を示し、ハイフン(マイナス記号)を用いて記 述する。 ※ メニューエディタを表示するには、オブジェクト画面にして、メニューバーの『ツール』より『メ ニューエディタ』をクリックして、下記のダイアログボックスを表示させる。 ※ 『メニューバー』は、フォームの『タイトルバー』の直ぐ下に表示される。メニューバーには、複 数の『メニュータイトル』を表示出来る。メニュータイトルをクリックすると、メニューがドロッ プダウンしてメニュー項目が表示される。メニュー項目には、コマンド、区分線、サブメニュータ イトル等が有り、各メニュー項目は、メニューエディタで定義されたメニューコントロールに対応 して居る。猶、斯くメニュー項目に対するイベントプロシージャを記述するには、メニュー項目を クリックする。

(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)が使用して 居るテーブルなので、除外する。

(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 形式 で保存される。 使用済のコネクションとレコード セットは、必ずクローズし、メモ リから解放して置く必要が有る。 レコードセットは、オープンする 時にコネクションを指定する事も 出来るが、此の様に予めコネクシ ョンと関連付けて置く事も可能。 此処では、選択クエリを用いずに テーブルを指定して、全データを 取り込んで居る。

(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 プロパティを設定して、関 係の無いファイルが表示されるの を制限するする。

(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

猶、名前付き引数がサポートされて居ないメソッドも有るので、名前付き引数を使用する場合は 事前にマニュアル等で調べて置く必要が有る。

(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 静的カーソル。データの検索、又は、レポートの作成に使用する為の、レ コードの静的コピーで有る。他のユーザに依る追加、変更、又は、削除は 表示されない。 機 能 書 式 解 説

(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 の種類と一致しない場合は、エラーが 発生する。

(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 オブジェクトを保存する為に必要な総ての機能をサポートして居ない場合は、 クライアントカーソルが、此の機能を提供する。

機 能

書 式

(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 メソッドが呼び出されて、総ての変更を保存してから、新規レコードを作成する。 機 能 書 式 解 説 機 能 書 式 解 説

(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 メソッドを呼 び出した場合而巳、プロバイダが共有的ロックを使用してレコードをロックする。 機 能 書 式 解 説 機 能 書 式 解 説

(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 プロパティを使って、宣言したフィールドサイズを取得する。 機 能 書 式 解 説

参照

関連したドキュメント

テストが成功しなかった場合、ダイアログボックスが表示され、 Alienware Command Center の推奨設定を確認するように求め

事前調査を行う者の要件の新設 ■

タップします。 6通知設定が「ON」になっ ているのを確認して「た めしに実行する」ボタン をタップします。.

目的 これから重機を導入して自伐型林業 を始めていく方を対象に、基本的な 重機操作から作業道を開設して行け

このように、このWの姿を捉えることを通して、「子どもが生き、自ら願いを形成し実現しよう

操作は前章と同じです。但し中継子機の ACSH は、親機では無く中継器が送信する電波を受信します。本機を 前章①の操作で

1.実態調査を通して、市民協働課からある一定の啓発があったため、 (事業報告書を提出するこ と)

「1 カ月前」「2 カ月前」「3 カ月 前」のインデックスの用紙が付けられ ていたが、3