ACFinder テスト中

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 .5 .6 .7 .8 | 投稿日時 2011.01.03 22:01
kabe  長老   投稿数: 231
kabe です。
明けましておめでとうございます。

正月休み中に宿題を片付けようと思ったのですが、結局、今日1日しか作業できませんでした。

時間切れで今日現在のテスト版をアップロードしておきます。
http://acfinder.kabe.info/acfinder.zip
exeのみです。

m_tekiyo にidSaku,idByochu を作成する必要がなくなったので、ダイレクトに famicダウンロードデータからm_tekiyo を作成します。
データ更新は、famic csv から行ってください。
macs csv にはまだ対応しておらず、カラム数の関係上SQLエラーが出ます。

http://macs.o-ya.net/data/spec.seizai.qry
http://macs.o-ya.net/data/m_sakumotsu.php
http://macs.o-ya.net/data/m_byochu.qry
を取得して実行します。
起動時にチェック作業を行いますので、ちょっともたつきます。
更新がなければクエリーは実行しません(多分)

作物タブ、病害虫タブの検索方法のみ修正しています。
が、意図した動作になっているのか不明なので、確認お願いします。
作物選択、病害虫選択のダイアログはまだ手をつけていません。

作物タブの作物名の処理については、ACFinder 内部辞書の機能をまだ生かしており、どうしたらよいものでしょう。
(病害虫タブも同様)
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2011.01.04 01:21
OhYeah!  管理人   投稿数: 983 オンライン
あけましておめでとうございます。今年もよろしくお願いします。

引用:更新がなければクエリーは実行しません(多分)Download フォルダに spec.seizai.qry が見あたらないので、もしかするとこのファイルは ACFinder を起動する度にダウンロード&実行してるかも?

私の方も、作物概念図が更新されていたので、それに合わせて m_sakumotus.php を更新しました。
m_byochu.qry も、別名にバグがあった部分を修正したり、新 ACFinder にあわせてカタカナ→ひらがな変換を実行するようにしたり、携帯農薬検索用に mokuteki も byochu に入れるなどの更新をしています。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.04 02:18
OhYeah!  管理人   投稿数: 983 オンライン
引用:Download フォルダに spec.seizai.qry が見あたらないので、もしかするとこのファイルは ACFinder を起動する度にダウンロード&実行してるかも?というよりも、そもそも spec.seizai.qry の取得と実行がされてないですね。spec.db に seizai テーブルがありません。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.04 10:18
OhYeah!  管理人   投稿数: 983 オンライン
引用:作物タブの作物名の処理については、ACFinder 内部辞書の機能をまだ生かしており、どうしたらよいものでしょう。病害虫の方は、「ばんぷ」を「晩腐」に変換せずにそのまま検索するので、辞書を通ってないような…。従来辞書を通す必要はないと思います。
作物の方は、現状では「○○を除く」の除外の際に辞書を通した作物名を使用してませんでしたっけ? だとすると、辞書を通さないと意図どおりに除外できなくなる可能性があります。できれば辞書変換を、従来の文字列変換から、下記のような m_sakumotsu を使用する方法に変更した方が良いとは思いますが…。

select sakumotus from m_sakumotsu where concat('、', sakumotsu, betsumei) match '%入力文字列%'
*1 結果が複数存在する場合は、もっとも文字数が少ないものを選ぶ
*2 m_sakumotus はブドウの品種名変換や、ひらがな作物名の漢字→かな変換に対応していないので、この2点に関しては文字列変換辞書を通してからこの検索を行う
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.04 13:11
OhYeah!  管理人   投稿数: 983 オンライン
引用:m_byochu.qry も、別名にバグがあった部分を修正したり、新 ACFinder にあわせてカタカナ→ひらがな変換を実行するようにしたり、携帯農薬検索用に mokuteki も byochu に入れるなどの更新をしています。12月22登録反映データでは「グレモSC」がなぜか「除草剤」になっているため、「シバツトガ」と「スジキリヨトウ」が雑草に分類されていました。とりあえず、例外処理で対処済みです。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.04 15:15 | 最終変更
OhYeah!  管理人   投稿数: 983 オンライン
とりあえず、病害虫検索について。

m_tekiyo から idbyochu がなくなった(tekiyo ビューで使える idbyochu のインデックスがない)ので、idbyochu で検索するよりも byochu で検索した方が高速です。
CREATE TEMP TABLE ttTekiyoByochu AS SELECT * FROM tekiyo WHERE byochu IN(SELECT byochu FROM m_byochu WHERE concat('、',byochu,betsumei) MATCH '%検索語%');


m_byochu の byochu には mokuteki も入っているので、目的の検索を下記のようにすれば、目的検索でもかな検索が可能です。「はなぶるい」は「花ぶるい」「花振い」の2種類で登録されているので、かな検索が生きてきます。
CREATE TEMP TABLE ttTekiyoByochu AS SELECT * FROM tekiyo WHERE mokuteki IN(SELECT byochu FROM m_byochu WHERE concat('、',byochu,betsumei) MATCH '%検索語%');


m_byochu からダイアログの内容を作成するようになったら、目的ボタンと目的テキストボックスは削除して、下記のように検索するのが良いと思います。
CREATE TEMP TABLE ttTekiyoByochu AS SELECT * FROM tekiyo WHERE byochu IN(SELECT byochu FROM m_byochu WHERE concat('、',byochu,betsumei) MATCH '%検索語%') or mokuteki IN(SELECT byochu FROM m_byochu WHERE concat('、',byochu,betsumei) MATCH '%検索語%');
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011.01.04 18:12
OhYeah!  管理人   投稿数: 983 オンライン
12/21 に ACFinder をインストールした新しい事務所 PC で、作物タブのダイアログボックスが中身空っぽです。病害虫タブの病害虫ダイアログボックスは OK です。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2011.01.04 20:34 | 最終変更
kabe  長老   投稿数: 231
ボタンとかも含めて全てですか。
ツリー表示部分だけだとすれば、おそらく DBフォルダにfamic旧システムから取得していた sakumotu.htm が存在しないためではないでしょうか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.04 22:38
OhYeah!  管理人   投稿数: 983 オンライン
引用:ツリー表示部分だけだとすれば、おそらく DBフォルダにfamic旧システムから取得していた sakumotu.htm が存在しないためではないでしょうか?acfinder.exe を入れ替える前は問題なく使えていたはずなので、それは確認しませんでした。データ更新時に、たまたま byogai.htm しか取得できなかったのかなあ?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011.01.04 23:09
kabe  長老   投稿数: 231
本日のテスト版をアップロードします。
http://acfinder.kabe.info/acfinder.zip

spec.seizai.qry の取得部分を修正しました。
病害虫タブの検索方法を
http://www.o-ya.net/modules/d3forum/index.php?post_id=159
の方法に変更しました。
病害虫タブでは内部辞書の使用をはずしています。
病害虫選択ダイアログを修正しました。


投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011.01.05 02:16 | 最終変更
OhYeah!  管理人   投稿数: 983 オンライン
病害虫タブは良い感じになりましたねえ。
ひとつ早めに願いしたいのは、cid を「病害<害虫<雑草<鳥獣<その他」の順に変更したい(じゃないと作物タブで稲の病害虫選択が面倒)ので、各タブの検索時に cid を決め打ちせず、下記(病害の検索例)のように検索するようにしてください。定型処理の病害虫ダイアログボックスも同様です。
select byochu from m_byochu where cid in (select cid from spec.cbyochu where cname = '病害');
ついでに、場合によっては byochu フィールドの使用目的相当と mokuteki フィールドから持ってきた使用目的は cid を分けることになるかもしれないので、使用目的タブについては下記のように検索してください。
select byochu from m_byochu where cid in (select cid from spec.cbyochu where cname in ('その他', '使用目的'));


あと、急ぎではありませんが、検討していただきたい点が2点あります。
ひとつは、病害虫タブ>病害虫ダイアログボックス>害虫タブです。デフォルトで全ての害虫を表示し、グループ選択「ドロップダウンリスト」で絞り込むようにした方が使いやすいかなと思います。害虫は数が多いので、最初に全部表示するのにちょっと時間がかかるかもしれませんが…。また、害虫についてはふりがな順の ID になっていないので、ID 順とふりがな順(betsumei 順)の並べ替えができるとさらに便利です。
もうひとつは、病害虫タブ>病害虫ダイアログボックス>害虫タブです。前方一致/部分一致/後方一致を選べるようにして、たとえば前方一致で「あ」を検索すれば、従来の 50 音タブの代わりにも使えます。さらに、cid による絞り込みができれば完璧です。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011.01.05 07:15
kabe  長老   投稿数: 231
今朝のテスト版をアップロードします。
http://acfinder.kabe.info/acfinder.zip
引用:select byochu from m_byochu where cid in (select cid from spec.cbyochu where cname = '病害');この部分、変更しました。
投票数:0 平均点:0.00

なし Re: ACFinder テスト中

msg# 1.5.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.05 17:22 | 最終変更
OhYeah!  管理人   投稿数: 983 オンライン
ありがとうございます。cid が変わっても、ダイアログボックスの各タブが正常に検索できることを確認しました。ただ、定型処理の病害虫ダイアログボックスの方がまだ決め打ちのようなので、MACS Lab. の m_byochu.qry は今のところ従来と同じ cid にしてあります。
急ぎではありませんが、病害虫タブ>病害虫ダイアログボックス>使用目的タブは、忘れないうちに検索方法を修正しておいていただけると助かります。

害虫タブについては、最初に全害虫表示してもそれほど遅くはならないですね。グループ選択リストボックスに「すべて」の項目を追加して、絞り込みを解除できるようにしてもらえば、完璧だと思います。
なお、グループ選択リストボックスは、チェックリストボックスにして複数グループ選択ができるようにするならリストボックスのままで、現在の単一項目選択のままいくならドロップダウンリストの方が場所を取らなくて良いかなと思います。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.05 17:48
OhYeah!  管理人   投稿数: 983 オンライン
AppDATA\Local\VirtualStore\Program Files\acfinder\DB に、sakumotu.htm はあるのに、作物ダイアログボックスの内容が表示されません。
101031test 版では問題なく表示されてたはずだし、110103test 版でも病害虫ダイアログボックスは問題なく表示されてたので、Windows7 が原因ってわけでもなさそうです。う~ん、何だべや?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.06 21:42
OhYeah!  管理人   投稿数: 983 オンライン
作物タブ>作物名ダイアログボックス>分類タブでは、m_sakumotsu ではなく sakumotsu をお使いください。

spec.csakumotsu: 作物概念図を単純にテーブル化したもの(現在の適用には存在しない作物名が多数ある)
m_sakumotsu: m_tekiyo から適用が存在する作物名だけを抜き出したもの(「稲・麦・雑穀」など1~3階層の作物名が存在しない場合があり、分類ツリーを構築できない)
sakumotsu: m_sakumotsu に存在する作物名の1~3階層の作物名を全て含み、「(○○を除く)」を除外したもの
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 | 投稿日時 2011.01.07 14:35
OhYeah!  管理人   投稿数: 983 オンライン
下記 URL に spec.bunrui 更新クエリーを公開しました。ACFinder もこちらを取得するようにしてください。
http://macs.o-ya.net/data/spec.bunrui.qry

なお、データ更新と spec.bunrui.qry の更新が同時の場合は、先に spec.bunrui.qry を実行してからデータ更新すれば OK です。spec.bunrui.qry のみ更新された場合は、spec.bunrui.qry 実行後に m_kihon テーブルの koka フィールドの更新をするようにしてください。

m_kihon 更新サンプル
--/d
drop table if exists t_kihon;
create temp table t_kihon as select bango, seibun1, seibun2, seibun3, seibun4, seibun5, '' as koka, 0 as kokaid0, 0 as kokaid1, 0 as kokaid2, 0 as kokaid3, 0 as kokaid4, 0 as kokaid5 from m_kihon;
update t_kihon set kokaid1 = (select kokaid from spec.bunrui where seibun1 = seibun) where ifnullstr(seibun1, '') <> '';;
update t_kihon set kokaid2 = (select kokaid from spec.bunrui where seibun2 = seibun) where ifnullstr(seibun2, '') <> '';
update t_kihon set kokaid3 = (select kokaid from spec.bunrui where seibun3 = seibun) where ifnullstr(seibun3, '') <> '';
update t_kihon set kokaid4 = (select kokaid from spec.bunrui where seibun4 = seibun) where ifnullstr(seibun4, '') <> '';
update t_kihon set kokaid5 = (select kokaid from spec.bunrui where seibun5 = seibun) where ifnullstr(seibun5, '') <> '';
update t_kihon set kokaid0 = kokaid1 | kokaid2 | kokaid3 | kokaid4 | kokaid5;
update t_kihon set kokaid0 = (select kokaid from spec.koka where koka = '展着') where kokaid0 = 0;
update t_kihon set koka = concat('・',
  (select koka from spec.koka where kokaid = kokaid0 & 3),
  (select koka from spec.koka where kokaid = kokaid0 & 4),
  (select koka from spec.koka where kokaid = kokaid0 & 8),
  (select koka from spec.koka where kokaid = kokaid0 & 16),
  (select koka from spec.koka where kokaid = kokaid0 & 32),
  (select koka from spec.koka where kokaid = kokaid0 & 64),
  (select koka from spec.koka where kokaid = kokaid0 & 128),
  (select koka from spec.koka where kokaid = kokaid0 & 256),
  (select koka from spec.koka where kokaid = kokaid0 & 512),
  (select koka from spec.koka where kokaid = kokaid0 & 1024),
  (select koka from spec.koka where kokaid = kokaid0 & 2048),
  (select koka from spec.koka where kokaid = kokaid0 & 4096),
  (select koka from spec.koka where kokaid = kokaid0 & 8192),
  (select koka from spec.koka where kokaid = kokaid0 & 16384),
  (select koka from spec.koka where kokaid = kokaid0 & 32768)
);
update m_kihon set koka = (select koka from t_kihon where bango = m_kihon.bango);
drop table if exists t_kihon;
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.09 03:29
OhYeah!  管理人   投稿数: 983 オンライン
m_kihon テーブルの koka フィールド更新は、下記の方がほんのわずかですが速いですね。
--/d
-- テンポラリ効果テーブル
drop table if exists t_koka;
create temp table t_koka as select
  bango,
  (select kokaid from spec.bunrui where seibun1 = seibun) as koka1,
  (select kokaid from spec.bunrui where seibun2 = seibun) as koka2,
  (select kokaid from spec.bunrui where seibun3 = seibun) as koka3,
  (select kokaid from spec.bunrui where seibun4 = seibun) as koka4,
  (select kokaid from spec.bunrui where seibun5 = seibun) as koka5
from m_kihon;
alter table t_koka add column idkoka integer;
alter table t_koka add column koka varchar;
update t_koka set idkoka = ifnull(koka1, 0) | ifnull(koka2, 0) | ifnull(koka3, 0) | ifnull(koka4, 0) | ifnull(koka5, 0);
update t_koka set idkoka = (select kokaid from spec.koka where koka = '展着') where idkoka = 0;
update t_koka set koka = concat('・',
  (select koka from spec.koka where kokaid = idkoka & 3),
  (select koka from spec.koka where kokaid = idkoka & 4),
  (select koka from spec.koka where kokaid = idkoka & 8),
  (select koka from spec.koka where kokaid = idkoka & 16),
  (select koka from spec.koka where kokaid = idkoka & 32),
  (select koka from spec.koka where kokaid = idkoka & 64),
  (select koka from spec.koka where kokaid = idkoka & 128),
  (select koka from spec.koka where kokaid = idkoka & 256),
  (select koka from spec.koka where kokaid = idkoka & 512),
  (select koka from spec.koka where kokaid = idkoka & 1024),
  (select koka from spec.koka where kokaid = idkoka & 2048),
  (select koka from spec.koka where kokaid = idkoka & 4096),
  (select koka from spec.koka where kokaid = idkoka & 8192),
  (select koka from spec.koka where kokaid = idkoka & 16384),
  (select koka from spec.koka where kokaid = idkoka & 32768)
);
-- m_kihon 更新
update m_kihon set koka = (select koka from t_koka where bango = m_kihon.bango);
drop table if exists t_koka;
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011.01.09 10:53
kabe  長老   投稿数: 231
kabeです。

http://macs.o-ya.net/data/spec.bunrui.qry
これだけ文字コードがなぜか UTF-8になせいか、テーブル作成時にSQLエラーが出てしまいます。(シングルクオートの認識具合かと)
insert table 時に変換すればいいのですが、他のデータと合わせてshift-jis に統一してもらえませんか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2011.01.09 14:04
kabe  長老   投稿数: 231
本日のテスト版をアップロードしました。
http://acfinder.kabe.info/acfinder.zip

暫定的に spec.bunrui.qry の取得を
http://acfinder.kabe.info/data/spec.bunrui.qry
にしています。

作物タブの作物選択ダイアログを 新sakumotsuテーブルに対応しました。
作物選択ダイアログから作物名を選択した場合は、作物名の完全一致(厳密には完全一致ではないですが)で検索します。
これとは別に、作物名入力時にも、完全一致検索をチェックボックスで強制指定できるようにしてみました。

病害虫タブの病害虫名選択ダイアログの害虫タブで害虫グループを複数選択できるようにしました。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011.01.09 14:14
kabe  長老   投稿数: 231
作物選択ダイアログ、分類タブのツリー表示ですが、
一部不具合があります。

きのこ類>しいたけ
の中に
なめこ(菌床栽培)
ひらたけ(菌床栽培)
が入ってます。
(他にもあるかも?)

>OhYeah!さん
ひとつ前に、かっこのつかない「なめこ」「ひらたけ」がないとまずいのですが、sakumotsu テーブルに入れられますか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.09 14:38
OhYeah!  管理人   投稿数: 983 オンライン
引用:これだけ文字コードがなぜか UTF-8になせいか、テーブル作成時にSQLエラーが出てしまいます。ありゃ? C&P で SQL タブに貼り付けて実行してたので、気づかなかった。現在は、文字コードを修正してあります。
あと、m_kihon への koka 書き戻しですが、下記のようにしておかないと、新しい有効成分の剤の効果が「展着」になってしまいます。
--/d
-- テンポラリ効果テーブル
drop table if exists t_koka;
create temp table t_koka as select
  bango, shurui,
  (select kokaid from spec.bunrui where seibun1 = seibun) as koka1,
  (select kokaid from spec.bunrui where seibun2 = seibun) as koka2,
  (select kokaid from spec.bunrui where seibun3 = seibun) as koka3,
  (select kokaid from spec.bunrui where seibun4 = seibun) as koka4,
  (select kokaid from spec.bunrui where seibun5 = seibun) as koka5
from m_kihon;
alter table t_koka add column idkoka integer;
alter table t_koka add column koka varchar;
update t_koka set idkoka = ifnull(koka1, 0) | ifnull(koka2, 0) | ifnull(koka3, 0) | ifnull(koka4, 0) | ifnull(koka5, 0);
update t_koka set idkoka = (select kokaid from spec.koka where koka = '展着') where idkoka = 0 and shurui like '%展着剤';
update t_koka set koka = concat('・',
  (select koka from spec.koka where kokaid = idkoka & 3),
  (select koka from spec.koka where kokaid = idkoka & 4),
  (select koka from spec.koka where kokaid = idkoka & 8),
  (select koka from spec.koka where kokaid = idkoka & 16),
  (select koka from spec.koka where kokaid = idkoka & 32),
  (select koka from spec.koka where kokaid = idkoka & 64),
  (select koka from spec.koka where kokaid = idkoka & 128),
  (select koka from spec.koka where kokaid = idkoka & 256),
  (select koka from spec.koka where kokaid = idkoka & 512),
  (select koka from spec.koka where kokaid = idkoka & 1024),
  (select koka from spec.koka where kokaid = idkoka & 2048),
  (select koka from spec.koka where kokaid = idkoka & 4096),
  (select koka from spec.koka where kokaid = idkoka & 8192),
  (select koka from spec.koka where kokaid = idkoka & 16384),
  (select koka from spec.koka where kokaid = idkoka & 32768)
);
-- m_kihon 更新
update m_kihon set koka = (select koka from t_koka where bango = m_kihon.bango);
drop table if exists t_koka;
投票数:0 平均点:0.00

なし Re: ACFinder テスト中

msg# 1.7.3.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.09 14:54
OhYeah!  管理人   投稿数: 983 オンライン
「えのきたけ(菌床栽培)」も、sakumotsu テーブルに第4階層の作物名がないですね。第5階層の作物名のみで登録されてて、第4階層の作物名で登録がないってのは想定していませんでした。
現在は、修正してあります。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011.01.09 17:08
OhYeah!  管理人   投稿数: 983 オンライン
作物タブ>作物選択ダイアログボックス>検索タブと、病害虫タブ>病害虫選択ダイアログボックス>検索タブで、テキストボックスのエンターキー押下時の動作が違います。病害虫選択ダイアログボックスでは、エンターキー押下で「閉じる」ボタンが実行されてしまうので、すごく使いにくいです。作物選択ダイアログボックスと同様に、エンターキー押下で検索実行の方が使いやすいと思います。

それと、作物選択ダイアログボックスの検索タブにも部分一致を追加して、部分一致をデフォルトにした方が良いと思います。前方一致と完全一致だけでは、「ねぎ」で「根深ねぎ」を検索できません。
なお、テキストボックス上のエンターキー押下で検索実行する場合、ラジオボタンはデフォルト検索方法を選択状態にしておいてもらわないと、分かりにくいです。

さらに、これは前から欲しいと思ってたんですが、作物選択ダイアログボックスの検索タブにも、上位分類を含むチェックボックスがあるといいですね。普段使わない作物は、上位分類がさっぱりわからないので
sqlite だけでも下記のような感じで実装可能ですが、対象作物の idsaku の取得と idsaku の展開部分は Delphi でやった方が良いと思います。
--/d
drop table if exists tidsaku;
create temp table tidsaku as select idsaku from sakumotsu where sakumotsu = '検索語';
select concat(',', sakumotsu) from sakumotsu where idsaku in (
  (select idsaku from tidsaku),
  substr((select idsaku from tidsaku), 1, 8)||'00',
  substr((select idsaku from tidsaku), 1, 5)||'00000',
  substr((select idsaku from tidsaku), 1, 4)||'000000',
  substr((select idsaku from tidsaku), 1, 2)||'00000000'
);
投票数:0 平均点:0.00

なし Re: ACFinder テスト中

msg# 1.7.3.2.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 | 投稿日時 2011.01.09 22:22 | 最終変更
kabe  長老   投稿数: 231
本日2回目のテスト版をアップロードしました。
http://acfinder.kabe.info/acfinder.zip

作物選択ダイアログの検索タブの上位分類指定については、チェックした作物名がひとつのみの場合に、上位分類を表示します。

macs csv からのデータ更新をできるようにしました。
ただし従来のように1行まるごとinsert ではなく、フィールドを選択する処理を加えているので、遅くなっていると思います。

作物名の判定処理はなかなかめんどうですね。
「なばな類」だけを明示的に指定した場合に、「なばな」がヒットするのもまずいかも。
完全一致の場合は'類'の '(類)?'への置換をしないようにしますか?
投票数:0 平均点:0.00

なし Re: ACFinder テスト中

msg# 1.7.3.2.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2011.01.09 23:54 | 最終変更
OhYeah!  管理人   投稿数: 983 オンライン
病害虫ダイアログボックスの検索ですが、concat('、',byochu,betsumei) から検索する場合、前方一致・後方一致は MATCH だと別名がうまく検索できません。REGEXP の方が良さそうです。
SELECT byochu FROM m_byochu WHERE  concat('、',byochu,betsumei) REGEXP '(^|、)検索語'
SELECT byochu FROM m_byochu WHERE  concat('、',byochu,betsumei) REGEXP '検索語(\(|、|$)'


引用:ただし従来のように1行まるごとinsert ではなく、フィールドを選択する処理を加えているので、遅くなっていると思います。薬検 CSV も MACS CSV も項目数・項目順ともに同じですが、どうして別処理が必要になったんでしょうか?
登録基本部は、テンポラリテーブルを作成してから seibun と m_kihon に分けてたと思いましたが、これを Delphi 側でテーブル作成時に処理するようにしたとか?

引用:「なばな類」だけを明示的に指定した場合に、「なばな」がヒットするのもまずいかも。ああ、なるほどそういうケースもありますね。検索方法をまるっきり変えてしまうのは面倒でしょうか?
ACFinder の検索方法では、たとえば「ねぎ」を選択した場合に「根深ねぎ」で登録されている農薬が検索できないため、携帯農薬検索では下記のような検索方法をとっています。この場合、展着剤など大分類が異なる農薬は検索できませんが、薬剤名等からの検索や病害虫名等からの検索で検索できれば OK かなと割り切っています。ACFinder の検索方法でも、「ねぎ」を選んだんじゃ「ヨトウコン-S」などは検索できないですしね。
// ACFinder の concat スカラー関数と同じ動作の PHP ユーザ関数
function _concat() {
  if (func_num_args() < 2) return '';
  $args = func_get_args();
  $connector = array_shift($args);
  $res = array_shift($args);
  foreach($args as $arg) {
    if (is_null($arg) || $arg == '') continue;
    if (strpos($res, $arg) === false) $res .= $connector.$arg;
  }
  return $res;
}

$crop = 選択作物名;
$cid = 選択作物名の idsaku;
$level = 選択作物名の level;
$cid2 = substr($cid, 0, 8);

$except = _concat('|', substr($cid, 0, 4)."000000", substr($cid, 0, 5)."00000", "{$cid2}00"); // substr は PHP の substr 関数
$sql = "select concat('|', sakumotsu) from sakumotsu where idsaku regexp '$except'";
$except = 上記$sqlの実行結果;
$except = '\((.*、)?('.str_replace(array('(', ')', '[', ']'), array('\(?', '\)?', '\[?', '\]?'), $except).')(、.*)?を除く';
if (strpos($crop, '露地') !== false) $except .= '|施設|水耕';
if (strpos($crop, '施設') !== false) $except .= '|露地';
if (strpos($crop, '水耕') !== false) $except .= '|露地';

$cond = _concat('|', substr($cid, 0, 2)."000000", substr($cid, 0, 4)."0000", substr($cid, 0, 5)."000"); // substr は PHP の substr 関数
if ($level == 3) $cond = _concat('|', $cond, "{$cid2}");
if ($level == 4) $cond = _concat('|', $cond, "{$cid2}00", $cid);

$sql = "select sakumotsu from m_sakumotsu where idsaku regexp '^($cond)' and sakumotsu not regexp '$except'";
選択作物の level により、下記のように作物を検索します。level = 0..2 の場合は、指定作物と上位分類のみで、下位分類は検索しません。level = 3 の場合は、上位分類と下位分類を全て検索します。level = 4 の場合は、もともと下位分類が存在しないので指定作物と上位分類を検索します。
0: idsaku regexp '^(xx000000)'
1: idsaku regexp '^(xx000000|xxxx0000)'
2: idsaku regexp '^(xx000000|xxxx0000|xxxxx000)'
3: idsaku regexp '^(xx000000|xxxx0000|xxxxx000|xxxxxxxx)'
4: idsaku regexp '^(xx000000|xxxx0000|xxxxx000|xxxxxxxx00|xxxxxxxxxx)'
たとえば、「ねぎ」(level = 3, idsaku = 0205003100)の場合、最終的な SQL は下記のようになります。
select sakumotsu from m_sakumotsu where idsaku regexp '^(02000000|02050000|02050031)' and sakumotsu not regexp '\((.*、)?(その他野菜|ねぎ)(、.*)?を除く'
投票数:0 平均点:0.00

なし Re: ACFinder テスト中

msg# 1.7.3.2.1.2
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.10 00:51 | 最終変更
OhYeah!  管理人   投稿数: 983 オンライン
作物ダイアログボックス>検索タブの部分一致検索ですが、別名でも検索できるように concat('、', sakumotsu, betsumei) から検索するようにしてもらえませんか?

ちなみに、携帯農薬検索では、検索する前にキーワードを下記のように処理しています。別名はすべてひらがなのみで登録しているので「西洋○○」「非結球○○」などをひらがなに変換するのと、「じかまき」「おおつぶ」などを「ちょくは」「たいりゅう」などに変換する処理です。
「○○を除く」の作物名を http://www.o-ya.net/modules/d3forum/index.php?post_id=184 の方法で取得すれば、作物テキストボックスにダイレクト入力する場合の辞書もこれで OK です。
// ACFinder の strconv(, 'k') と同じ機能の PHP ユーザ関数
function _strconv($str) {
  $from = array(
    'ー', 'ぁ','ぃ','ぅ','ぇ','ぉ','っ','ゃ','ゅ','ょ','ゎ',
    'が','ぎ','ぐ','げ','ご','ざ','じ','ず','ぜ','ぞ','だ','ぢ','づ','で','ど',
    'ば','び','ぶ','べ','ぼ','ぱ','ぴ','ぷ','ぺ','ぽ'
  );
  $to = array(
    '','あ','い','う','え','お','つ','や','ゆ','よ','わ',
    'か','き','く','け','こ','さ','し','す','せ','そ','た','ち','つ','て','と',
    'は','ひ','ふ','へ','ほ','は','ひ','ふ','へ','ほ'
  );
  return str_replace($from, $to, mb_strtoupper(mb_convert_kana($str, 'acHV')));
}

function conv_sakumotsu($str) {
  $str = str_replace('しかまき', 'ちよくは', $str);
  $str = str_replace('ちかまき', 'ちよくは', $str);
  $str = str_replace('おおつふ', 'たいりゆう', $str);
  $str = str_replace('こつふ', 'しようりゆう', $str);
  $str = str_replace('かつか', 'かくか', $str);
  $str = preg_replace('/(?<!ら)たねなし|種無(し)?/', 'むかく', $str);
  $str = preg_replace('/たねあり|種有(り)?/', 'ゆうかく', $str);
  $str = str_replace('非結球', 'ひけつきゆう', $str);
  $str = str_replace('半結球', 'はんけつきゆう', $str);
  $str = str_replace('西洋', 'せいよう', $str);
  $str = str_replace('食用', 'しよくよう', $str);
  $str = str_replace('ろち', 'ろし', $str);
  $str = preg_replace('/(.*)?((露地|ろし|施設|しせつ|水耕|すいこう)(栽培|さいはい)?)(.*)?/', '\1\5\(\2', $str);
  return $str;
}

$kw = conv_sakumotsu(_strconv('検索語'));
投票数:0 平均点:0.00

なし Re: ACFinder テスト中

msg# 1.7.3.2.1.3
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.10 02:05
OhYeah!  管理人   投稿数: 983 オンライン
作物選択ダイアログボックスの検索タブですが、作物を選択してから「上位分類含む」のチェックを付けたり外したりしても、作物名が変わりません。この場合でも、上位分類が追加されたり消えたりしてくれた方が使いやすいと思います。
投票数:0 平均点:0.00

なし Re: ACFinder テスト中

msg# 1.7.3.2.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.10 02:07
OhYeah!  管理人   投稿数: 983 オンライン
前方一致と部分一致があれば、後方一致はいらないかなあ…。
投票数:0 平均点:0.00

なし Re: ACFinder テスト中

msg# 1.7.3.2.1.1.2
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2011.01.10 21:06 | 最終変更
kabe  長老   投稿数: 231
引用:薬検 CSV も MACS CSV も項目数・項目順ともに同じですが、どうして別処理が必要になったんでしょうか?適用部の処理です。
従来は、全フィールドをテンポラリテーブルに読み込んでから、m_tekiyo を作成していたのですが、idsaku,
idByochu を持つ必要がなくなったので、適用データからダイレクトに必要なフィールドinsert してm_tekiyoテーブルを作成しています。

12~14日とつくばで、明日も所用があり帰宅しないので、次の更新は15日以降になります。
投票数:0 平均点:0.00

なし Re: ACFinder テスト中

msg# 1.7.3.2.1.1.2.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.10 21:36 | 最終変更
OhYeah!  管理人   投稿数: 983 オンライン
なるほど、「農薬の種類」「農薬の名称」「略称」を使ってないからってことですね。SQLite には「ALTER TABLE ... DROP COLUMN ...」がないのが難点ですよね。これがあれば、m_sakumotsu や m_byochu ももっと簡単に作れたんですが…。
登録適用部の CSV をそのまま INSERT したテンポラリテーブルを作成してから必要なカラムだけ取り出して m_tekiyo を作成するのと、Delphi 側でカラムを選択して INSERT するのとどっちが速いんでしょう?
投票数:0 平均点:0.00

なし /u オプションは大丈夫?

msg# 1.7.3.2.1.1.2.2
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011.01.22 23:37
OhYeah!  管理人   投稿数: 983 オンライン
携帯農薬検索のデータベースをそろそろ自動更新にしたいなと思っているのですが、/u オプションも新しい作物・病害虫テーブル等に対応してるんでしょうか?
投票数:0 平均点:0.00

なし Re: /u オプションは大丈夫?

msg# 1.7.3.2.1.1.2.2.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011.01.23 20:24
kabe  長老   投稿数: 231
データベース作成ルーチンは同じなので、多分大丈夫と思うのですが・・・・

大雪で除雪に追われています。
更新が遅れてすみません。
投票数:0 平均点:0.00

なし Re: /u オプションは大丈夫?

msg# 1.7.3.2.1.1.2.2.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.01.23 22:49
OhYeah!  管理人   投稿数: 983 オンライン
>データベース作成ルーチンは同じなので、多分大丈夫と思うのですが・・・・
ああ、m_sakumotsu.php や m_byochu.qry による更新も、自動更新ルーチンに組み込んであるんですね。もしかしたら、/u オプションでは、データ更新時の処理だけかなと思ったもので…。

>大雪で除雪に追われています。
先日も、ニュースで横手の雪の話が出てましたね。今年は、日本海側はどこも大変そうです。
家の方は、屋根融雪システムとか付けられたんでしょうか? お互いもう若いとはいえない年になってしまったので、十分お気を付けください。そういや、kabe さんもそろそろ誕生日でしたっけ?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011.02.10 16:30
OhYeah!  管理人   投稿数: 983 オンライン
検索結果の項目ヘッダをクリックすると実行されるソートが現在は文字コード順ですが、作物名と病害虫名はふりがな順でもソートできるようなオプションを追加できないでしょうか? たとえば、作物名と病害虫名で右クリックするとふりがな順ソートが選択できるとか…。
作物名ではあまり使うことはなさそうですが、病害名はふりがな順に並んでくれた方が使いやすい時もあります。

でも、検索結果のソートは order by で再検索するんじゃなくて、グリッドコンポーネントのソート機能を使ってるんでしたっけ?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011.02.11 20:59
kabe  長老   投稿数: 231
現状では列クリック時のソートは、グリッドコンポーネントの機能を使っています。

ふりがなでのソートとか、使用時期などは収穫前日数でソートできると便利そうです。
これも修正課題としておきます。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011.02.11 22:24
OhYeah!  管理人   投稿数: 983 オンライン
>ふりがなでのソートとか、使用時期などは収穫前日数でソートできると便利そうです。
収穫前日数でのソートは欲しいですね。列ヘッダの左クリックはコンポーネント側の機能でソート、列ヘッダのコンテキストメニューによるソートは order by で再検索ってな感じで使い分けるのが一番簡単そうですかね。
投票数:0 平均点:0.00

  条件検索へ