匿名のっかり頂きましたので【解決600pt】で再質問させて頂きます。

MySQL+ADO+ODBC+ASP(VBScript)で、
Microsoft VBScript 実行時エラー エラー '800a000d'
型が一致しません。
というエラー発生します。
上手く参照できないフィールドがあるようです。
ODBC接続に問題があるかと思うのですが、
解決方法を教えていただけますか?

※詳細情報はコメントに書きます。
※良い回答が複数の場合はシェアになります。(^^;)

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2007/06/06 09:23:55
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:hallo21 No.1

回答回数246ベストアンサー獲得回数2

linuxをつかう。

id:TNIOP No.2

回答回数2344ベストアンサー獲得回数58

http://tryasp.winscom.co.jp/faq.asp

こちらにそれ系のエラーについてのQ&Aがありましたので参考にしてみてください。

  • id:llusall
    SQL
    SELECT *, DATE_FORMAT(date,'%Y%m%d') AS Hizuke1,
    CONVERT(DATE_FORMAT(date,'%Y%m%d'),CHAR) AS Hizuke2,
    date As Dt
    FROM hogetable;

    テーブル
    CREATE TABLE `hogetable` (
    `id` int(11) NOT NULL default '0',
    `test1` varchar(10) character set sjis collate sjis_bin default NULL,
    `test2` varchar(10) default NULL,
    `date` datetime default NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=sjis;

    'データ
    id test1 test2 date
    1 test1 test2 2007/05/30

    '接続文字列
    "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;PORT=3306;DATABASE=<DBNAME>; USER=<USR>;PASSWORD=<PWD>;OPTION=2;STMT=set names sjis;"
    ※OPTIONは、2,3,16834,16387を試行しましたがダメ。

    'ソース
    Response.Write(CStr(rs("id").value) & "<br>")
    Response.Write(CStr(rs("test1").value) & "<br>") '文字化け
    Response.Write(CStr(rs("test2").value) & "<br>") 'OK
    Response.Write(CStr(rs("date").value) & "<br>")
    Response.Write(CStr(rs("Hizuke1").value) & "<br>")
    Response.Write(CStr(rs("Hizuke2").value) & "<br>") '文字化け
    ※上記は、CStrでキャストしている為、「文字化け」して表示されるが、
     CStrを付けないと「型が一致しません。」でエラーになる。

    '環境
    レンタルサーバ
    Win2003(たぶん)
    MySQL 4.1.21
    MySQL ODBC 3.51 Driver

    'その他
    ・日本語の文字化けという問題ではありません。
    ・DATE_FORMAT関数を使用した場合のフィールド取得がダメ。
    ・CONVERT(DATE_FORMAT(date,'%Y%m%d'),CHAR) AS Hizuke2 とキャストするとOK。
    ・「character set sjis collate sjis_bin 」のフィールド取得がダメ。
    ・CONVERT(test1,CHAR) AS test1X とキャストするとOK。
    ・ほぼ同じ環境(バージョン)の私のマシン(xp,2k)では正常に動作する。
    ・このMySQLを私の正常動作マシンから参照させると正常に動作する。
    ・レコードセットのフィールド値の型がおかしくなっている模様。
    ・rs("test1").valueとrs("Hizuke2").valueは、バイト型の配列になっている模様。
    ・とりあえずは、SQL中でキャストすれば回避できそうだが、ソースの改修は厳しい。
     ODBCドライバ、もしくはADOの不具合でしょうか。ODBC接続文字列の不正?
  • id:llusall
    過去回答履歴を拝見させていただきました。
    誠に勝手ながら、
    回答者1様
    回答者2様
    のオープンは見合わせたいと思います。
  • id:llusall
    まとめ
    問題
      特定のフィールドがバイト型の配列で取得されてしまう

    回避策(ごまかし方)
    1.SQLで対応
      CONVERT関数でキャストする
      CONVERT(<フィールド>,CHAR)

    2.VBScriptで対応
      StrConv関数で変換する
      StrConv(rs(<フィールド>).value, vbUnicode)
      なお、VBScriptにはStrConv関数はないので、
      まっつんさんの
      http://www.ac.cyberhome.ne.jp/~mattn/AcrobatASP/
      を利用させていただきました。

    ※ソースの改修は厳しいです。
     設定などの見直しで回避したいです。
  • id:llusall
    すみませんが、キャンセルさせていただきます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません