2016-05-04 41 views
1

状況:従来の古典的なASPコードを使用して、古いサーバから新しいサーバにコードベースを移動しようとしました。MySQL ODBC 5.1ドライバが間違ったデータ型をADODBに返します

コードは、MySQL ODBC 5.1ドライバとADODB.Connectionオブジェクトを使用して、Windowsサーバー上のMySQLデータベースに接続しようとします。

Connection String = "Driver={MySQL ODBC 5.1 Driver};Server=dbserver;Database=dbname;Uid=username;Password=password;Option=3" 

クエリ結果は、ADODB.RecordSetオブジェクトで返されます。 私は標準のMySQL整数を含むフィールドにアクセスしようとすると、私はこのエラーを取得:

Microsoft VBScript runtime error '800a01ca'
Variable uses an Automation type not supported in VBScript

私は手動でCLNGを(使用してフィールドを変換した場合)、エラーが解消され、正しい値が返されます。しかし、整数への各参照を手動で検索して手動で変換するコードが多すぎます。

これらの値は、VarType()が19を返します。これは、VBが理解できないLong型のデータ型のようです。 (See here) ODBCドライバは、長い整数に対してVarType 3を返すはずですか? (see here

接続文字列の "option ="パラメータにオプション16384(NO_BIGINT)を渡そうとしましたが、違いはありませんでした。

これを修正する方法はありますか? Long型のデータ型としてlongを返すためにMySQL ODBCドライバに渡すオプションがあるはずですが、見つけられません。

誰もが言及する前に:はい私たちは古典的なASPが悪いことを知っている。いいえ、私たちはこのコードを他の何かに移植するリソースを持っていません。現行のASPで従来のASPで作業を続けるだけで済みます。

+2

古典的なASPが何らかの形で本質的に悪いと言ってもらえませんか。 (私はMySQLで働いたことがないので、実際の質問には役に立たないが、私はそこに書きたいと思っている) – Martha

+0

@Martha彼らはそれを書いておく必要はない、Classic ASPはそれだけでは悪くない古い。まだ.NETに移行しないでサポートされなければならないプロジェクトがたくさんあります。クライアントはそれがどのように実行されるので、それが置かれたままになっている多くの時間。 – Lankymart

+1

OKだからなぜdownvote?私は何を間違えたのですか? –

答えて

1

私は最後にこの問題を発見しました。わからないなぜこれが発生しますが、MySQL ODBCドライバのバグでなければなりません。

UNSIGNED属性を持つ整数フィールドはエラーを引き起こします。この属性を削除すると、フィールドの値が標準のInteger型として返されます。どうやら、ODBCドライバはunsigned intからvbscript Integer型への変換を適切に処理しておらず、代わりにLongへのポインタを返しています。

私はブール値として使用していたtinyint(1)フィールドでもこの問題に気付きました。データ型をtinyint(1)からint(11)[デフォルト]に変更すると、このエラーも解消されました。

うまくいけば、これは他の誰かを助けるでしょう。参考までに、私はこの問題をMySQL ODBC Driverフォーラムにも投稿しましたが、誰も反応することを心配していませんでした。

関連する問題