• ベストアンサー

EUCとSJISの変換文字列のレコードへの書込みについて

WindowsのサーバーでデータベースはMySQLです。今回、Linuxのサーバーからもダイレクトにデータを取得(SQLのselect文)しWindowsのサーバーへデータの書込みを行ったりLinux側へデータ書込みを行うことになりました。 そこでEUC,SJISの文字列変換なのですが、レコードセットなどSelect文でEUCのデータを取得するとSQLでエラーになったり正常に値が取得できません。NKF32でテキストファイル間では変換できるのですが、直接テーブルからデータを取得しEUCまたはSJIS変換をおこないSQLで書込みを行うことはやはりVBでは無理なのでしょうか。ご経験又は知識 をお持ちの方ご教示板だければ幸いです。

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

  • ベストアンサー
回答No.2

ADODB.Stream で対応できると思います。 http://homepage1.nifty.com/MADIA/vb/vb_bbs2/200401_04010054.html

goobit
質問者

お礼

アドバイスありがとうございます。 お返事が遅れてしまい申し訳ございません。 早速試してみました。 以下のケースでzzzzテーブルのfield_aはEUCの文字列が格納されています。 このフィールドをレコードセットで取得しSjisに変換かけ 最終的に他のテーブルに書き込む処理を行いたいのです。 いかのようにコードをかいてみましたが思うような結果が得られません。ご教示くだされば幸いです。 Dim Stm As ADODB.Stream Dim Stm2 As ADODB.Stream Dim moji As String mySql = "select * from zzzzz" rsWksql.Open mySql cn2,adOpenStatic,adLockReadOnly 'JISコードのストリームを作成 Set Stm = New ADODB.Stream Stm.Open Stm.Type = adTypeText Stm.Charset = "EUC-JP" 'あるいは"Shift_JIS"や"EUC-JP"とか '文字列を格納 Stm.WriteText rsWksql("field_a") Dim B() As Byte Stm.Position = 0 Stm.Type = adTypeBinary B = Stm.Read() Set Stm2 = New ADODB.Stream Stm2.Open Stm2.Type = adTypeBinary Stm2.Write B Stm2.Position = 0 Stm2.Type = adTypeText Stm2.Charset = "Shift_JIS" moji = Stm2.ReadText() MsgBox moji 'ストリームの破棄 Stm.Close Set Stm = Nothing End Sub

その他の回答 (1)

回答No.1

問題が SELECT 文にセットするキーワードの文字コードセットが異なるために起きているなら、キーワードを変数に代入したあとコードセットを変換し、それから SELECT 文を発行すればよいと思います。 見当はずれな指摘でしたら、あしからず。

goobit
質問者

お礼

アドバイスありがとうございます。 正確に記すとSQLでEUCの値を取得した後、VBのアプリケーション内で値を認識した時にVBではunicodeを使用しているためEUCを認識できず既にその時点で文字化けが発生してしまっているようです。 これは避けられないのでしょうか・・・。

関連するQ&A