プログラムの概要
オブジェクト型の変数宣言を行い、コード上で、データベ ースに接続し、SQL を発行する。 今回は、オブジェクト型の変数宣言に依り、データベース と接続する為のオブジェクト、及び、検索文を発行した際 にデータを格納するオブジェクトを、コード上で生成して データベースに接続し、各レコードのフィールド情報を取 得して、其れをコンボボックスの項目に追加する。此れに 依り、選択項目を、手入力では無く、コンボボックスのリ ストより選択する事が出来る様に成り、操作性が格段に向 上する。 亦、データ入力に依り、自動的に更新される可きデータを 自動で更新する事が出来る様にする。即ち、此処では、カ テゴリ別のデータ数を、自動的に更新する機能を付加する。データベース操作プログラムⅡ
VB 2005 ⑨ □ オブジェクト変数の宣言(Private、New) □ プロパティの利用(CursorLocation、ConnectionString、RecordCount、Fields、EOF) □ プロパティの利用(DataSource、Tag、Width、Height、ItemData) □ メソッドの利用(Open、Execute、Close、MoveNext、Items.Add、SubString) □ ステートメントの利用(Call、Structure) □ 組込関数の利用(Val、Space)□ 制御構造構文(ループ Do ~ Loop、条件分岐 Select Case … End Select) □ サブルーチン(新規プロシージャ) 今回の課題項目 □ オブジェクト型変数の宣言(Private、New) □ ADODB.Connection(Open、Execute、Close) □ ADODB.Recordset(Open、Close、MoveNext、RecordCount、Fields、EOF) □ SQL 文(SELECT 文:レコードを検索する文、UPDATE 文:レコードを更新する文) 今回の重点項目 □ 様々な SQL 文を試してみる。 今回の応用項目
■ オブジェクト・プロパティ一覧 ■ コントロールの種類 プロパティ プロパティの設定値 ラベル1 Name lblID Text ID ラベル2 Name lblTitle Text タイトル ラベル3 Name lblPrice Text 価格 ラベル4 Name lblCategory Text カテゴリ ラベル5 Name lblWriter Text 著者 テキストボックス1 Name txtID BackColor White ReadOnly True Text 空白 テキストボックス2 Name txtTitle Text 空白 テキストボックス3 Name txtPrice Text 空白 コンボボックス1 Name cboCategory Text 空白 テキストボックス1 テキストボックス2 テキストボックス3 コンボボックス1 コンボボックス2 ラベル1 ラベル2 ラベル3 ラベル4 ラベル5 ボタン1 ボタン3 ボタン2 前回作成したプログラムを基に追加する。
コントロールの種類 プロパティ プロパティの設定値 コンボボックス2 Name cboWriter Text 空白 ボタン1 Name btnInsert Text 追加 Tag 0 ボタン2 Name btnUpdate Text 変更 Tag 1 ボタン3 Name btnDelete Text 削除 Tag 2 ラベル テキストを表示するコントロール。此のテキストは、ユーザーが直接入力したり変更したりす る事は出来ない。 テキストボックス テキストの入力や表示を行うコントロール。此のテキストは、ユーザーが直接入力したり変更 したりする事が出来る。 コンボボックス 選択肢の一覧を表示するコントロール。此の一覧より値を選択する事と、テキストボックスに 直接値を入力する事が出来る。 ボタン ユーザーが選択したコマンド(命令)や操作を実行するコントロール。OKボタンや実行ボタ ン等、処理の開始や中断・終了の合図に用いられ、最も良く利用されるコントロールです。 コントロールの Anchor プロパティを利用すると フォームのサイズ変更に合わせて、コントロール の大きさを変える事が出来る。 フォームとの距離を一定に保つ方向を、クリック して設定する。初期状態では、上方向と左方向が 設定されて居るが、此れに、下方向と右方向を加 えると、フォームのサイズ変更に合わせて、コン トロールも大きさを変える事に成る。 VB6 でのコンボボックスの ItemData プロパティは廃止された。
VB6 での cboCategory.ItemData(I) = Val(Rs1.Fields("ID") & "")と同等の事を行うには、
Microsoft Visual Basic .NET Compatibility Runtime を参照設定した上で、下記の様に記述する。 Microsoft.VisualBasic.Compatibility.VB6.SetItemData(cboCategory, I, Val(Rs1.Fields("ID").Value & ""))
■ プログラムリスト(追加分) ■
Public Class bookshelf
' 構造体の宣言【追加】
Private Structure Category Public ID As Integer Public Total As Integer End Structure
' 構造体型の動的配列の宣言【追加】 Private Cate( ) As Category
' フォームレベルでグローバルな変数の宣言 Private Cn As ADODB.Connection Private Rs As ADODB.Recordset ' フォームが読み込まれた時の処理
Private Sub bookshelf_Load( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles Me.Load ' コネクションとレコードセットのインスタンス生成 Cn = New ADODB.Connection Rs = New ADODB.Recordset ' コネクションの確立(データベースへの接続) Cn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb;" Cn.Open( )
' 選択クエリに依るレコードセットの取得
Rs.Open( "SELECT 本.*,著者.著者名 FROM 本,著者 WHERE 本.著者 ID=著者.ID;", Cn ) ' データグリッドへの連結 Da = New OleDb.OleDbDataAdapter() Ds = New DataSet() Da.Fill(Ds, Rs, "book") dgvBookshelf.DataSource = Ds dgvBookshelf.DataMember = "book" ' ラジオボタンの設定 radBook.Checked = True
AddHandler radBook.Click, AddressOf radBook_Click AddHandler radCategory.Click, AddressOf radBook_Click AddHandler radWriter.Click, AddressOf radBook_Click ' サブルーチンコール【追加】 Call CboAddItem( ) Call CateUpdate( ) End Sub New キーワードを指定せずにオ ブジェクト変数を宣言した場合は 宣言時に、オブジェクトの新しい インスタンスは作成されない。 Structure ステートメントは、1 個又は複数の要素を持つデータ型 を宣言する。通常、レコード内の フィールド定義に用いられる。 頻繁に行う処理は、名前を付け、 一纏めに仕て置き、其の処理を必 要とする箇所よりコール(呼出) する事で、対象のコードを実行す る事が出来る。 New キーワードを指定せずにオ ブジェクト変数を宣言した場合は 実行時に、必ずインスタンスは作 成する必要が有る。
' コンボボックスにアイテムを追加するジェネラルプロシージャ【追加】 Private Sub CboAddItem( )
Dim Rs1 As New ADODB.Recordset( ) Dim SQL As String = "" Dim S As String = "" ' カテゴリ項目を取得しコンボボックスに設定 SQL = "SELECT * FROM カテゴリ;" Rs1.Open( SQL, Cn ) If Rs1.RecordCount > 0 Then Do Until Rs1.EOF
S = Space( 3 ) & Rs1.Fields( "ID" ).Value
S = S.Substring( S.Length – 3 ) & ":" & Rs1.Fields( "カテゴリ名" ).Value cboCategory.Items.Add( S ) Rs1.MoveNext( ) Loop End If Rs1.Close( ) ' 著者項目を取得しコンボボックスに設定 SQL = "SELECT * FROM 著者;" Rs1.Open( SQL, Cn ) If Rs1.RecordCount > 0 Then Do Until Rs1.EOF
S = Space( 3 ) & Rs1.Fields( "ID" ).Value
S = S.Substring( S.Length – 3 ) & ":" & Rs1.Fields( "著者名" ).Value cboWriter.Items.Add( S ) Rs1.MoveNext( ) Loop End If Rs1.Close( ) ' オブジェクトとの関連付けの解除 Rs1 = Nothing End Sub オブジェクト変数を宣言する時に New キーワードを指定して、宣言 時に、オブジェクトの新しいイン スタンスが作成する事も出来る。 データベースから Null を取得し た場合、文字列変数に代入する事 は出来ないが、文字列と結合する 事で文字列にキャストされ、文字 列変数に代入する事が出来る。 コンボボックスにリストを追加す るには、Items コレクションに対 してAdd メソッドを使用する。 従 来 の 様 に コ ン ボ ボ ッ ク ス に ItemData に数値を格納する事が 出来ない為、ID フィールドの値を リストに付加して居る。 データベースのレコードを取得し 格納する変数の様に配列の要素数 を事前に決定出来ない場合は、動 的配列を使用し、要素数が判明し た時点で ReDim を使用して要素 数を指定する。
' カテゴリ別データ数を更新するジェネラルプロシージャ【追加】 Private Sub CateUpdate( )
Dim Rs1 As New ADODB.Recordset Dim Rs2 As New ADODB.Recordset Dim SQL As String = "" Dim I As Integer ' カテゴリ別データ数の更新 SQL = "SELECT ID FROM カテゴリ;" Rs1.Open( SQL, Cn ) If Rs1.RecordCount > 0 Then ReDim Cate( Rs1.RecordCount ) For I = 1 To Rs1.RecordCount
Cate( I ).ID = Val( Rs1.Fields( "ID" ).Value & "" )
SQL = "SELECT COUNT( ID ) AS 合計 FROM 本" & _ " WHERE カテゴリ ID=" & Cate( I ).ID & ";" rs2.Open( SQL, Cn )
If rs2.RecordCount > 0 Then
Cate( I ).Total = Val( rs2.Fields( "合計" ).Value & "" )
SQL = "UPDATE カテゴリ SET トータル=" & Cate(I).Total & _ " WHERE ID=" & Cate( I ).ID & ";"
Cn.Execute( SQL ) End If rs2.Close( ) Rs1.MoveNext( ) Next End If Rs1.Close( ) ' オブジェクトとの関連付けの解除 rs2 = Nothing Rs1 = Nothing End Sub 数値型のフィールドデータを取得 する際には、Val 関数を使用し、 数値以外の不正なデータを少なく ともゼロにする事が望ましい。 オブジェクト型変数は使用終了し た時点でNothing を代入して関連 付けを解除しないと、使用して居 るメモリが開放されない。 オブジェクト変数を宣言する時に New キーワードを指定すると、実 行時に、オブジェクトへの参照を 代入する必要は無い。 1行分のレコードを処理しても自 動的に次のレコードに移動する訳 では無い。MoveNext メソッドで 次のレコードに移動する。
構造体とは ユーザー(プログラマー)が任意に定義するデータ型。Visual Basic がサポートする複数の データ型を組み合わせて、独自のデータ型を作成する事が出来る。 Structure ユーザー定義型名 適用範囲 要素名1 As データ型 適用範囲 要素名2 As データ型 … End Type 構造体は、データ型の異なる多数の関連する要素で構成されるデータレコードを定義する場 合に、良く使用される。 適用範囲には、Dim、Event、Friend、Private、Public の孰れかを指定する。猶、Dim キーワードで 宣言されたメンバは、既定ではPublic アクセスを行う。 宣言した構造体は、Visual Basic の他のデータ型と粗同様に使用する事が出来る。構造体で宣言された 変数は、複数の要素(フィールド)を持つ事に成り、各要素の参照は、変数名の後ろにピリオドに続き 要素名を記述する。 構造体変数の宣言:Dim 変数名 As ユーザー定義型 (Public、Private でも宣言出来る) 構造体変数の参照:代入変数/プロパティ = ユーザー定義型変数名.要素名 オブジェクト型変数の宣言 オブジェクトクラスに対して変数を宣言する Dim 変数名 As [New] オブジェクトクラス名 オブジェクトをコードで使用する為に、対象のタイプライブラリに依り提供されるクラス名 を変数宣言の中で指定し、オブジェクトを変数に格納する
宣言ステートメントには、Dim の他にも、Public、Protected、Friend、Protected Friend、Private、 Shared、Static も使用する事が出来る。 データ型には、オブジェクトクラス(オブジェクトのインスタンスが生成されるクラス)を指定するが プロシージャが実行される迄、オブジェクトクラスが解らない場合等は、オブジェクト型(Object)を 使用してオブジェクト変数を宣言する事も出来る。 オブジェクト型(Object)の変数は、オブジェクトを参照する 32 ビット(4 バイト)のアドレスと仕て 格納される(即ち、オブジェクト変数に格納した値は、メモリ内の他の場所に保持され、変数自体はデ ータへのポインタを保持する)。オブジェクト型と仕て宣言した変数には、任意の参照型(文字列、配 列、クラス、インターフェイス)を割り当てる事が出来る。 New キーワードを使用してオブジェクト変数を宣言すると、クラスのインスタンスが宣言時に作成され るが、整数型や倍精度浮動小数点型等の値型とは異なり、オブジェクトは参照型で有り、使用する前に 明示的にインスタンスを作成して置く必要が有る。 機 能 書 式 解 説 機 能 書 式 解 説
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 オブジェクト、又は、Recordset オブジェクトを閉じて、関連するシステムリソ ースを解放する。 オブジェクトを閉じてもメモリからは削除されず、プロパティ設定を変更してもう一度開く事が出来る。 メモリからオブジェクトを完全に削除するには、オブジェクト変数をNothing に設定する。 機 能 解 説 機 能 書 式 解 説 機 能 書 式 解 説 機 能 書 式 解 説
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 オブジェクトを生成するコマンド をプロバイダが再度実行する可能性が有る。 機 能 解 説 機 能 書 式 解 説 機 能 書 式 解 説
ADODB.Recordset の Close メソッド 開いて居るオブジェクト、及び、依存する総てのオブジェクトを閉じるメソッド Recordset.Close( ) Connection オブジェクト、又は、Recordset オブジェクトを閉じて、関連するシステムリソ ースを解放する。 オブジェクトを閉じてもメモリからは削除されず、プロパティ設定を変更してもう一度開く事が出来る。 メモリからオブジェクトを完全に削除するには、オブジェクト変数をNothing に設定する。 ADODB.Recordset の RecordCount プロパティ Recordset オブジェクトに存在する現在のレコード数を示すプロパティ Recordset.RecordCount Recordset オブジェクトに有るレコード数を調べる為に使用する。レコード数が解ら無い場 合、又は、プロバイダやカーソルの種類がRecordCount をサポートして居ない場合は、プ ロパティは-1を返す。閉じて居るRecordset 上で RecordCount プロパティを読み込むと、エラーが 発生する。 ADODB.Recordset の Fields プロパティ フィールドデータを示すプロパティ(コレクション) Recordset.Fields( 引数 ) 引数で指定したフィールドを示す。当該フィールドデータの値は、Value プロパティで参照 する事が出来る。 引数には、フィールド名を示す文字列、又は、序数を指定し、必ず指定する。 ADODB.Recordset の EOF プロパティ カレントレコードの位置が最後のレコードより後に有る事を示すプロパティ Recordset.EOF カレントレコードの位置が最後のレコードより後に有る場合は True を返し、カレントレコ ードの位置が最後のレコード上、又は、其れ以前に有る場合はFalse を返す。 猶、BOF プロパティは、カレントレコードの位置が最初のレコードより前に有る場合は True を返し、 カレントレコードの位置が最初のレコード上、又は、其れ以降にある場合はFalse を返す。
BOF 及び EOF プロパティは、Recordset オブジェクトがレコードを含むか何うか、又は、他のレコー ドに移動した時にRecordset オブジェクトの限界を超えて居ないか何うかを調べる為に使用する。 機 能 書 式 解 説 機 能 書 式 解 説 機 能 書 式 解 説 機 能 書 式 解 説
ADO では次の4種類のカーソルが定義されて居る。 1.動的カーソル:他のユーザーに依る追加、変更、及び、削除を見る事が出来、ブックマークに依存しない、 Recordset での所有る種類の移動を行う事が出来る。プロバイダがブックマークをサポートする場合は、ブッ クマークを使用する事が出来る。 2.キーセットカーソル:動的カーソルと同じ様な属性を持つが、他のユーザーが追加したレコードを表示せず、 他のユーザーが削除したレコードへのアクセスを許可し無い。他のユーザーが変更したデータは表示する事が 出来る。常にブックマークが使用出来る為、Recordset での所有る種類の移動が可能で有る。 3.静的カーソル:データの検索、又は、レポートの作成に使用する為の、レコードセットの静的コピーを作成す る。常にブックマークが使用出来る為、Recordset での所有る種類の移動が可能で有る。他のユーザーに依る 追加、変更、又は、削除を見る事は出来ない。クライアント側(ADOR)の Recordset オブジェクトを開く場合 に許可される唯一のカーソルタイプで有る。 4.前方スクロールタイプカーソル:レコードの前方スクロールのみ可能で有る点を除き、静的カーソルと同じ属 性を持つ。レコードセットを一度だけスクロールする必要が有る場合は、此のカーソルに依り性能が向上する。 Recordset オブジェクトのカーソルタイプを選択するには
Recordset オブジェクトのカーソルタイプを選択するには、Recordset オブジェクトを開く前に CursorType プロ パティを設定する。亦、Open メソッドを使って CursorType 引数を引き渡す事も出来る。プロバイダの中には、 総てのカーソルタイプをサポートして居ない物も有る。プロバイダのドキュメントを参照して確認する必要が有 る。カーソルタイプを指定し無い場合、既定値に依り前方スクロールタイプカーソルが開く。
Recordset オブジェクトのカーソルロケーションに付いて
Recordset オブジェクトを開く為に CursorLocation プロパティを adUseClient に設定すると、Field オブジェクト 上のUnderlyingValue プロパティは、返された Recordset オブジェクトでは無効に成る。Microsoft SQL Server と連動するMicrosoft ODBC Provider for OLE DB 等のプロバイダを利用する場合、Open メソッドを使用して接 続文字列を引き渡す事に依り、定義済みのConnection オブジェクトから独立した Recordset オブジェクトを作成 する事が出来る。此の場合もConnection オブジェクトが作成されるが、オブジェクトの値は変数に代入され無い。 但し、同じ接続で複数のRecordset オブジェクトを開く場合は、Connection オブジェクトを作成して開く必要が 有る。此の操作に依り Connection オブジェクトの値がオブジェクト変数に代入される。Recordset オブジェクト を開く時に此のオブジェクト変数を使用しない場合は、ADO は、同じ接続文字列を引き渡しても、新規 Recordset オブジェクトの夫々れに対して新規Connection オブジェクトを作成する。
Recordset オブジェクトを開くと、カレントレコードが最初のレコードの位置に移動して、BOF と EOF プロパテ ィの設定値がFalse に成る。レコードが存在しない場合は、BOF と EOF プロパティの設定値が True に成る。
ConnectionString プロパティ(ADODC) 直訳すると『接続文字列』。ダイアログボックスにて視覚的に設定する事が多いが、1字1句間違わなければ、 直接入力しても設定する事が出来る。要は、何のデータベースと接続するのかを指定するプロパティで有る。若 し、フォルダの名称を変更したり、ファイル名を変更したり、保存場所を変更する等して、設定した時と異なる 場合は、再度設定し直す必要が有る。 RecordSource プロパティ(ADODC) 指定した検索文を元に、ADODC オブジェクトは検索結果データを取得する。 データグリッドはADODC オブジェクト内に取得したデータを表示する。 Refresh メソッド(ADODC) RecordSource プロパティの指定のみでは、検索結果データは ADODC に取得され無い。 Refresh メソッドを実行する事に依り、データベース側の最新データを取得する事が出来る。 VB での SQL 文の扱い VB にて SQL 文を記述する際には、文字列(ダブルクオーテーション区切り)と成る。 データベースソフトに送られた時点で、文字列はSQL 文で有ると看做され、実行される。
コード上でSQL 文を実行するには コード上でSQL 文を実行するには、コード上で、以下のオブジェクトを使用する。 ADODB.Connection オブジェクト(データベースと接続する為のオブジェクト) ADODB.Recordset オブジェクト (検索文を発行した際にデータを格納するオブジェクト) オブジェクトをコードで使用するには、変数に格納して使用する必要が有る。 此れをオブジェクト型の変数宣言と謂う。
Dim 変数名 1 As New ADODB.Connection
Dim 変数名 2 As New ADODB.Recordset (SELECT 文で無い場合は不要)
INSERT・UPDATE・DELETE 文を実行する場合は、ADODB.Connection オブジェクトの Open(開く)→Execute(実行)→Close(閉じる)メソッドを使用する。 変数名 1.Open( “ データベースの種類・データベースの場所を示す接続文字列 “ ) 変数名 1.Execute( “ SQL 文 “ ) 変数名 1.Close( ) SELECT 文の場合は検索結果を取得するので、ADODB.Recordset オブジェクトに SQL 文を指定する。 変数名 2.Open( “SQL 文“,変数名 1 ) 「RecordCount」プロパティにて検索結果の件数を取得可。 「Fields」コレクションの Value プロパティにて指定したフィールドデータを取得可。 「MoveNext」メソッドにて検索結果のレコードカーソルを移動可。 変数名 2.Close( ) ADODB.Recordset の EOF プロパティ レコードデータを参照する際には、カレントレコードを移動する必要が有る。Open メソッド実 行直後は検索結果の 1 番目のレコードがカレントレコードと成る。MoveNext メソッドを実行す る事に依り、1 件ずつカーソルを移動する事が出来る。EOF プロパティは最終レコードの下の意 味で「此れ以上はデータが無い」状況を謂う。 イメージ(検索結果データ) ID タイトル 1 ACCESS テクニック集 3000 2 EXCEL テクニック集 2500 8 実用 WORD 1300 ・ ・ ・ ・ 実行直後は1 件目にカーソルが有る。 MoveNext メソッドを実行するとカーソルが 1 行宛下へ移動する。 カーソルが 1 番下のレコードより下に移動す ると、EOF=True と成る。