@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

エラー '80040e21'

1
投稿者投稿内容
パイロン
会議室デビュー日: 2007/01/30
投稿数: 3
投稿日時: 2007-01-30 09:45
従前NT4.0Serverで動かしていたASPを2003Serverに移行しているのですが
エラーが出て動かない部分があるので教えて下さい。

コード:
  set conObj  = Server.CreateObject("ADODB.Connection")
  set cmdObj  = Server.CreateObject("ADODB.Command")
  set rsObj   = Server.CreateObject("ADODB.Recordset")

  conObj.Open "DSN=*******","********","********"
  cmdObj.ActiveConnection = conObj

# 変数 SQL にSQL文を設定する処理がありますがここでは省略

  cmdObj.CommandText = SQL

  set objPar01 = cmdObj.CreateParameter("YYYYMM1",20,1,6,wYYYYMM)
  cmdObj.Parameters.Append objPar01

  set objPar02 = cmdObj.CreateParameter("YYYYMM2",20,1,6,wYYYYMM)
  cmdObj.Parameters.Append objPar02

  cmdObj.Prepared = True
  rsObj.Open cmdObj


   この行で「エラー '80040e21'」が発生します。

対象となるSQL文を
コード:
select ? YYYYMM1, ?YYYYMM2 from dual


とかのシンプルなものにしても同じエラーになります。

対象となるSQL文を
コード:
select ? YYYYMM1 from dual


としてパラメータの数を減らしたら

 Microsoft OLE DB Provider for ODBC Drivers エラー '80040e21'
 複数ステップの OLE DB の操作でエラーが発生しました。各 OLE DB の状態の値を確認してください。作業は終了しませんでした。

となりエラーメッセージが変わりました。

本来の「エラー '80040e21'」には他の詳細メッセージが出ていません。

どこを見直したらよいのかアドバイスいただけるようお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-30 10:12
引用:

パイロンさんの書き込み (2007-01-30 09:45) より:

この行で「エラー '80040e21'」が発生します。


http://www.google.co.jp/search?hl=ja&q=80040e21

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-01-30 10:26
select ? from dual の ? ってなんですか?
_________________
かるあ のメモスニペット
パイロン
会議室デビュー日: 2007/01/30
投稿数: 3
投稿日時: 2007-01-30 10:51
>じゃんぬねっとさん
googleでは該当しそうなものが見つかりませんでした。
(他の詳細メッセージが出ていないからわからないんですよ)

>かるあさん
普通なら
select * from table1 where column1 = ?
とでも書くのでしょうが
oracleの場合、dual表は単一行の戻り値を持つ関数に使用したりします。
例えば
select sysdate from dual
とか
select 2 * 3 from dual
とかです
select 1 from dual
でもOKなのでテスト的にパラメータを戻り値に設定してみました。
ゆいたん
ベテラン
会議室デビュー日: 2004/08/26
投稿数: 91
投稿日時: 2007-01-30 11:05
こんにちは。

パラメータなしでレコードセットを読めますか?
# 例えばselect * from dualとか

読めたなら、パラメータの指定方法がNGだと推測して
そのあたりを調査されてはいかがでしょうか。
# type=20ってなんでしたっけ。。。
Katze
ベテラン
会議室デビュー日: 2005/11/01
投稿数: 74
お住まい・勤務地: 1台でも せんだい
投稿日時: 2007-01-30 11:06
かるあさんは ? と YYYYMM1がスペースで分かれていたので、
その部分を指摘するため、たずねたのではないでしょうか?
書き間違えかもしれませんが、実際は ? と YYYYMM1はスペースで
分かれていますか?

パラメータを指定せずに
select 1 from dual
にした場合は正常に動作するのでしょうか?

パラメータを指定するとエラーになるのか、パラメータを指定しなくてもエラー
になるのか切り分けをしてみてはどうでしょう?

[ メッセージ編集済み 編集者: Katze 編集日時 2007-01-30 11:07 ]
パイロン
会議室デビュー日: 2007/01/30
投稿数: 3
投稿日時: 2007-01-30 11:41
解決しました。
ゆいたんさん と Katzeさん のアドバイスに従い
select sysdate YYYYMM1 , sysdate YYYYMM2 from dual
として実行しエラーが出ないことを確認しました。
次にCreateParameter("YYYYMM1",20,1,6,wYYYYMM)を
CreateParameter("YYYYMM1",3,1,6,wYYYYMM)にしたら正常に表示されました。
ちなみに20:asBigint、3:adIntegerです。元々が何故20を指定していたのかは不明ですが
年月日8桁しか入らないので"3"で問題はありませんね。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)