この特集のトップページへ
Chapter 7:プレゼンテーション層の構築

7.4.4 顧客の編集
●カレント行がないときの処理
 ところで,ADODB.Recordsetオブジェクトが指すカレント行は常にあるとは限らない。たとえば,ADODB.Recordsetオブジェクトが1つもレコードを含んでいないときには,カレント行は空となる。そのような場合に,ユーザーが[編集]ボタンを押したときには,BTN_EDIT_Clickプロシージャ(List 7-26)の4行目で実行時エラーが発生することになる。

 このような状況を回避するには,BTN_EDIT_Clickプロシージャを実行するさなかに,グローバル変数g_objRecに格納されているADODB.RecordsetオブジェクトのEOFプロパティとBOFプロパティを調べ,そのどちらかがTrueであれば,ユーザーに対して「編集対象がないから編集できない」という旨のメッセージを表示すればよい。EOFプロパティはカレント行がレコード全体の末尾よりもさらに先にあるとTrueBOFプロパティはカレント行がレコード全体の先頭よりもさらにまえにあるとTrueを返すプロパティである。EOFプロパティ,BOFプロパティがともにTrueでないときに限り,カレント行は何らかのレコードを指している。


One Point!EOFプロパティとBOFプロパティがともにTrueであるとき,ADODB.Recordsetオブジェクトは1つのレコードも格納していないことを示す。

 しかし,このような方法ではなく,カレント行がどのレコードも指していないときには,[編集]ボタンを淡色(グレー)表示にし,押せないようにするというのもよい方法である。

 以下,カレント行の状態によって,一部のボタンを淡色表示にして押せないようにする方法について考えてみる。

ADODB.Recordsetオブジェクトのイベント
 ADODB.Recordsetオブジェクトは,さまざまな状況においてイベントを発生する。ADODB.Recordsetオブジェクトが発生するイベントは,Table 7-10のとおりである。

Table 7-10 ADODB.Recordsetオブジェクトが発生するイベント
イベント解説
EndOfRecordsetレコード全体の末尾を越える行に移動しようとしたときに発生する
FetchComplete非同期操作時にデータを取得したのちに発生する
FetchProgress非同期操作中に定期的に発生する
WillChangeFieldフィールドの値を変更するまえに発生する
FiledChangeCompleteフィールドの値の変更が完了したときに発生する
WillChangeRecordレコードを変更するまえに発生する
RecordChangeCompleteレコードの変更が完了したときに発生する
WillChangeRecordsetOpenメソッドやRequeryメソッドを呼び出すことなどにより,レコード全体が置き換わろうとしているときに発生する
RecordsetChangeCompleteOpenメソッドやRequeryメソッドを呼び出すことなどにより,レコード全体が置き換わったときに発生する
WillMoveカレント行の位置が移動されようとしているときに発生する
MoveCompleteカレント行の位置の移動が完了したときに発生する

 Table 7-10に示したイベントのうち,カレント行の位置が変わったときに発生するのがMoveCompleteイベントである。MoveCompleteイベントを使うと,ADODB.Recordsetオブジェクトのカレント行の位置が変更されたときの状態を把握し,どの位置にカレント行が移動したのかわかるようになる。

prevpg.gif Chapter 7 25/65 nextpg.gif