SQLServerとEOFとタイムアウト
ADOでRecordsetをOpenするとまずEOFをチェックするが
こと、SQL Serverへつないでてタイムアウトを見たいときはEOF見ちゃダメ。
MSKB [PRB] ADO EOF は SQL7.0 では True を返すが SQL6.5 ではタイムアウトを返す
にあるとおり、タイムアウトするとEOFは単にFalseを返すのでしたorz
替わりにStatusを見ろ(そして例外を拾え)、とあるんだが、その理由が
「内部でMoveFirstを呼ぶから」
ちなみに、タイムアウトは例外(VBの場合Err)の情報を見ても分からんので、
(Err.Numberは汎用エラーの&H80004005なので見ても役に立たん)
ADOのConnection.Errorsの要素を見る。
で、SQLSTATEが「HYT00」ならタイムアウト。
(なお、「StatusつーかMoveFirstしたら実はEOF/BOF」のときは、
むしろConnection.Errorsには何もなくてErr.Numberが3021、で判定……
(ちなみに、この「3021」、&H800A0BCDの上位16ビットがふっ飛んだものらしき。
VBSとかだと&H800A0BCD(のsigned int32で -2146825267)が来たりするorz)
なんでこうしちめんどくさいかなぁ)