Date: Tue, 29 May 2001 09:17:46 +0900
From: Nobuyuki Hirashima <who@example.co.jp>
平嶋です。
On Mon, 28 May 2001 22:38:14 +0900
秋田 浩樹 <who@example.co.jp> wrote:
> 上記の通り SET NOCOUNT ON で解決はしました。
> この記述の意味はヘルプにて調べることができたので、コマンドの意味は
> わかったんですが、どうしてこの記述によって先の問題が解決されるのかが
> 他の人とも話してみたのですが理解できません。
自分なりに調べた結果ですが、MSDNあたりにズバリ書いてあるかも知れません。
まずSET NOCOUNT ONの記述を削除し、クエリアナライザでプロシージャを実行し
てみて下さい。
SELECT, UPDATEなどの命令が実行されるたびに
(1 件処理されました)
と出力されるはずです。
ADOでDB接続にSQLOLEDBを使っている場合、この「(1 件処理されました)」の行は
閉じた結果セットとしてクライアントに返ってきます。
(Stateプロパティ = adStateClosed)
当然、この状態ではRecordsetオブジェクトを操作できません。
この後ろに有効な結果セットがあるなら、それが見つかるまでnextRecordSetメソッ
ドで回せば使用できます。
しかしSET NOCOUNT ONとすれば「(1 件処理されました)」の出力を抑止できるの
で、その必要はなくなります。
MSDASQLやDSN接続を使う場合は、このような挙動は見られません。ドライバの仕
様でしょう。RDOは使ったことがないので何とも言えません。
少々余談を。
今手がけているシステムはSQL6.5の時代からかなりチューニングがしてあるよう
で、ビューを実行すると
「警告 : ローカル結合ヒントが使用されたので、結合順序が強制設定されました。」
というメッセージがよく出ます。実際にはLOOP JOINを使っているのですが。
このメッセージも閉じた結果セットとして扱われてしまうのですが、どうも調べ
た限りでは出力を抑止する方法が見つかりません。
しかたがないので
do
Set RS = RS.nextRecordSet
while RS.State = adStateClosed
こんなことをしています。
who@sub.example.com
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|