• 締切済み

ADOからのストアド実行でエラーが発生します

VB6のプログラムから、ストアドを実行すると エラー 3704(オブジェクトが閉じている間は操作が許可されない)が発生します。 ストアドの内容は次のとおりです 1.あるテーブルの中から条件に一致するレコードを取得し、一時テーブルに格納する 2.一時テーブルを先頭から1行ずつ読み、各レコードの値を使用して別のテーブルへ更新 上記内容を、一時テーブルではなくカーソルを使用するとうまくいきます。 同じような経験をされた方、対処法などご存知でしたら教えてください。

みんなの回答

  • kikaida-
  • ベストアンサー率69% (37/53)
回答No.1

ひょっとしてストアドからストアドを呼んだりしてませんか。 一時テーブルはコネクションごとに作成されるもので、コネクションが閉じれば消えてしまいます。 ストアドもこのコネクションと同じものにあたります。 AというストアドからBというストアドを呼び、Bの中で一時テーブルを作成する処理を行うと、Bが終了した時点で一時テーブルは削除されてしまいます。

Laphroaig
質問者

お礼

アドバイス、ありがとうございます。 原因は全然違うところでしたが、勉強になりました。

関連するQ&A

  • ストアドプロシージャについて

    いつもお世話になっております。 ストアドプロシージャで以下のようなことをしたいのですが、可能しょうか。 ある会員テーブルから1件のレコード(10個のカラムで構成されている)を取得します。その10個のカラム⇒10個のレコードとして別の一時的なテーブルに格納したいのですが可能でしょうか。 イメージとしては、 (1)Select Clm1,Clm2,Clm3~,Clm10 from MstMember 条件句 (2)(1)の結果をtmpTBLに格納。中身としては、、、 <tmpTBL> Clm1 Clm2 Clm3 Clm10 とここまで書きましたが、やりたいことはSelect文で取得したレコードのカラム1~10を順番に参照したいだけです。 素人質問で大変恐縮ですがご教示頂けますと幸いです。

  • vbからストアドプロシージャ内発生のエラーメッセージ取得

    タイトル通りの質問です。例えば、重複キーエラー時等はクエリアナライザを使用してストアドプロシージャを実行した場合に、「PRIMARY KEY 違反、制約 'PK_xxx': オブジェクト 'tbl_xxx' には重複したキーは挿入できません。」という様なメッセージが返されます。このメッセージをVB側に返したいのですが、方法がわかりません。質問は以下の3つです。 1)上記の様なエラーの場合は、vb側でon error goto&errorsコレクションでエラーハンドリングは出来ないのでしょうか?(現状トラップしてくれません。) 2)出来ないのであれば、ストアド内でエラーメッセージを取得して、outputパラメータで返却するしかないのかなと思っております。 3)なぜか、create tableで既にあるテーブルを指定してわざとエラーを発生させた直後に@@errorでvb側にリターン値を返却してもempty値として返されます。なぜでしょう。 以上、3点について教えて下さい。(何れかでも構いません)よろしくお願いします。 環境:win2000,sqlserver2000

  • ストアドを使う場合

    お世話になります。 ストアドをどういったときに使用したらいいか分かりません。 ストアドを使うとネットワークの負荷を軽減できるというのは 分かるのですが、単純に1テーブルを参照する場合は ストアドでなくてもそれほど変わらない? 複数にリンクがある場合に使用するべきなのですか? それともトータル値を取得したり計算を行わせたりする場合 に使用するべきなのでしょうか? 例えばVBにADOなどで直接SQL文を書くのと ストアドを呼ぶのでは 何を基準に直接SQLをよんでいいのか、ストアドを呼んだ方がいいのか 基準となる考え方がわかりません。 質問文が分かりずらかったらすみません。 お分かりになる方ご回答お願いします。

  • ストアドをまたがるローカル一時テーブル

    SQL Server 2005 でストアドプロシージャ(以降SPと省略) を作成しています。 複数の SP から、構造が同じローカル一時テーブル (テーブル名が # から始まるテーブル) を使用したい為、 CREATE するだけのローカル一時テーブル作成SP、 DROP するだけのローカル一時テーブル削除SPを、 それぞれ作成しました。 次に、ローカル一時テーブルを使用したい SP 内で、 ローカル一時テーブル作成SP を EXECUTE 後、 ローカル一時テーブルに対し、INSERT をしたところで 以下のようなエラーとなります。 ※INSERT の変わりに、SELECT にしてみても同様でした。 メッセージ 208、レベル 16、状態 0、プロシージャ TEST_SP、行 155 オブジェクト名 '#LocalWorkTable' が無効です。 ※TEST_SP とは、ローカル一時テーブルを使用したい SP の名前  #LocalWorkTable とは、ローカル一時テーブルの名前 グローバル一時テーブル (テーブル名が ## から始まるテーブル) に変更すると、正常に動作しましたが、 セッションをまたがって使用させたくないのです。 あと、 ローカル一時テーブル作成SPを使用せずに、 ローカル一時テーブルを使用したい SP 内で、直接 CREATE すれば 正常に動作しましたが、 上記にも書いたように、複数の SP で構造が同じローカル一時テーブル を使用したいので、できれば、別 SP にしたいと考えております。 ストアドをまたがって、ローカル一時テーブルを使用する事は できないのでしょうか?

  • ストアド(PL/SQL)でログイン処理を行いたい

    お世話になります。 ログイン処理をストアドで行いたいと考えております。 具体的には、IDとパスワードを入力後「OK」ボタン押し下時IDとパスワードを引数とするストアド(loginCheck())が呼ばれます。処理の流れは次のとおりです。 (1)「Aテーブル」内にIDが存在するかをチェック (2)なければー1を返す。あれば、存在するレコードに対し てパスワードが一致しているかをチェック (3)もしパスワードが一致していなければー1を返す  一致していれば0を返す。 以上のような機能を持つストアドを作成しようと考えています。サンプル等ございましたらよろしくお願いします。

  • sqlserver でCreatしないでストアドを使いたい

    お世話になります ストアドのクリエイトがかけられないのですが、 VB.NETで戻り値を取れるようなストアドを使用したい状況です クリエイトをかけずに戻り値があるような動的なSqlは流せるのでしょうか テーブル以外はクリエイトしてはいけないという不思議な条件がついた開発に参加することになってしまったのです・・・ どなたか御教授いただけたらありがたいです

  • SQLServer ストアド レスポンス

    SQLServer ストアド レスポンス いつもお世話になります。 約100万件のテーブルから20行程度抽出するストアドがあります。 問合せ画面で使用していますが、通常は問題なくサクサク動くのですが、突然遅くなる時があります。 インデックスは付いてます。 そんな時、クエリアナライザで、直接ストアドを起動した後、再度画面から問い合わせると通常のスピードに戻ります。 ストアド直接起動時も最初は遅く、2回目以降は通常スピードです。 偶然なのかどうか調査中ですが、どなたかこんな経験&対処された方おりましたら、ご教授頂けないでしょうか。 SQLServer2000+VB.NETで開発してます。

  • VBからオラクルの先頭レコードを取得

    VB6をoo4oでオラクルに接続しています。オラクルのテーブルの先頭レコード値や次のレコードの値の取得方法を教えて下さい。フィールドの値を参照して取得するのではなく、ただ単に先頭レコードや次のレコードの値を取得したいです。教えて下さい!

  • Acess2000でADOを使用しレコードに既存のビットマップデータを格納したい

    知っている方がいたら教えて下さい。 Access2000のテーブルでデータ型がOLEオブジェクト型のフィールドにAccess2000VBAを使用し、レコード追加時に既存のビットマップファイルを格納してレコード追加したいのです。ご存じの方お教え下さい。

  • Acess2000でADOを使用しレコードに既存のビットマップデータを格納したい

    知っている方がいたら教えて下さい。 Access2000のテーブルでデータ型がOLEオブジェクト型のフィールドにAccess2000VBAを使用し、レコード追加時に既存のビットマップファイルを格納してレコード追加したいのです。ご存じの方お教え下さい。