はじめまして。
いつもは過去ログを参考にさせていただいているのですが、
今回はどうしてもうまくいかないので質問させてください。
linuxサーバー上にあるMySQLデータベースに、windowsからMySQLODBCを利用して接続してDBGridに結果を表示させようとすると文字化けしてしまいます。
DBGridのFontプロパティに文字コードを設定する
Charsetという項目があったのですが、SJISはあってもEUCはありませんでした。
どのようにすればEUCで動いているデータベースのデータを文字化けすることなく表示できるのでしょうか?
windowsXP
Delphi2005
を使用しています。書き忘れました。
この掲示板の全トピックから単語:「かころぐ」を検索してみましょう。
はい。
そちらのログも拝見させていただいたのですが、私も同様に自動変換が行えるODBCはEUC変換を行うというオプションを設定してもエラーが発生し、なぜか接続できなくなってしまうのです。
procedure TForm1.Table1Field1GetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
Text := EUCtoSJIS(Sender.AsString);
end;
こちらも、私はtableを使用しておらず、
TADOConnection;
TADODataSet;
TDataSetProvider;
TClientDataSet;
TDataSource;
TDBGrid;
以上を使用してDBGridにtableに表示させているので、どのように応用すればよいのかが分からず、あと、Sender.AsStringの部分も、ここに文字化けを直したいテーブル情報を入れればよいと思っているのですが、上の5つを接続したらすぐ、DBGridに文字化けではありますがテーブル情報が写ったので、コードは白紙に近く、なにを代入したらよいのかがわかりません。
どのようにしたら良いのでしょうか?
Helpでみると、TDBGridのCharsetには、表示するもの以外にもいろいろあるようです。セットしてみればどうでしょうか?
それは・・・さん、HOtaさん、ありがとうございます。
結構いっぱいっぱいで御礼が遅れてしまいました。すみません。
>Helpでみると、TDBGridのCharsetには、表示するもの以外にもいろいろあるようです。セットしてみればどうでしょうか?
FontのCharsetの、SHIFTJIS_CHARSETというのを見つけ、セットして実行してみましたが残念ながら変わりませんでした。
あとは、どのような方法があるのでしょうか?
テーブル無かったら、どっちを選ぶ?
ちゃぶ台 DataSource1.Dataset.Fields[n].OnGetText
あぐら膳 DBGrid1.DataSource.Dataset.Fields[n].OnGetText
前にも書いた、本体がEUCであってドライバが勝手にSJISに直してくれたのを気づかないで一生懸命エンコードしてたというわけではありませんかよね。わたしは半日無駄にしましたが・・・。
> エラーが発生し、なぜか接続できなくなってしまうのです。
これはどのようなエラーなのですか?
ちゃぶ台さん、エンコードさん、ありがとうございます。
>テーブル無かったら、どっちを選ぶ?
DataSource1.Dataset.Fields[n].OnGetTextこちらを選べばよいのでしょうか?
procedure TForm1.DataSource1.Dataset.Fields[n].OnGetText
使い方は、このような形でいいのでしょうか?
>これはどのようなエラーなのですか?
Client does not support authentication protocol requested by server; consider upgrading MySQL client
このようなエラーが出てしまいます。
何が原因なのでしょうか?
イベントハンドラの書き方も分かってない?
う〜んさん、レスありがとうございます。
すみません。本当に何も分からず、手探り状態です。
本やネットを見つつ今まで何とかやってきましたが、どうしてもこの先に進めず、お手上げ状態です。
なんとしても、この文字コードの変換をしたいので、お力お貸しいただけませんか?
TFieldのOnGetTextのヘルプ見てみたら?
次の疑問です。
おそらくSELECT文でテストされているとおもいますが、もしやその中に日本語(SJIS)を入れているなんてことないでしょうか?
>Client does not support authentication protocol requested by server; consider upgrading MySQL client
は送信時のエラーに関するもののように私は感じますがいかがです?
該当するのであればSELECT文のエンコードを推奨します。
とりあえずさん、エンコードさん、ありがとうございます。
>TFieldのOnGetTextのヘルプ見てみたら?
はい、すみません。もっと勉強します。
>もしやその中に日本語(SJIS)を入れているなんてことないでしょうか?
いいえ、SELECT * FROM request;このようにしています。
ほかに、なにか問題になりそうなことはありますか?教えてください。
皆さんがおっしゃっていることは、TADODataSetを右クリックして、
項目の設定から、項目を追加すると表示されるTFieldのイベントで
処理すればどうでしょうかということです。
やってみる価値はあります。
もしかしてこれかな?
http://tod.cocolog-nifty.com/diary/2005/12/xamppphpmysql_6279.html
XAMPP上のPHP+MySQL文字化け解決
「SET CHARACTER SET SJIS;」というコマンド
ツイート | ![]() |