dbExpress4のServerCharSetプロパティ
高橋(智)です。
RAD Studio 2007 には、Unicodeに対応したdbExpressドライバと、TWideStringFieldに対応したデータセットが搭載されています。(※BDS2006では、dbGO(ADO)だけがUnicodeに対応していました)
しかし、MySQLやInterBaseなどに接続する際に、今回紹介する「ServerCharSetプロパティ」を「TSQLConnectionのParamsプロパティ」に明示的に追加する必要があります。この「ServerCharSetプロパティ」はオンラインマニュアルには詳しい記載はありませんが、ドライバの設定情報が収められている「C:\Users\Public\Documents\RAD Studio\dbExpress\dbxdrivers.ini」や「C:\Documnents and Settings\All Users\Documents\RAD Studio\dbExpress\dbxdrivers.ini」には記載されています。
たとえば、MySQL5.0.xのutf8テーブルにアクセスする場合は、予め[エディタ(C)...]ボタンをクリックして、「ServerCharSet=utf8」というパラメータを追加する必要があります。
![]()
その他、InterBaseのUnicodeテーブルにアクセスする場合は、やはり予め[エディタ(C)...]ボタンをクリックして、「ServerCharSet=UTF8」または「ServerCharSet=UNICODE_FSS」 というパラメータを追加する必要があります。
この後、データセットにフィールドを追加すると型として「TWideStringField」が認識されるようになります。
Share This | Email this page to a friend
Posted by Tomohiro Takahashi on February 26th, 2008 under C++, Database, Delphi, Non Tech |

RSS Feed

December 6th, 2008 at 5:52 pm
dbExpress4のServerCharSetプロパティ について
BDEから変更しなければならないので、
推奨されている Blackfishを使おうとしています。
ところが、
TClientDataSetのFilterで、
例えば、
KUBUN=’一般男子’
と漢字を使用すると、該当データがあるにもかかわらず、何も表示されなくなります。
フィルターを、例えば、
KUBUN=123
と漢字を使用しない場合にはフィルターが効きます。
このTClientDataSetのフィルターに漢字が使えないという現象は、この「dbExpress4のServerCharSetプロパティ」の問題と同じ問題なのでしょうか。
しかし、TSQLConnectionのParamsプロパティに次のいずれを追加しても効果ありません。
ServerCharSet=UTF8
ServerCharSet=UNICODE_FSS
ServerCharSet=SJIS_0208
また、これらの設定をしてClientDataSetの OnFilterRecord に次のように記入しても、全データが表示され、フィルターの効果は出ませんでした。
procedure TProtform.ClientDataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := DataSet['KUBUN'].AsString = ‘一般男子’;
end;
接続は次のようにつなげています。
TSQLConnection->TSQLDataSet->TDatasetProvider->TClientDataSet->TDataSorce->TDBGrid
もし、データベースのフィルターで漢字が使えないのであれば、
日本では使い物にならないことになります。
Blackfishについては本も出ていませんから、メーカーである御社の情報のみが頼みということになります。
しかし、この問題についてマニュアルにも書いてありません。
高橋(智)さんも[「ServerCharSetプロパティ」はオンラインマニュアルには詳しい記載はありませんが・・]と書かれています。
http://blogs.codegear.com/teamj/2008/02/26/118/
情報がなければ Blackfish を使う人はそれほど増えないことになります。
事実、ブログでBlackfishを使うことをあきらめたという記事も出ています。
Blackfishを使っている人はいない、と書いているブログもあります。
メーカーとしてはBDEの代わりとして推奨しているBlackfishについて、利用できるように、Filterが使えるように、十分にマニュアルで説明しておく必要があるのではないでしょうか。
このような「御社のソフトで説明不足の場合」にも、サポート契約とインシデントを要求するのでしょうか?
このメールでは回答は帰ってこないのでしょうか。
なお、DelphiはDelphi3から使用しており(正規ユーザー)、BDEを利用したソフトは数多く作成して、Filterも使用しています。この問題についてDelphi2009で作成中。
ご返事か解説を期待しています。
December 10th, 2008 at 3:58 pm
TClientDataSetのFilterについては、古くは Delphi 7 の頃から問題を抱えています。現時点でQualityCentralにはQC#67792,QC#67485,QC#66622,QC#66618,QC#10828,QC#6740,QC#4790と言った報告が登録されています。
ClientDataSetの OnFilterRecord についてはちょっと分かりません。
December 10th, 2008 at 4:01 pm
> このメールでは回答は帰ってこないのでしょうか。
可能であれば、インフォメーションセンターまたはテクニカルサポートにコンタクトしていただけますようお願いいたします。
December 10th, 2008 at 4:16 pm
Blackfish(.NET版およびJava版)については、サーバ側では文字列データをUnicode(16bit単位)で管理しますので、ServerCharSetプロパティによる指定は不要です。
December 10th, 2008 at 4:42 pm
Delphi 2009 と Blackfish で試してみましたが、以下のようなコードで特に問題なくフィルタリングが可能でした。
—————-
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientDataSet1.Filter := ”;
ClientDataSet1.Filtered := True;
ClientDataSet1.Active := True;
end;
procedure TForm1.ClientDataSet1FilterRecord(
DataSet: TDataSet; var Accept: Boolean);
begin
if DataSet.FieldByName(’DATA’).AsString = ‘かきくけこ’ then
Accept := True
else
Accept := False;
end;
—————-