いつも参考にさせていただいております。
環境は以下の通りです。
OS:Windows7
データベース:Oracle11g
言語:DelphiXE2
(データ確認用でObjectBrowser12を使用しました。)
長い内容ですがご了承下さい。
タイトルの通り、日本語に中国語を混ぜた文字列をデータベースに
登録したいのですが、うまく登録することが出来無いのです。
まず、データベースに日本語と中国語を混ぜた文字列が登録出来るか
ですが、ObjectBrowser12と言うソフトを使いデータベース項目に
正しく登録され、表示出来る事を確認しております。
(データベース項目はNVARCHAR2で定義しています。)
私自身が以下の2通りの方法を主として、
データベース接続をしていますのでそれぞれについてテストしてみました。
1.コンポーネントにDBXPRESSを使用した場合です。
TSQLConnectionを使用しOracle11gに接続します。
1)データ抽出
TSimpleDatasetでCommandTextに抽出SQL分を入力しデータを抽出しました。
DataSourceのDataSetにTSimpleDatasetを設定し、DbGridに表示しました。
表示結果は中国語部分が?となります。
2)データ登録
TEditに日本語と中国語を入力し、TSqlQueryのSQLに追加SQL文を入力し
項目パラメータに日本語と中国語を混ぜた文字列がセットされたのを確認。
TSQLQuery.ExcSQLを実行。
データ登録結果は中国語部分が?となります。
2.コンポーネントにDbGOを使用した場合です。
TADOConnectionを使用しOracle11gに接続します。
1)データ抽出
TADOQueryを使用し、SQLに抽出SQL分を入力しデータを抽出しました。
DataSourceのDataSetにTADOQueryを設定し、DbGridに表示しました。
表示結果は中国語部分も正しく表示出来ました。
2)データ登録
TEditに日本語と中国語を入力し、TADOQueryのSQLに追加SQL文を入力し
項目パラメータに日本語と中国語を混ぜた文字列がセットされたのを確認。
TADOLQuery.ExcSQLを実行。
データ登録結果は中国語部分が?となります。
結果、DBEXPRESSでは、登録、表示ともに不可。
DbGOを使用すると表示は出来ましたが、登録は不可となりました。
うまく動作させるには、接続パラメータに何か必要なのでしょうか?
Delphi側で解決方法がありましたら教えていただけませんでしょうか。
> DbGOを使用すると表示は出来ましたが、登録は不可となりました。
登録のとき、
ADOQuery1.Parameters.ParamByName('HOGE').DataType := ftWideString;
ADOQuery1.Parameters.ParamByName('HOGE').Value := '文字列';
みたいに指定してもダメですか?
igyさん、お世話になります。
早速、ご教授頂いた文を実行しましたが、結果はダメでした。
やはり、中国語部分が?となります。
他に、ftVariantがありましたので試しましたが、結果はダメでした。
Oracleに関しては、詳しくないのですが、
文字化けに関するトラブルに強くなる【基礎編】 (1/3)
http://www.atmarkit.co.jp/ait/articles/0901/21/news124.html
を見てみたのですが、
データベースのキャラクタセットは、AL32UTF8ですか?
あと、NLS_LANGのキャラクタセットは、どのようになってますか?
igyさん、お世話になります。
データベースのキャラクタセットは、JA16SJISTILDEです。
クライアントにはNLS_LANG環境変数は設定しておりません。
他のツールでは、登録できていたので、関係無いかと思っていましたが
データベースキャラクタセットを変更して、試してみます。
igyさん、有難うございました。
データベースのキャラクタセットAL32UTF8で試したところ
うまく登録することが出来ました。
Delphiでは、データベースのキャラクタセットによるとなるのですかね?
ObjectBrowserやA5M2等のソフトはどうやっているんでしょうね。
ツイート | ![]() |