こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBからのODBC接続でSQLエラー

DBバージョン:MySQL5 ODBCバージョン:ODBC3.51 言語:VB2003
を利用し VBからSQLを発行した際、1バイト文字の場合は問題はなく SQL文内に日本語を含むとハンドルされていない旨のシステムエラーが出てしまいます

SQLAdminからStatusコマンドDBのキャラクタセット情報を確認してもSJISとして設定されており
またコンソールから直接SQL文を打ち込んでも正常に動作いたします

My.iniファイルも文字コードはSJISに置き換えてあり 何が原因かつかめません

*VBコード
Dim MyConString As String
Dim MyConnection As OdbcConnection
Dim strSQL As String
Dim myOdbcCommand As OdbcCommand
Dim iRet As String

MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + _
"SERVER=localhost;" + _
"PORT=3306;" + _
"DATABASE=kanri_db;" + _
"UID=xxxx;" + _
"PASSWORD=xxxx;" + _
"OPTION=3;" + _
"CHARSETENCODING=sjis"

'Connection
MyConnection = New OdbcConnection(MyConString)
'myConn.Open()
MyConnection.Open()
Console.WriteLine("Connection State::" & MyConnection.State.ToString)

'SQL
strSQL = "select csv_subitem from tbl_readtempcsv where csv_subitem='ワークグループ';"

myOdbcCommand = MyConnection.CreateCommand
myOdbcCommand = New OdbcCommand
myOdbcCommand.Connection = MyConnection
myOdbcCommand.CommandType = CommandType.Text
myOdbcCommand.CommandText = strSQL

iRet = myOdbcCommand.ExecuteNonQuery

どなたかご教示いただけないでしょうか 宜しくお願いいたします

投稿日時 - 2007-02-15 21:52:59

QNo.2755870

困ってます

質問者が選んだベストアンサー

my.iniのCLIENT SECTIONのdefault-character-setはMySQLが提供するクライアントアプリケーションのための設定です。そのため、ユーザ独自のクライアントアプリケーションは初期化時にキャラクタセットを設定する必要があります。

 質問者さんのコードでは、CHARSETENCODINGというパラメータを指定していますが、マニュアルを読む限りMySQLのODBCにはそのパラメータは存在しません。
 MySQLのODBCには STMT というパラメータがあり、ここに接続後に実行するステートメントを指定することができます。キャラクタセットを指定するステートメントは
  set names sjis (もしくは set character set sjis)
です。

コードの変更点としては
"CHARSETENCODING=sjis"

"STMT=set names sjis"
と変更することになります。

投稿日時 - 2007-02-16 18:35:49

お礼

hirosa-ok様

有り難う御座います ご指摘いただいた内容で望んでいた動作の
確認が出来ました

誠に有り難う御座います

投稿日時 - 2007-02-16 19:38:25

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問