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

研究会

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

〔323〕Re:日本語フィールド名
 Hidemi Oya WEB  (06/06/20 12:09)

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

> D6 と D7 の仕様の違いだとすれば、怪しいのは
>  p := PChar(t);
>の部分(D3 でも大丈夫だったような気はするけど…)ですかねえ?
 EncodeHex で
  P := PChar(Utf8ToAnsi(t));
が OK ですから、こいつは問題ないですね。
 で、ソースを見直してみたら、フィールド名の書き戻しができないことが判明しました(^_^;)。エラーメッセージのデコードは問題ないはずです。DecodeHex の end; から上に5行目の
//  Result := ReplaceRegExpr('hex' + t + '([^0-9a-f])', Result, AnsiToUtf8(s) + '$1', true);
  Result := ReplaceRegExpr('hex' + t + '([^0-9a-f])', Result, s + '$1', true);

//  Result := ReplaceRegExpr('hex' + t + '([^0-9a-f]|$)', Result, AnsiToUtf8(s) + '$1', true);
  Result := ReplaceRegExpr('hex' + t + '([^0-9a-f]|$)', Result, s + '$1', true);
に書き換えてください。

 SQLite3 の基本エンコードは Unicode のようなので、データベースの内容も SQL のやりとりも全て UTF-16 にしてやれば、問題なく日本語が通るのかもしれません。SQLite 3.3.6 の DLL が日本語データベース名を通してくれないのも、Unicode でなく ShiftJIS だからかも…。
 UTF-8 のフィールド名が正常に使えないのは、UTF-8 を無理矢理 UTF-16 に変換しているせいだと考えれば、理解できるような気がします。
・ツリー全体表示

〔322〕Re:日本語フィールド名
 Hidemi Oya WEB  (06/06/20 9:16)

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

>ちょっと今やってみたのですが、DecodeHex の方がうまくいきません。
 あれ〜? D7 では全く問題なく動作してたんですが…。複数作物登録一覧表とその設定例でできた SQL 文を全部エンコード/デコードできたので、「なす」も動作確認済みです。

>DecodeHex を使わない場合
>hex("なす") を SQLite に渡すと
>HEX82C882B7
>とフィールド名が表示されます。
 EncodeHex で渡した SQL 文は、SQLite で問題なく動作するわけですね?

>(SQLite が大文字に変換しているようです)
 予測は当たってましたね。UTF-8 なら影響しないはずなんですけどね。
 ちなみに、hex が HEX になっても問題なく Decode できることを確認しています。

>MessageDlg(DecodeHex('HEX82C882B7'),mtInformation,[mbOk],0);
>でも同様の症状なので、DecodeHex 関数の問題でしょうか。?
 ですね。

>ソースはそのままコピペしただけなんですが、どこかチェックポイントありますか。
 D6 と D7 の仕様の違いだとすれば、怪しいのは
  p := PChar(t);
の部分(D3 でも大丈夫だったような気はするけど…)ですかねえ? とりあえず、
  p := @t[1];
だとどうでしょう?
 それと、現状では最初に SHiftJIS に戻してからデコードしてますが、UTF-8 のままデコードして最後に ShiftJIS に戻す方法を残してあります。// でコメントアウトした行を生かして、その下の行をコメントアウトしてください。
 とりあえず、今思いつく範囲ではこんなところです。
・ツリー全体表示

〔321〕Re:日本語フィールド名
 kabe WEB  (06/06/20 6:35)

引用なし
   >Hidemi Oyaさん

kabe です。

早速ありがとうございます。
ちょっと今やってみたのですが、DecodeHex の方がうまくいきません。
DecodeHex を使わない場合
hex("なす") を SQLite に渡すと
HEX82C882B7
とフィールド名が表示されます。
(SQLite が大文字に変換しているようです)
DecodeHex を使うと、無限ループになっているのか、応答なし状態になってしまいます。
MessageDlg(DecodeHex('HEX82C882B7'),mtInformation,[mbOk],0);
でも同様の症状なので、DecodeHex 関数の問題でしょうか。?
ソースはそのままコピペしただけなんですが、どこかチェックポイントありますか。
・ツリー全体表示

〔320〕Re:通称
 Hidemi Oya WEB  (06/06/20 1:49)

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

>「フマキラー印」のスミチオン乳剤とマラソン乳剤は、「家庭園芸用」と同じカテゴリに入るようです。取り急ぎ報告まで。
 え゛っ? ってことは、「家庭園芸用」付きと無しを別通所とする際は、「フマキラー印」に限っては、通称に「家庭園芸用」を付加するという例外処理をしなければならないってことですね。
 適用を確認したら、確かに「家庭園芸用」と同じですね。貴重な情報をありがとうございます。

 しかし、農薬の種類の有効成分名の記載方法といい、もう少し一貫性のある記述方法はできないもんなんですかねえ…。これでは使う側はとまどうばかり(^_^;)。
・ツリー全体表示

〔319〕Re:日本語フィールド名
 Hidemi Oya WEB  (06/06/20 1:34)

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

 EncodeHex 関数を書いている時に確認したんですが、UTF-8 では 0x00〜0x7F は使われないような感じです。したがって、[#280]
> UTF-8 文字列を URL エンコードすると、%xx の中に英小文字が散見されるので、恐らく sqlite3.dll はフィールド名を大文字に変換しちゃってるんでしょうね。
は間違いですね(^_^;)。英子文字が散見されたのは ShiftJIS ですね。

 では何故フィールドアリアスに UTF-8 が使えないのかというと、SQLite 側で大文字/小文字変換する際のバグですかねえ?
・ツリー全体表示

〔318〕Re:作物・病害虫タブ
 Hidemi Oya WEB  (06/06/20 1:19)

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

 次のような方法の方が簡単かな…。
(1) テキストボックス直接入力は、今まで通り like 演算子とワイルドカードを使った検索
(2) 作物名選択ダイアログボックスを使った時は、ダイアログボックス内に複数選択作物表示テキストボックスを作っておいて、その値をそのまま in 演算子に渡して検索

 (2) はリスト型メタフィールドの展開と同じです。ダイアログボックス内の作物リストを sakumotsu_list とすると、単純に
s := 'sakumotsu in (' + QuotedCSV(sakumotsu_list) + ')';
でお終いです。
 定型処理タブでは、sakumotsu_list を edtTplSakumotsu.Text に代入してもらえばすみますし。
・ツリー全体表示

〔317〕Re:ACFinder 060619版
 Hidemi Oya WEB  (06/06/20 0:59)

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

 ACFinder のサイトではドキュメントも整備されつつあり、いよいよ正式リリースも間近でしょうか…。
 このツリーもかなり巨大になって見通しが悪くなってきたので、暫定版があと2〜3回で正式リリースになる時は正式リリース時に、まだしばらく暫定版が続くようなら次のバージョンから新スレッドにしてください。
・ツリー全体表示

〔316〕Re:SQLタブ
 Hidemi Oya WEB  (06/06/20 0:53)

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

>簡単にキーワードが指定できるようだったので AFEdit コンポーネントを使っています。
 特定文字列で始まる行全体を色分けできるような機能があれば、定型処理の説明文の章タイトルを色分けしてくれるとうれしいです。

>ところで拡張メモコンポーネントなんですが D6 + WindowsXP では使えるのでしょうか。
 ユーザの中には、その組み合わせで使っている人もいるようです。ただし、禁則処理などの Asian Language Version Only な機能は一切使えません。既に作者が開発を止めている(^_^;)コンポーネントなので、あえて使う必要はないかと…。
・ツリー全体表示

〔315〕Re:作物・病害虫タブ
 Hidemi Oya WEB  (06/06/20 0:45)

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

>今回作成していただいた定型処理ルーチンを、作物・病害虫タブにも応用して、複数作物検索を実現できないかなと思ってますが、まだ機能がよく理解できていません。(^^;
 エレメント型メタフィールドを展開する時は、テキストボックスの値を TStringList に CommaText プロパティで放り込んで、TStringList の1行(各要素)ごとに展開しています。
 TfrmMain.TemplateToQuery 関数の下記の部分です。メタフィールドを書き換えるわけじゃないので、for ループの中は単純に
s := s + 'sakumotsu like ("' + list.Strings[j] + '") or ';
でつないでいって、最後に
Delete(s, Length(s) - 3, 4);
s := '(' + s + ')';
としてやれば OK だと思いますが…。

list.CommaText := edtTplSakumotsu.Text;
for j := 0 to list.Count - 1 do dest.Add(ReplaceRegExpr('\[' + CField[f] + '\]', line, list.Strings[j], false));
・ツリー全体表示

〔314〕Re:ACFinder 060619版
 Hidemi Oya WEB  (06/06/20 0:26)

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

>060619版です・
 だ〜、早い早い! [#313] の日本語エンコード/デコード関数が間に合いませんでした(^_^;)。

>種類を左側におきました。
 ありがとうございます。やっぱりこちらの方が使いやすいです。
 一番上は、用途だったんですね。現在のパネル構成では、用途と名称が独立していることがやや分かりづらい感じがします。用途タブと名称タブに分けた方が分かりやすいかなあ…。でも、タブ切替しなくても良いので、今の方が使い勝手は良いような気も…。う〜ん、微妙ですね。[#310] のようになるなら、用途コンボボックスと名称テキストボックスの2つだけなので、やっぱりこのままかなあ。

>定型処理の作物名選択ダイアログに「追加」ボタンを追加しました。
 凄く使いやすくなりました。[#309] のように統一してもらえると完璧です。

>>作物検索語を書き換えてエンターキーを入力すると再検索できたりするともっと良いですが
>にしてみました。
 これも非常に良くなりましたね〜。再検索で検索結果がどんどん追加されていくのは、私の想定以上でした。これで、既設定の作物名がある場合は、それを自動的に持ってきてくれると、もう何も言うことはありません。

>>IN 演算子が予約語として認識されていないので、追加をお願いします。
>修正しました。
 ありがとうございます。

 あと、[#297] の変更は、私の方の Main.pas では、TfrmMain.TemplateToQuery 関数の
 for i := 0 to FTemplate.Count - 1 do begin
  line := FTemplate.Strings[i];

 for i := 0 to FTemplate.Count - 1 do begin
  line := Trim(FTemplate.Strings[i]);
にしただけなので、対応をお願いします。

 それと、TRegExpr は BSD ライセンスと似ています。「appreciate」の解釈によって強さがかなり変わってしまいますが、ドキュメントかアバウトボックスに TRegExpr の著作権表示をしておいた良さそうです。アバウトボックスなら、原文通りよりは、「Created using TRegExpr Copyright(c) 1999-2004 by Andrey V. Sorokin, http://regexpstudio.com/」ってな感じでしょうかね。他に使用しているコンポーネントがあれば、ドキュメントに使用コンポーネント一覧とその著作権を表示する方法の方が良さそうです。
> If You use this software in any kind of product, it would be appreciated that there in a information box, or in the documentation would be an acknowledgement like "Partial Copyright (c) 1999-2004 by Andrey V. Sorokin, anso@mail.ru, http://RegExpStudio.com"
・ツリー全体表示

〔313〕Re:日本語フィールド名
 Hidemi Oya WEB  (06/06/19 23:03)

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

>(1) SQL 文側では「hex("日本語文字列")」と書いておくと、この部分を「hex十六進文字列」にエンコードする
>(2) エラー表示/フィールド名表示の際には「hex十六進文字列」を「日本語文字列」にデコードする
 これに基づいたエンコード/デコード関数を作成しましたので、組み込みをお願いします。SQLite の本家サイトを探したんですが、フィールド名の最大長が分かりませんでした。長くなりすぎないように ShiftJIS の文字列をエンコードしていますが、もしかしたら文字数制限に引っかかるかも…。

 エンコード/デコードルーチンで、AnsiToUtf8/Utf8ToAnsi も行ってしまいます。また、エンコード時に「hex("日本語文字列")」、デコード時に「hex十六進文字列」を含まない文字列はほとんどオーバーヘッドなくオリジナル文字列をそのまま返します。ってことで、SQLite に SQL 文を渡す際には現在の AnsiToUtf8 関数の代わりに EncodeHex を、エラー表示やフィールド名表示の際は Utf8ToAnsi 関数の代わりに DecodeHex を常に使ってもらって問題ありません。
 なお、テンプレートの「jp_[field]」の部分は、「hex("[field]")」に変更する必要があります。

function EncodeHex(src: string): string;
var
 t, h: string;
 p: PChar;
begin
 RegExprModifierI := true;
 RegExprModifierS := true;
 Result := ReplaceRegExpr('hex\(\s+("[^"]*")\s+\)', AnsiToUtf8(src), 'hex($1)', true);
 while ExecRegExpr('hex\("[^"]+"\)', Result) do begin
  t := ReplaceRegExpr('.*?hex\("([^"]+)"\).*', Result, '$1', true);
  p := PChar(Utf8ToAnsi(t));
  h := '';
  while p^ <> #0 do begin
   h := h + IntToHex(Ord(p^), 2);
   Inc(p);
  end;
  Result := ReplaceRegExpr('hex\("' + t + '"\)', Result, 'hex' + h, false);
 end;
end;

function DecodeHex(src: string): string;
type
 THex2 = array[0..1] of char;
 PHex2 = ^THex2;
var
 t, s: string;
 p: PChar;
begin
 RegExprModifierI := true;
 RegExprModifierS := true;
// Result := src;
 Result := Utf8ToAnsi(src);
 while ExecRegExpr('hex[0-9a-f]+', Result) do begin
  t := ReplaceRegExpr('.*?hex([0-9a-f]+).*', Result, '$1', true);
  p := PChar(t);
  s := '';
  while p^ <> #0 do begin
   s := s + Chr(StrToInt('$' + PHex2(p)^));
   Inc(p, 2);
  end;
//  Result := ReplaceRegExpr('hex' + t + '([^0-9a-f])', Result, AnsiToUtf8(s) + '$1', true);
  Result := ReplaceRegExpr('hex' + t + '([^0-9a-f])', Result, s + '$1', true);
 end;
// Result := Utf8ToAnsi(Result);
end;
・ツリー全体表示

〔312〕Re:成分ごとの総使用回数
 Hidemi Oya WEB  (06/06/19 22:25)

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

> ぱっと思いつくのはラウンドアップ系でしょうか。他は詳しく当たってみないと自信がありません。
 ありがとうございます。確かに、グリホサートもそうですね。2,4−PAと同様に、有効成分は「グリホサート○○」でも農薬の種類は「グリホサート」にまとめてくれれば何の問題もないんですけどね。あるいは、同一有効成分としてカウントする有効成分のリストを提供してくれるかね。
 現状の Excel データでは、使用基準省令でいう「含有する有効成分の『種類』ごとの総使用回数」を遵守するのは難しいですね。暗に「含有する有効成分ごとの総使用回数」を守れば良いと言ってくれてるのでしょうか?(誤解する人がいるといけないので、これは皮肉ですと補足しておきましょう^^;)
・ツリー全体表示

〔311〕Re:SQLタブ
 kabe WEB  (06/06/19 22:25)

引用なし
   >Hidemi Oyaさん

kabe です。

>>SQLエディタに簡易な入力支援機能を付けました。
> これはなかなか凄いですね。予約語の色分けまで付いているとは…。
簡単にキーワードが指定できるようだったので AFEdit コンポーネントを使っています。
ところで拡張メモコンポーネントなんですが D6 + WindowsXP では使えるのでしょうか。
・ツリー全体表示

〔310〕Re:薬剤タブ
 kabe WEB  (06/06/19 22:17)

引用なし
   >Hidemi Oyaさん

kabe です。

> 左上隅のコンボボックスは何のために用意されてるのでしょう?
用途を選択すると該当する用途の通称薬剤が全て表示されるだけです。
検索というよりは、農薬便覧の閲覧みたいな用途を想定していました。

> が、できれば、種類は選択せずにキーワード入力だけで、自動的に
>shurui LIKE '%キーワード%' OR shurui LIKE '%きーわーど%' OR meisho LIKE '%キーワード%' OR meisho LIKE '%きーわーど%'と展開してくれた方が便利ですね。
この方法に変更したいと思います。
・ツリー全体表示

〔309〕Re:作物・病害虫タブ
 kabe WEB  (06/06/19 22:09)

引用なし
   >Hidemi Oyaさん

kabe です。

> このため、ダイアログボックスで複数選択可能にするとともに、テキストボックス内に「"なす", "なす(露地栽培)"」のように書かれていれば、「(sakumotu like "なす" or sakumotsu like "なす(露地野菜)")」と展開するような機能を追加していただけると、非常に使いやすくなります。
定型処理タブの作物選択も含めて同じ選択ダイアログを使うようにしたいと思います。
今回作成していただいた定型処理ルーチンを、作物・病害虫タブにも応用して、複数作物検索を実現できないかなと思ってますが、まだ機能がよく理解できていません。(^^;
これについてはなんとか最優先で取り組みたいと思います。
・ツリー全体表示

〔308〕通称
 s_kobayashi  (06/06/19 21:51)

引用なし
   「フマキラー印」のスミチオン乳剤とマラソン乳剤は、「家庭園芸用」と同じカテゴリに入るようです。取り急ぎ報告まで。
・ツリー全体表示

〔307〕ACFinder 060619版
 kabe WEB  (06/06/19 21:45)

引用なし
   kabe です。

060619版です・
http://acfinder.kabe.info/

CSV保存、Excel出力、コピー、全てコピーなどの機能が、タブを切り替えた場合も作物、病害虫タブ内のグリッドだけを対象に動作していました。
その他、グリッドのフォント設定などを変更しても、作物、病害虫タブ以外は反映されませんでした。(^^;
気付いた部分は修正しましたが、まだ修正もれがあるかもしれません。

その他、いくつか修正してあります。
#303
> 薬剤候補なんですが、今の形なら、種類を左側において先に種類を選択してからキーワード入力の方が、エンターキー一発で検索できるので楽です。
種類を左側におきました。

#304
定型処理の作物名選択ダイアログに「追加」ボタンを追加しました。
>作物検索語を書き換えてエンターキーを入力すると再検索できたりするともっと良いですが
にしてみました。

#305
>IN 演算子が予約語として認識されていないので、追加をお願いします。
修正しました。
・ツリー全体表示

〔306〕Re:成分ごとの総使用回数
 s_kobayashi  (06/06/19 21:08)

引用なし
   >Hidemi Oyaさん

> ところで、イミノクタジン以外で複数の有効成分をまとめてカウントする有効成分をご存じの方は是非お教えください。

 ぱっと思いつくのはラウンドアップ系でしょうか。他は詳しく当たってみないと自信がありません。
・ツリー全体表示

〔305〕SQLタブ
 Hidemi Oya WEB  (06/06/19 11:28)

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

>SQLエディタに簡易な入力支援機能を付けました。
 これはなかなか凄いですね。予約語の色分けまで付いているとは…。テンプレートで多用している IN 演算子が予約語として認識されていないので、追加をお願いします。

>SQLタブ内の左側にテーブルとフィールド名を選択する覧があります。
>フォールド名のリストボックスでポップアップメニューが出ますので、適当に試してみてください。
 今のところ、骨格としてはこれくらいあれば十分ですね。これで、作物名/病害虫名などを GUI で設定できるようになれば、もう何もいらないかも…。

 SQL 文と結果は、現行2ペイン制と定型処理のような2タブ制とどちらが良いか微妙ですね。短い SQL 文だと2ペインの方が良いし、長い SQL 文だと2タブの方が良さそうです。
・ツリー全体表示

〔304〕定型処理タブ
 Hidemi Oya WEB  (06/06/19 11:12)

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

>#294の機能を取り入れてみました。
 素早い対応ありがとうございます。こんなに早く組み込まれるとは思ってもみませんでした。

 作物名ボタンですが、現在のままだと選択した作物だけにテキストボックスが書き換えられてしまうので、複数作物登録農薬一覧表のような用途では非常に不便です。このままの方式で行くなら、ダイアログボックス内に「追加」ボタンを追加して、テキストボックスにどんどん作物を追加できるようにする必要があります。
 できれば、2タブにして [#302] で書いたような選択方法と両方使えるとさらに良いですね。特にいろいろな作物を一括して選択する場合は、全一覧から選択できた方が便利です。ひとつ作れば、作物・病害虫タブでも同じものが使えますし…。

 病害虫ボタンは使いやすいです。作物検索語を作物名テキストボックスから自動的に持ってきてくれたり、作物検索語を書き換えてエンターキーを入力すると再検索できたりするともっと良いですが…。現在は、入力ミスで再検索したい場合はダイアログボックスをいったん閉じなければならないので、できれば再検索機能は欲しいですね。

 あと、私のサンプルが横着してたのが悪いんですが(^_^;)、テンプレート選択した後は、アクティブページを処理内容タブにしてくれると使いやすいです。
 それと、サンプルでは設定値にダブルクォートが付いていてもいなくても問題ないよというところを見てもらいたくてダブルクォート付きも添付しましたが、正式リリースの際はダブルクォート無しに統一した方が良いですね。
・ツリー全体表示

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