VB実用Ⅲ③ ADOでXML操作

Similar documents
データベース1

データベース1

データベースⅠ

C# bit 環境用 C# 2005 基礎 Ⅱ 電脳梁山泊烏賊塾 データベース操作プログラム Ⅰ C# プログラムの概要 データベースプログラムを手軽に作成する方法としては Access のフォーム機能を用いる事が 先ず考えられます ウィザードも充実しており 操作を覚

データベースⅡ

VB.NET解説

データベースⅡ

DAOの利用

データアダプタ概要

データベース1

目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst, MoveNext, MovePrevious, MoveLast)...

データベースⅠ

VB実用⑦ エクセル操作Ⅰ

VB実用Ⅲ⑩ フリーデータベースⅡ

万年暦プログラム

MS Office オートメーション

VB.NET解説

VB実用Ⅲ⑩ フリーデータベースⅡ

Userコントロール

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

ルーレットプログラム

データベースⅢ

回文作成支援プログラム

XMLプログラミング(ADO編)

ファイル操作

Microsoft Office操作(EXCEL)

正規表現応用

回文作成支援プログラム

ファイル操作-バイナリファイル

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが

相性占いプログラム

mySQLの利用

ブロック崩し風テニス

ICONファイルフォーマット

データベースプログラミング

ADOとADO.NET

相性占いプログラム

グラフィックス

データベースⅢ

VB実用③ アクセス操作Ⅰ

ファイル操作-インターネットキャッシュ

64bit環境で32bitコンポーネントの利用

VB実用Ⅲ① ADOでファイル操作

構造体

通信対戦プログラム

ブロック パニック

プラグイン


VB実用⑯ 印刷Ⅵ(Excel)

PowerPoint プレゼンテーション

VB6互換のファイルの処理

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

プレポスト【問題】

VB実用Ⅲ② オフィスオートメーションⅠ

NotifyIconコントロール

3D回転体プログラム


sinfI2005_VBA.doc

インベーダープログラム

チャットプログラム

Microsoft Office操作


Base によるアプリケーション開発とサポート 鎌滝雅久 /OpenOffice.org 日本ユーザー会 OSC2007 Hokkaido 2007 年 6 月 30 日土曜日 10:55-11:40 北海道大学学術交流会館第 4 会議室

MS Office オートメーション

プロセス間通信

占領双六ゲーム

Prog2_15th

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

モグラ叩きプログラム

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

OTRS10 他社システムOTRS呼出利用手順書

万年暦プログラム

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

VB実用① データベースⅠ

ファイル監視

回文作成支援プログラム

XML(DOMガイド)

グラフィックス 目次

Microsoft Word - VBA基礎(6).docx

PowerPoint プレゼンテーション

データベースアクセス

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの

3D回転体プログラム

VB実用⑧ エクセル操作Ⅱ

ハッシュテーブル

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee

TableAdapterクラス

C 資料 電脳梁山泊烏賊塾 ファイルの入出力 C++ のバイナリファイル入出力 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する

GUIプログラムⅡ

PowerPoint プレゼンテーション

C 資料 電脳梁山泊烏賊塾 構造体 C++ の構造体 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 定義と変数宣言 C++ に

スクールCOBOL2002

回文作成支援プログラム

テキストファイルの入出力1

生存確認調査ツール

Prog2_12th

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成

データの作成方法のイメージ ( キーワードで結合の場合 ) 地図太郎 キーワードの値は文字列です キーワードの値は重複しないようにします 同じ値にする Excel データ (CSV) 注意キーワードの値は文字列です キーワードの値は重複しないようにします 1 ツールバーの 編集レイヤの選択 から 編

untitled

Transcription:

ADO で XML 操作 VB オートメーション 3 プログラムの概要 インターネットの普及 企業間の取引 (B to B) の拡大を背景に 一対多の電子商取引に加えて 多対多のマーケットプレイス等の動きが急進展して居る状況に於いて 異なる情報システム間での情報交換が円滑 且つ 容易に出来る手段が必要とされた 其処で 其の手段と仕て 現在 XML がインターネット上でのデータ交換の基盤技術と仕て広く認識されて居る XML 文書は テキスト形式で有る為 様々なコンピュータに於いて テキストエディタで容易に読み書き出来る事に加えて 各データが何を意味して居るかを理解し易いタグを自由に付ける事が出来る事や 仕様が簡潔なので XML 文書を操作するプログラムが容易に作成する事が出来る事等の利点が有る 今後益々用途が拡がると予想される XML を操作するプログラミングに馴れて置く事は 必要な事で有る XML を操作するには DOM(Document Object Module) を使用する事が多いが 此処では 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 オブジェクト ) -1-

参照設定とコンポーネントの追加 参照設定 此処では 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) Microsoft DataGrid Control 6.0 (SPx) (OLEDB) COMDLG32.OCX MSDATGD.OCX 上記の操作で 追加したコントロールが ツールボックスに表示され 標準のコントロールと同じ様に使用する事が出来る様に成る -2-

オブジェクト プロパティ一覧 メニューピクチャボックス1 ピクチャボックス2 ラベル 1 ラベル 2 ラベル 3 ラベル 4 テキストボックス コンボボックス データグリッド コモンダイアログ コマンドボタン コントロールの種類 プロパティ プロパティの設定値 フォーム オブジェクト名 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( コントロール配列 ) -3-

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

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 此処で宣言した変数の有効期間は宣言された時点から プログラムの終了迄で有る XML ファイルを読み込む為には ADODB のレコードセットが有れば良く コネクションは必要無い ' フォームが閉じられ様と仕た時の処理 Private Sub Form_QueryUnload( Cancel As Integer, UnloadMode As Integer ) If RsXML.State = adstateopen Then RsXML.Close Set RsXML = Nothing ' メニュー (MDB ファイルの読込 ) がクリックされた時の処理 Private Sub mnufilemdb_click( ) ' テーブル名の取得には DAO を使用 ( 参考 :VB 実用 Ⅰ-1) 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 FileName プロパティがプルパス FileMDB = cdlfile.filename で有るのに対し FileTitle プロパ ' データベース名の表示 lbldatabase.caption = cdlfile.filetitle 此処で宣言した変数の有効期間は 宣言された時点から プロシージ ャの終了迄で有る Filter プロパティを設定して 関 ティは ファイル名丈を返す ' テーブル名の取得 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 TableDefs コレクションには データベースに含まれる総てのテーブルの情報が格納されて居る 頭に Msys が付くテーブルは システム (MS Access) が使用して居るテーブルなので 除外する 使用済のデータベースとワークスペースは 必ずクローズし メモリから解放して置く必要が有る -5-

' メニュー (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" DefaultExt プロパティを設定し 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 Save メソッドの第 2 引数に ' レコードセットの内容を XML 形式で保存 Rs.Save FileXML, adpersistxml ' メッセージの表示 MsgBox " 保存しました ", vbinformation, " 保存終了 " Filter プロパティを設定して 関 係の無いファイルが表示されるの レコードセットは オープンする 時にコネクションを指定する事も 出来るが 此の様に予めコネクシ ョンと関連付けて置く事も可能 adpersistxml を指定すると レ コードセットの内容が XML 形式 で保存される ' 後始末 Rs.Close: Cn.Close Set Rs = Nothing: Set Cn = Nothing 使用済のコネクションとレコード セットは 必ずクローズし メモ リから解放して置く必要が有る -6-

' メニュー (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 Filter プロパティを設定して 関 係の無いファイルが表示されるの 生するので 一旦閉じる Options を adcmdfile に設定す ると ADO は データベースの代 わりに通常のファイルからデータ を取り出す物と認識する 此処では フィールド値を表示す るテキストボックスが 12 個しか 用意して居ない為 フィールドの 最大個数を 12 に限定して居る ' データグリッド ( 表示 ) がクリックされた時の処理 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 データグリッドの最左列をクリックすると レコードセット内のカレントレコードが移動する レコードセット内のカレントレコードの値を テキストボックスとラベルに表示して居る ' コマンドボタン ( クエリ ) がクリックされた時の処理 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 = " 追加 " 此処で宣言した変数は宣言したサブプロシージャ内でしか値の参照と設定を行う事が出来ない AddNew メソッドは レコードセットに更新可能な新規レコードを作成するメソッドで有る レコードセット内の総てのフィールド値を テキストボックスの値で書き換えて居る -7-

' 変更 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 ' メニュー ( 終了 ) がクリックされた時の処理 Private Sub mnufilefinish_click( ) Unload Me End レコードセット内の総てのフィールド値を テキストボックスの値で書き換えて居る adaffectcurrent は 既定の引数なので省略しても良いが 明記して置く事が望ましい 作業が終了すれば 其の旨を通知するメッセージを表示して 誤操作を防ぐ様にする事が望ましい レコードの追加 変更 削除を行えば Update メソッドを呼び出して更新する必要が有る 直接 XML ファイルを編集する事は出来ない為 レコードセットの内容で上書き保存する 名前付き引数の指定 Visual Basic では 多くの組み込み関数 ステートメント 及び メソッドで引数を指定する時に名前付き引数を使用する事が出来る 名前付き引数を使うと 構文で決められた引数の順序に関係無く 任意の順序で 必要な引数丈を指定する事が出来る 名前付き引数に値を代入するには引数名 コロンの後に等号 ( := ) と値を Options := adcmdfile の様に記述する 各引数指定の間はカンマで区切り 指定する順序は自由で有る 例えば ADODB.Recordset オブジェクトの Open メソッドの構文は 下記の通りで有る recordset.open Source, ActiveConnection, CursorType, LockType, Options 此れを 名前付き引数を使用せずに記述すると 下記の様に 一部の引数を省略する場合でも 引数の順序を変えない為に 区切りのカンマを記述する必要が有る RsXML.Open FileXML,,,, adcmdfile 併し 名前付き引数を使用して記述すると 下記の様に 区切りのカンマを含めて 不要な引数を省略する事が出来る RsXML.Open FileXML, Options:=adCmdFile 猶 名前付き引数がサポートされて居ないメソッドも有るので 名前付き引数を使用する場合は事前にマニュアル等で調べて置く必要が有る -8-

ADODB.Recordset の Open メソッド 機能 書式 解説 カーソルを開くメソッド Object.Open Source, ActiveConnection, CursorType, LockType, Options ベーステーブルからのレコード クエリ結果 又は 以前に保存された Recordset を表すカーソルを開く Recordset オブジェクトのプロパティに直接対応する引数 (Source CursorType LockType 此等は予め別個に設定して置く事も出来る ) と プロパティの関係は 下記の通りで有る Recordset オブジェクトを開く前のプロパティは 読み取り / 書き込み可能で有る Open メソッドの実行中に対応する引数が引き渡されない限り プロパティの設定値が使用される 引数を引き渡すと プロパティ設定が上書きされて引数の値に更新される Recordset を開いた後は プロパティは読み取り専用に成る Source 引数には Command オブジェクト変数 SQL ステートメント ストアドプロシージャ テーブル名 又は ファイルのフルパス名の孰れかをデータソースとして指定する Source がファイルのパス名で有る場合は 下記の孰れかで指定する事が出来る フルパス相対パス URL 例 :"c: temp data.mdb" 例 :".. data.mdb" 例 :"http://files/data.xml" ActiveConnection 引数は ActiveConnection プロパティに対応し Recordset オブジェクトを開く接続を指定する ( 省略可能 : データソースが XML ファイルの場合は 不要なので 省略する ) Source 引数で Command オブジェクトを引き渡し 同時に ActiveConnection 引数を引き渡すと エラーが発生する Command オブジェクトの ActiveConnection プロパティは 予め有効な Connection オブジェクト 又は 接続文字列に設定する必要が有る CursorType 引数には Recordset を開く際にプロバイダが使用するカーソルタイプを決める為の定数を CursorTypeEnum 値で指定する ( 省略可能 ) 定数 adopenforwardonly adopenkeyset adopendynamic adopenstatic 説明前方スクロールタイプカーソル レコードを前方向而巳にスクロール出来る事を除き 静的カーソルと同じ属性を持つ レコードセットを一度丈スクロールする必要が有る場合は 此のカーソルに依り性能を向上させる事が出来る ( 既定値 ) キーセットカーソル 動的カーソルと同じ様な属性を持つが 他のユーザが追加したレコードを表示せず 使用中のレコードセットから他のユーザが削除したレコードへのアクセスを許可しない 猶 他のユーザが変更したデータを表示する事は出来る 動的カーソル 他のユーザに依る追加 変更 及び 削除を観る事が出来プロバイダがサポートしないブックマークを除いて レコードセットで許容されて居る総ての種類の移動を行う事が出来る 静的カーソル データの検索 又は レポートの作成に使用する為の レコードの静的コピーで有る 他のユーザに依る追加 変更 又は 削除は表示されない -9-

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

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

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 メソッドが呼び出されて 総ての変更を保存してから 新規レコードを作成する -12-

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

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 プロパティを使って 宣言したフィールドサイズを取得する -14-