MSDE FunClub
Microsoft Data Engine FunClub
MSDE技術者向けメーリングリスト過去ログ[646]番
 
[TOP]>[MSDE技術者向けメーリングリスト過去ログ(646番)]>[ウィンドを閉じる]
 
SQLServer2005時代でも
開発の基本は T-SQL
上巻で T-SQL の基礎作り
 
SQLServer2005時代でも
運用の基本はバックアップ
下巻でバックアップ手法を学びましょう
PASSJ人気コンテンツで学んだ後は下巻でさらなる学習を!
 
ウィンドを閉じる
MSDE/SQLServer FAQ
MSDE / MSDE2000 
技術情報サポート
初心者向け
メーリングリスト
過去ログの表示
技術者向け
メーリングリスト
過去ログの表示
メーリングリスト
活動状況の
表示
MSDE TOP メニュー
MSDEトップメニューに移動します
 

 
Re: ADOを利用しての処理

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 技術サポート情報一覧]

MSDE TOP ページに移動する

 
 
 
 
 
 
 
MSDE FunClubに関するご意見・ご要望等ございましたら、
msdefun@horikawa.ne.jp までご連絡下さい。
MSDEを始めとする各種データベースシステムの開発、コンサルタントに関するご要望等は、
msdedev@horikawa.ne.jp までご連絡下さい。