[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/06/19(Tue) 20:15
投稿者名:梶田
Eメール:
URL :
タイトル:
テーブルINSERT時に 実行時エラー'40002' が発生します
VB5、SQLServer6.5にて、RDO接続でINSERT処理を行うと、
「rdoConnection.Execute "INSERT文"」 の所で
実行時エラー'40002'
01000:[Microsoft][ODBC SQL Server Driver][SQL Server]コマンドは中断されました。
というエラーが発生します。

同じコネクションでSELECT文は通るのですが、INSERTは実行できません。
どうしたら解決するでしょうか?
宜しくお願い致します。

投稿時間:2007/06/20(Wed) 09:55
投稿者名:
Eメール:
URL :
タイトル:
Re: テーブルINSERT時に 実行時エラー'40002' が発生します
「”何か”が間違ってるから」としか言い様がない気がしますが…。

一番可能性が高いのはINSERT文の記述ミスでしょうか。
テーブル名や項目名のスペル間違い、入力データの桁あふれ、ユニークキーの重複等
考えられることは山ほどありますよ。

投稿時間:2007/06/20(Wed) 13:48
投稿者名:梶田
Eメール:
URL :
タイトル:
Re^2: テーブルINSERT時に 実行時エラー'40002' が発生します
返信有難うございます。

> "INSERT文"をDebug.Printなどで書き出してみる。
> 書き出したら、実際にクエリアナライザなどで実行して見る。

INSERT文については、デバックで書き出されたSQLをAccess、SQLServer共に
クエリで流すとINSERTされますし、
重複についても、エラーが発生したSQLをクエリで流すとINSERTされるので、
まずSQLの記述ミスではないと思います。

投稿時間:2007/06/20(Wed) 10:39
投稿者名:いな
Eメール:
URL :
タイトル:
Re: テーブルINSERT時に 実行時エラー'40002' が発生します
ありきたりだけれど、
"INSERT文"をDebug.Printなどで書き出してみる。
書き出したら、実際にクエリアナライザなどで実行して見る。
というのがデバッグの第一歩かなぁ〜。

INSERT文の場合、琴さんの指摘のほかにも
一制約キーが重複してた〜。
ぢつはシングルクオート(')がない〜。
とか、そういったことに気づくのも書き出してからだと思います。

投稿時間:2007/06/20(Wed) 14:00
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: テーブルINSERT時に 実行時エラー'40002' が発生します
> VB5、SQLServer6.5
十数年前のシステムのメンテナンスですか…大変ですね。

> 01000:[Microsoft][ODBC SQL Server Driver][SQL Server]コマンドは中断されました。
> というエラーが発生します。
VB 本体の Err 情報ではなく、RDO の rdoErrors コレクションから、
それ以外の追加情報が得られませんか?

> 同じコネクションでSELECT文は通るのですが、INSERTは実行できません。
> どうしたら解決するでしょうか?
まずは、そのエラーを出しているのが、「RDO」「ODBC」「SQL Server」の
いずれであるのかを追跡することが重要かと思います。

ODBC ドライバや SQL Server の管理ツールには、SQL ログを取得する機能などがあると
思いますので、それらを使って「そもそも、INSERT コマンドは、サーバまで届いているのか?」
「どのようなデータを INSERT したときにエラーとなるのか」などを検証しては如何でしょう。

投稿時間:2007/06/20(Wed) 15:40
投稿者名:梶田
Eメール:
URL :
タイトル:
Re: テーブルINSERT時に 実行時エラー'40002' が発生します
魔界の仮面弁士さん、いなさん、琴さん
返信有難うございます。

解決致しました。

原因はいなさん、琴さんのおっしゃった通りSQL文でした。
単純にINSERTする項目の文字数がオーバーしていました。

アクセスやSQLServerのクエリアナライザでは、文字がオーバーしていても
自動的に切り捨てられ、rdo接続の場合はそれがなくエラーがはかれるようです。
それが今回困惑した原因だと思います。

今回のエラーの確認方法は、
デバック中にrdoEngineのrdoErrorsに、詳細なエラー内容が詳しく記載されていました。