アプリ版:「スタンプのみでお礼する」機能のリリースについて

タイトル通りの質問です。例えば、重複キーエラー時等はクエリアナライザを使用してストアドプロシージャを実行した場合に、「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

A 回答 (1件)

1)について。


VB側のErr.Discriptionに入りませんか?
もし、入らないのであれば、試してないので断言は
できませんが、少なくとも、RAISERROR でストアド
内でRAISEすれば取れそうな気がします。

3)について
ストアドで返した値ではなく、エラーとなるSQLを実行
した後にVB側で@@ERRORを取ろうとしてもダメです。
(そう言う事でないならごめんなさい)
ストアドのOUTとして返すか、BEGIN~ENDで括った形で
@@ERRORをとればイケルと思います。

この回答への補足

色々試していたので連絡が遅くなり申し訳ありませんでした。取り急ぎ、Err.Descriptionには何も入りません。Raiserrorも試してみましたがon errorに引っ掛かりません。しかも恐らくRaiserrorはユーザー定義エラーを発生させる様なものかなと思います。やりたい事はストアドプロシージャで発生したシステムエラーメッセージをそのまま(ユーザー定義メッセージ等は作成しないで)VB側に返したいだけなのですが。。。つまり、on errorで引っ掛からないならば、ストアドからoutパラメータでエラーメッセージを返すというださい方法でも構いません。ですが、ストアドでそのエラーメッセージを取得する方法すらわかりません。(勿論@@ERRORでエラー番号は取れます。)master DB内のsysmessagesテーブルにエラー番号とメッセージの対応表が格納されている様ですが、これをselectで取得するという事も考えましたが、可変文字列(制約名、オブジェクト名)等がある為、そのままでは使用できません。何か良い方法はありませんでしょうか?イメージ的にはon errorで取れない事がそもそもなぜ?どういうエラーなら引っ掛かる?という感じで、次の手段として、@@ERRORMSGみたいなものがあってシステムエラーメッセージがストアド内で簡単に取得出来る方法が無いかな?という状態です。よろしくお願いします。

補足日時:2004/12/28 11:31
    • good
    • 0
この回答へのお礼

遅くなりましたが、締め切らせて頂きます。ありがとうございました。

お礼日時:2005/01/26 10:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!