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

Similar documents
データベース1

VB.NET解説

データベースⅡ

データベースⅠ

データベースⅡ

ADOとADO.NET

データベース1

DAOの利用

データベースⅢ

データベースⅠ

データアダプタ概要

データベースⅢ

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

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

ファイル操作

VB実用③ アクセス操作Ⅰ

Microsoft Office操作

mySQLの利用

VB実用⑦ エクセル操作Ⅰ

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

データベース1

Microsoft Office操作(EXCEL)

ルーレットプログラム

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

グラフィックス

正規表現応用

Userコントロール

NotifyIconコントロール

VB実用⑯ 印刷Ⅵ(Excel)

ICONファイルフォーマット

VB実用Ⅲ③ ADOでXML操作

VB実用① データベースⅠ

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

VB.NET解説

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

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

モグラ叩きプログラム

相性占いプログラム

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

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

ブロック パニック

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

ListViewコントロール

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

VB実用④ アクセス操作Ⅱ

PowerPoint プレゼンテーション

VB実用⑧ エクセル操作Ⅱ

MS Office オートメーション

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

Case 0 sqlcmdi.parameters("?tencode").value = Iidata(0) sqlcmdi.parameters("?tenname").value = Iidata(1) 内容を追加します sqlcmdi.executenonquery() Case Else

構造体

3D回転体プログラム

ExcelVBA

GUIプログラムⅡ

ADO.NETのアーキテクチャ

Microsoft Word _VBAProg1.docx

ファイル監視

テスト 1/7 ページ プレポスト Visual Studio による Windows アプリの開発 ( 基礎編 ) 受講日程受講番号氏名 1.NET Framework に関する記述で 誤っているものを選びなさい 1..NET Framework に含まれる CLR は プログラミング言語に依存し

With sqlda sqlda に SelectCommand を追加.SelectCommand = New MySqlCommand() With.SelectCommand.CommandType = CommandType.Text.CommandText = "select * from

プラグイン

MS Office オートメーション

PowerPoint プレゼンテーション

ブロック崩し風テニス

プロセス間通信

回文作成支援プログラム

回文作成支援プログラム

相性占いプログラム

画像閲覧プログラム

ハッシュテーブル

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

Prog2_12th

データベースアクセス

VFD256 サンプルプログラム

プレポスト【問題】

インベーダープログラム

Section1_入力用テンプレートの作成

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

万年暦プログラム

Oracle Lite Tutorial

チャットプログラム

占領双六ゲーム

VB実用⑬ 印刷Ⅲ(PrintFormメソッド)

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

sinfI2005_VBA.doc

Oracle Lite Tutorial

Access研修テキスト

ご存知ですか? データ転送

Microsoft Word - JDBC-ODBCu691cu8a3c docx

構造体

各種パスワードについて マイナンバー管理票では 3 種のパスワードを使用します (1) 読み取りパスワード Excel 機能の読み取りパスワードです 任意に設定可能です (2) 管理者パスワード マイナンバー管理表 の管理者のパスワードです 管理者パスワード はパスワードの流出を防ぐ目的で この操作

Microsoft Word - Android_SQLite講座_画面800×1280

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


ウィンドウ操作 応用

Microsoft Excel操作

VB実用⑤ アクセス操作Ⅲ

VB6互換のファイルの処理

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 文字列 文字列リテラル プログラムの中で文字列を表す方法は幾つか有るが 基本的な方法は下記の 2 種で有る 対象と成る文字の集まりをダブルクオーテーション ( " ) で囲うか シングルクオーテーション ( ' ) で囲う PYTHON3 "

グラフィックス 目次

Transcription:

ADO でファイル操作 VB オートメーション 1 プログラムの概要 事務処理に於いて Microsoft Office は 業界標準 (De Facto Standard) で有ると謂う事が出来る 此の Office に含まれる Excel は スプレッドシートソフトで有り データベースソフトと仕ては Access が用意されて居る 其の為 本格的なデータベースと仕ての使用には Access 等の導入を検討す可きで有るが 小規模なデータベースでは Excel で代用されて居る事も多い 亦 Execl の他に データファイルと仕て CSV ファイルや TSV ファイル ( タブ区切りファイル ) も多く用いられて居る 其処で 今回は 従来からの接続型の ADO に加えて.NET Framework で採用されて居る非接続型の ADO.NET と 充実したデータベース操作用コンポーネントを用いて 此等を Visual Basic から データベースと仕て使用する手法を 重点的に学ぶ 此処では 此等のファイルから 必要なデータを SQL( クエリ ) を使用して抽出し データセットやレコードセットに格納された情報を 個々に操作する方法を習得して欲しい 今回の課題項目 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 句 ) -1-

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

オブジェクト プロパティ一覧 DataGridView グループボックス 1 グループボックス 2 ラジオボタン 1 ラジオボタン 2 ラジオボタン 3(11 個 ) コントロールの種類 プロパティ プロパティの設定値 フォーム 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 -3-

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 ) ダブルコーテーションを 2 個連続して記述すると 引用符と仕ての意味を喪失し 単成るダブルコーテーションを示す文字と成る 此処では データソースにサークル名簿と謂うエクセルシートを指定して居る ' 選択クエリの設定 SQL = "SELECT * FROM [ サークル名簿 $];" ' レコードセットのオープンと選択クエリの実行 Rs.Open( SQL, Cn ) ' データグリッドビューへのデータ表示 Call DispData( ) FirstFlag = False End Sub Excel のシート名がテーブル名と仕て扱われる 選択クエリを指定し コネクションを通じてレコードセットを開くと データが取得される プログラム末尾で定義して居るメソッド ( ジェネラルプロシージャ ) を呼び出して居る ' フォームが閉じられ様と仕た時の処理 Private Sub AdoExcel_FormClosing( ByVal sender As Object, _ ByVal e As System.Windows.Forms.FormClosingEventArgs ) Handles Me.FormClosing -4-

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 e.cancel に True の値を設定する 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 注意 と設定を行う事が出来ない 条件文の記述には 此の他にも Like 演算子とワイルドカードを 用いる方法も有る 此のイベントプロシージャを最初に実行した時に 選択された CollatingSequence は OS でサポートされて居ない と謂うエラー メッセージが表示される事が有る 此のメッセージは Visual Basic の IDE( 統合開発環境 ) で而巳表示 され コンパイル済みのプログラムでは表示されない 開発時の対処法と仕ては エラーメッセージが表示されると 一旦 プログラムを終了し 再度実行すると良い -5-

' 選択クエリの設定 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 ソートは ORDER BY にフィールド名を指定する 昇順の場合は ASC 降順の場合は DESC を付ける (ASC は省略可 ) ' データグリッドビューへデータを表示するメソッド 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 使用する 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) -6-

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

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

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 指定値 -9-

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 接続文字列は ADO の場合と全く 同じで有る ' コネクションの設定 Cm.Connection = Cn ' 選択クエリの設定 SQL = "SELECT * FROM [ サークル名簿 $];" Cm.CommandText = SQL ' データの取得 Da.SelectCommand = Cm Ds.Clear( ) Da.Fill(Ds, "circle") ' データグリッドビューへのデータ表示 Call DispData( ) FirstFlag = False End Sub データベースより 選択クエリで抽出したデータを データセットに circle と謂う名前を付けて格納して居る -10-

' フォームが閉じられ様と仕た時の処理 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 -11-

' ソート項目の設定 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 -12- 此処では データセットに格納 された個々のデータを操作す る方法を理解して貰う為に 此 の様な方法を採用して居るが データセットは 簡単に 下記 の様に データグリッドビュー とバインドする事が出来る With dgvmember.datasource = Ds.DataMember = "circle" End With

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 には カレントレコードと謂う概念は無い 其の為 レコードを移動する為のメソッドも無い データセットに保持されたデータは 行のコレクションと仕て扱われ 各レコードは 配列の要素番号を使用して識別する -13-

接続方法 ADO ADO では データベースに常時接続した状態で使用するのが基本で有る 其の為 常に最新のデータを取得し 更新する事も可能で有るが 実際には データの転送時以外は データベースに接続して居る必要が無い場合が多い 亦 データベースへの接続を維持する事で システムリソースを消費し パフォーマンスが低下すると謂う負の側面も有る データベース フォーム ADO.NET ADO.NET では データセットに依り データベースと粗同じ物をメモリ上に保持する事が出来るのでデータベースに接続する必要が有るのは データセットにデータを取得する時と データセットで変更した内容をデータベースに転送する時丈で有る 其れ以外の時はデータベースの接続を解除し データセットを利用してデータベース操作を行う フォーム データアダプタ コネクション データベース データセット ADO と ADO.NET の使い分け 新規にアプリケーションを開発する時は ADO.NET を利用すると 豊富なツールを利用して 効率良くアプリケーションを開発する事が出来る ADO.NET では データベースと常時接続する必要が無い為 システムの負荷を軽減する事が出来る 併し 非接続型故に 大量のレコードの即時更新や 常に最新の情報が必要な場合には 不適格で有り 此の様な場合は 常時接続型の ADO を利用すると良い.NET Framework でも ADO は サポートされて居る -14-

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

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 等を中継して データソースへのアクセス 及び 更新を行う事を目的とするオブジェクトを謂う -16-

Visual Basic 6.0 に付属して居る OLE DB プロバイダ毎の設定値は 下記の通りで有る OLE DB プロバイダ Microsoft Jet 4.0 OLE DB Provider Microsoft Jet 3.51 OLE DB Provider Microsoft OLE DB Provider for SQL Server Microsoft OLE DB Provider for Oracle Microsoft OLE DB Provider for ODBC Drivers ConnectString プロパティの例 Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MDB ファイル名 Provider=Microsoft.Jet.OLEDB.3.51;Data Source=MDB ファイル名 Provider=SQLOLEDB;User ID= ユーザー ID;Data Source= サーバー名 Provider=MSDAORA; User ID= ユーザー ID;Data Source= データベース別名 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 に設定されて居る -17-

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 がコマンド実行中に使用する実際のコマンド文字列の参照も可能で有る -18-

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

ADODB.Connection の CursorLocation プロパティ カーソルエンジンの場所を設定 取得するプロパティ Connection.CursorLocation = 定数 此のプロパティで プロバイダにアクセス可能な様々なカーソルライブラリの中からカーソルエンジンを選択する 通常は クライアント側カーソルライブラリ 又は サーバー側カーソルライブラリから選択する 定数には 下記の定数値を設定する 定数 adusenone aduseclient aduseserver 説明カーソルサービスは使用されない ( 此の定数は現在は使用されないが 以前のバージョンとの互換性を保つ為に装備されて居る ) ローカルカーソルライブラリより供給されたクライアント側のカーソルを使用する ローカルカーソルエンジンを使うと ドライバに依り供給されるカーソルには無い多くのを使う事が出来る 従って 此の設定を使用するとより高度なが提供される 以前のバージョンとの互換性を保つ為に 同じの aduseclientbatch もサポートされて居る データプロバイダカーソル 又は ドライバに依り供給されるカーソルを使用する 此等のカーソルは柔軟に使用出来 他のユーザがデータソースに加える変更を検出する事が出来る 併し Microsoft Client Cursor Provider の幾つかの ( 分離されたレコードセット等 ) はサーバー側カーソルではシミュレート出来ない為 此等のを此の設定で使用する事は出来ない ( 既定値 ) 此のプロパティ設定は プロパティが設定された後に確立された接続而巳に作用する CursorLocation プロパティを変更しても既存の接続には影響しない 此のプロパティは Connection 又は 閉じて居る Recordset 上では読み取り 書き込みで 開いて居る Recordset 上では読み取り専用で有る Connection.Execute カーソルは 此のプロパティ設定を継承する Recordsets は 自動的に此の設定を関連付けられた接続から継承する ADODB.Connection の RecordSource プロパティ レコードセットを返すステートメント又はクエリーを設定 取得するプロパティ Connection.RecordSource = 値 通常は選択クエリ (SELECT 構文 ) を指定する 値には レコードソースを指定する文字列式を指定し 設定値は 下記の通りで有る 設定値テーブル名 SQL クエリー 内容データベースのテーブルの名前で有る データソースに適した構文を使用した有効な SQL 文字列で有る -20-

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 オブジェクトを生成するコマンドをプロバイダが再度実行する可能性が有る -21-

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 でないと サーバー側カーソルではシミュレート出来ない為 使用する事は出来ない -22-

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

参考事項 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 プロパイダを使用して居る場合は 指定のブックで利用可能な名前付き範囲とワークシート名の両方が ドロップダウンリストに表示される 但し此の場合 ワークシート名にドル記号は正しく追加されるが 必要な角括弧は追加され無い為 手作業で ワークシート名を角括弧で囲む必要が有る事に注意を要する -24-