Laboratory of Mobile Agricultural Chemicals Searcher
携帯農薬検索実験室

研究会

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
82 / 114 ツリー <前へ | 次へ>

〔185〕ACFinder LocalDB版 kabe (06/05/31 22:51)

〔278〕Re:ACFinder 060611版 Hidemi Oya (06/06/12 22:51)
〔279〕Re:ACFinder 060611版 Hidemi Oya (06/06/12 23:02)
〔280〕日本語フィールドが使えないのは sqlite3.dl... Hidemi Oya (06/06/13 2:27)
〔281〕Re:日本語フィールドが使えないのは sqlite3... Hidemi Oya (06/06/13 20:34)

〔278〕Re:ACFinder 060611版
 Hidemi Oya WEB  (06/06/12 22:51)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

>まだ不完全でした。データベースが開けない場合があり、その後制御不能になります。(;_;
>おそらくアクセス制限のかかっている共有フォルダの場合ではないかと思いますが、どう対応したらよいのかわかりません。(^^;
 アクセス制限って、使用するユーザがフルコントロールになっていないということでしょうか? という話であれば、everyone フルコントロールのフォルダを使ってくださいと謳っておくしかなさそうです。

>説明不足でした。データベース更新時に屋号を抜きながら tsusho フィールドを作成しますので、1回手動で更新してもらわないと直りません。
 そうですよね。追加フィールドの中にデータ持ってんですもんね。ついつい、macs for acis のつもりで試してしまいました(^_^;)。
 ということで、手動更新したら、判明している屋号についてはきれいに取れていることが判明しました。

>ちょっと、ここは原因不明です。
>グリッドに表示する前に Utf8ToAnsi しているのですが、AS の後の文字列によっては SQL エラーとなることもあり、それ以前の問題かもしれません。
 '病' が入ると 'misuse of aggregate' になるので、集約関数の一部として認識されてしまっているということですかねえ? いずれにしても、表示する際の UTF8 -> ShiftJIS 変換ではなく、クエリを SQLite に渡す際の ShiftJIS -> UTF8 変換の際に問題が発生している可能性が高いと思われます。現在は、クエリを丸ごと変換してるんですよね? だとすると、文字コード変換ライブラリのバグかな?
 ちなみに、[#259] の集約関数のエリアスを下記のようにするとちゃんと列に表示されます。'か', 'ビ', 'う', '菌' が入っているとダメですね。これらの文字が入ると、たいていは列が表示されなくなるだけですが、'うど' と続くと列表示は 'ぁEi' と化けます。ひらがなは、'ぁ' (SJIS:829F)から 'た' (SJIS:82BD)まではダメぽいです。'病' と同じ症状になる文字は見つけられませんでした。

max(case byochu when "べと病" then "●" else "" end) as べと,
max(case byochu when "灰色かび病" then "●" else "" end) as 灰色カび,
max(case byochu when "うどんこ病" then "●" else "" end) as ウどんこ,
max(case byochu when "斑点細菌病" then "●" else "" end) as 斑点細キン,
max(case byochu when "褐斑病" then "●" else "" end) as 褐斑,
max(case byochu when "菌核病" then "●" else "" end) as キン核

〔279〕Re:ACFinder 060611版
 Hidemi Oya WEB  (06/06/12 23:02)

引用なし
   > '病' が入ると 'misuse of aggregate' になるので、集約関数の一部として認識されてしまっているということですかねえ?
 '病' の後ろに '病1' のように何か文字を付けるとエラーが出なくなります。どんな文字を付加しても、列表示は '?E' となります。やはり、ShiftJIS -> UTF-8 変換の際に化けているようです。

〔280〕日本語フィールドが使えないのは sqlite3....
 Hidemi Oya WEB  (06/06/13 2:27)

引用なし
   > '病' の後ろに '病1' のように何か文字を付けるとエラーが出なくなります。どんな文字を付加しても、列表示は '?E' となります。やはり、ShiftJIS -> UTF-8 変換の際に化けているようです。
 違いますね。AnsiToUTF8 変換の際に問題があれば、検索語としての「べと病」でも問題が出なければなりません。したがって、AnsiToUTF8 及び Delphi 側の問題ではないということになります。
 ということは、残るは SQLite エンジンである sqlite3.dll ですね。ステートメント、関数、フィールド等はケース非依存なので、エンジン内で大文字か小文字に変換されているはずです。この際、フィールド名は UTF-8 であっても大文字/小文字変換をしてしまっているというのが、文字化けの原因だと考えられます。
 UTF-8 文字列を URL エンコードすると、%xx の中に英小文字が散見されるので、恐らく sqlite3.dll はフィールド名を大文字に変換しちゃってるんでしょうね。

 ってことで、これを回避するには、
(1) 日本語フィールド名を使う場合は、ユーザはフィールド名の先頭に 'JP_' などの識別子を付ける。
(2) ACFinder は、識別子直後の文字列を 16 進文字列などにエンコードして SQLite に渡す
(3) SQLite からの結果を受け取った際に、ACFinder は識別子直後のエンコード文字列をデコードして表示する
といった作業が必要ですね。

〔281〕Re:日本語フィールドが使えないのは sqlit...
 Hidemi Oya WEB  (06/06/13 20:34)

引用なし
   >フィールド名は UTF-8 であっても大文字/小文字変換をしてしまっているというのが、文字化けの原因だと考えられます。
 ってことは、フィールド名をケース依存にする
PRAGAM case_sensitive_column_name = 1;
なんてプラグマがあれば簡単に対応できるなと思ったんですが、残念ながらありませんでした(;_;)。やはり、Delphi 側で処理するしかなさそうです。

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
82 / 114 ツリー <前へ | 次へ>
ページ:  ┃  記事番号:   
(SS)C-BOARD vv3.8 is Free.