2016-09-12 5 views
1

ユーザーがシステムメッセージ2627の代わりに重複したキーを入力したときに、SQL ServerからMS Accessに渡すカスタムエラーメッセージを設定しようとしています。私はsp_addmessageとRAISERRORとTRY/CATCHブロックを読んだことがあります。これらはすべて理にかなっています。しかし、私が見たところでは、RAISERRORコード(とTRY/CATCHブロック)をどこに置いて実際にアプリケーションに戻すのかは分かりません。では、コードはどこに行きますか?SQL RAISERRORコードはどこに配置しますか?

+2

RAISEERROR()はSQL関数です。返されるエラーがあるときに呼び出します。ストアドプロシージャでカプセル化する必要はありません。これは、いつでもあなたが使いたい場所で使用できるようになっています。 –

+0

@スティーブンメイズ大丈夫、そうです。私はまだRAISERRORを使用するコードをどこに置くべきかわかりません。 – Rominus

+0

RAISERRORは本当に必要ありません。意味のあるメッセージを表示するには、VBAでエラーハンドラを使用します。次に例を示します。https://social.msdn.microsoft.com/Forums/office/en-US/77c6075b-e18c-4598-a9d4-db2a91e8270c/trap-error-in-access-form-linked-to-sql -server-table?forum = accessdev – Andre

答えて

4

重複したキーを入力するユーザーの観点から考えてはいけません。代わりに、ユーザーがキーを入力するだけで、その中のいくつかはキーを挿入しようとすると重複していると考えられます。これは微妙な違いですが、ここでは役立ちます。特定のタイプの挿入ではなく、すべての新しいテーブルの挿入に対してコードを使用できると考えるからです。

ユーザーがキーを入力すると、INSERT SQL文が実行されます。キーが重複していて、それを防ぐためにテーブルに定義された制約がある場合、INSERTステートメントは失敗します。 AccessアプリケーションでカスタムSQLを作成している場合は、これをTRY/CATCHで囲み、RAISERRORをCATCHブロックに入れます。あなたのAccessアプリケーションがSQLを全く見ないようなものであれば、あなたは立ち往生していて、組み込みの振る舞いをしなければならないかもしれません。

+0

私は自分で開発しているSQL Serverバックエンドでアプリケーションを実行しているので、SQLを書いています。私があなたの答えを正しく読んでいるなら、TRY/CATCHをテーブルのコードの制約に入れますか?私。 CREATE TABLEステートメントで? – Rominus

+0

負の@Rominus、あなたはINSERT文に入れます。 – scsimon

関連する問題