この特集のトップページへ
>
Chapter 7:プレゼンテーション層の構築
●カレント行がないときの処理
ところで,ADODB.Recordsetオブジェクトが指すカレント行は常にあるとは限らない。たとえば,ADODB.Recordsetオブジェクトが1つもレコードを含んでいないときには,カレント行は空となる。そのような場合に,ユーザーが[編集]ボタンを押したときには,BTN_EDIT_Clickプロシージャ(List 7-26)の4行目で実行時エラーが発生することになる。
このような状況を回避するには,BTN_EDIT_Clickプロシージャを実行するさなかに,グローバル変数g_objRecに格納されているADODB.RecordsetオブジェクトのEOFプロパティとBOFプロパティを調べ,そのどちらかがTrueであれば,ユーザーに対して「編集対象がないから編集できない」という旨のメッセージを表示すればよい。EOFプロパティはカレント行がレコード全体の末尾よりもさらに先にあるとTrue,BOFプロパティはカレント行がレコード全体の先頭よりもさらにまえにあるとTrueを返すプロパティである。EOFプロパティ,BOFプロパティがともにTrueでないときに限り,カレント行は何らかのレコードを指している。
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 | レコードの変更が完了したときに発生する |
WillChangeRecordset | OpenメソッドやRequeryメソッドを呼び出すことなどにより,レコード全体が置き換わろうとしているときに発生する |
RecordsetChangeComplete | OpenメソッドやRequeryメソッドを呼び出すことなどにより,レコード全体が置き換わったときに発生する |
WillMove | カレント行の位置が移動されようとしているときに発生する |
MoveComplete | カレント行の位置の移動が完了したときに発生する |
Table 7-10に示したイベントのうち,カレント行の位置が変わったときに発生するのがMoveCompleteイベントである。MoveCompleteイベントを使うと,ADODB.Recordsetオブジェクトのカレント行の位置が変更されたときの状態を把握し,どの位置にカレント行が移動したのかわかるようになる。
Chapter 7 25/65 |