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

研究会

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

〔603〕Re:テンポラリーテーブルを使うなら
 kabe  (07/03/22 22:39)

引用なし
   >Hidemi Oyaさん

kabe です。

> ただ、用途に関しては対象病害虫を限定するための検索条件、剤型に関しては対象とする病害虫に目的の剤型があるとは限らないので絞り込み条件とした方が使いやすいかもしれないですね。
このあたりが良さそうです。
・ツリー全体表示

〔602〕Re:テンポラリーテーブルを使うなら
 Hidemi Oya WEB  (07/03/22 21:35)

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

>病害虫、使用目的の再検索は必要なし、最初に作物名を選択した状態でテンポラリーテーブルを作り、それを基に病害虫、使用目的、用途、剤型は同じレベルで AND 条件で絞り込めるようにするという解釈でよろしいですか。
 そういうことです。病害虫/使用目的/用途/剤型は IN 演算子で検索できますし、元のテンポラリーテーブルが作物検索でレコード数が減少しているので、どれかを選択するたびに、他の3つを再検索しても時間はいくらもかかりません。
 ただ、用途に関しては対象病害虫を限定するための検索条件、剤型に関しては対象とする病害虫に目的の剤型があるとは限らないので絞り込み条件とした方が使いやすいかもしれないですね。この場合、下図のような並び順の方が分かりやすいと思います。

     検索条件              絞り込み
    ┌──────┐          ┌──────┐
作物名 │      │     病害虫雑草│     ▼│
    ├──────┤          ├──────┤
近接作物│      │□非表示 使用目的 │     ▼│
    ├──────┤          ├──────┤
用途  │      │     剤型   │     ▼│
    └──────┘          └──────┘
・ツリー全体表示

〔601〕Re:テンポラリーテーブルを使うなら
 kabe  (07/03/22 20:54)

引用なし
   >Hidemi Oyaさん

kabe です。

> が、テンポラリーテーブルを使うなら、用途一覧や剤型一覧を取得するクエリを発行してもほとんど時間はかからないので、もう一歩進んで、病害虫や使用目的と同様に絞り込み条件として使えた方が便利で分かりやすいと思います。
現状では最終的に病害虫名で絞り込むことを想定しているので、用途を指定した場合は、指定した用途が存在する病害虫、使用目的を再検索するという仕様ですが、病害虫、使用目的の再検索は必要なし、最初に作物名を選択した状態でテンポラリーテーブルを作り、それを基に病害虫、使用目的、用途、剤型は同じレベルで AND 条件で絞り込めるようにするという解釈でよろしいですか。
・ツリー全体表示

〔600〕テンポラリーテーブルを使うなら
 Hidemi Oya WEB  (07/03/20 23:43)

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

 現在の作物タブは、用途と剤型は作物名と同様の検索条件として扱われるので、病害虫で絞り込んであっても、それがリセットされて再検索されてしまいます。病害虫や使用目的が絞り込みで、その下にある用途や剤型が再検索ってのは、ちょっと分かりづらいです。
 現状のように検索条件として使用するなら、用途/剤型と病害虫/使用目的の位置を入れ替えた方が分かりやすくなると思います。

 が、テンポラリーテーブルを使うなら、用途一覧や剤型一覧を取得するクエリを発行してもほとんど時間はかからないので、もう一歩進んで、病害虫や使用目的と同様に絞り込み条件として使えた方が便利で分かりやすいと思います。
・ツリー全体表示

〔599〕Re:開発者モードが欲しい
 Hidemi Oya WEB  (07/03/20 23:24)

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

>ログに表示するようにします。
 ぜひお願いします。

>ExecSQL と GetTable のどちらを実行するかで、ExecSQL を実行する文を判別するために文字列チェックしてましたが、文頭に select がある場合だけ GetTable を実行して、それ以外は ExecSQL を実行した方が簡単ですね。
 あらためて SQLite.pas を確認したら、GetTable でテーブルを返さないクエリーを実行しても、ヌルテーブルが返ってくるだけで、特に問題はなさそうです。今のところ、ExecSQL も単文しか実行できないので、GetTable と ExecSQL の違いは返り値をあとで利用するかしないかの差しかないということになります。
 したがって、SQL タブでは、SELECT 文以外も GetTable で処理しちゃうのが面倒がなくて良いと思います。

>select 以外では PRAGMA table_info とか PRAGMA index_list あたりはGetTableする必要がありますね。
 もし前述のように GetTable で全て代用するのではなく、ExecSQL と使い分けるのなら、PRAGMA コマンドは値設定がない場合は全てテーブルを返すので、PRAGMA 文の中に '=' を含む場合は ExecSQL、含まない場合は GetTable で良いと思います。

 なお、sqlite3_exec を使えば複文を一括実行できそうなので、そのうち ExecSQL を仕様変更しようと考えています。
・ツリー全体表示

〔598〕Re:開発者モードが欲しい
 kabe  (07/03/20 13:31)

引用なし
   >Hidemi Oyaさん

kabe です。

> それよりも、SQL の実行時間をどこかに表示してくれる機能があると、検索時間の評価がしやすいですね。
ログに表示するようにします。

> ところで、/d モードでも制限を付けるよりは、/d モードはノーチェックで SQL を通した方が搭載が簡単じゃないですか?
ExecSQL と GetTable のどちらを実行するかで、ExecSQL を実行する文を判別するために文字列チェックしてましたが、文頭に select がある場合だけ GetTable を実行して、それ以外は ExecSQL を実行した方が簡単ですね。
select 以外では PRAGMA table_info とか PRAGMA index_list あたりはGetTableする必要がありますね。
・ツリー全体表示

〔597〕Re:開発者モードが欲しい
 Hidemi Oya WEB  (07/03/20 9:51)

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

早速ご対応いただき、大変ありがとうございました。

>とりあえず今のところ create drop delete update を含む場合に ExecSQLを実行するようにしてます。他のコマンドで必要なものがあれば追加します。
 当面は create, drop が使えれば十分だと思いますが、あと insert, replace が使えると(すでに使えるのかな?)さらに good ですね。
 それよりも、SQL の実行時間をどこかに表示してくれる機能があると、検索時間の評価がしやすいですね。

 ところで、/d モードでも制限を付けるよりは、/d モードはノーチェックで SQL を通した方が搭載が簡単じゃないですか?
・ツリー全体表示

〔596〕Re:検索の高速化
 Hidemi Oya WEB  (07/03/20 1:07)

引用なし
   もうひとつ補足です。

> なお、SQLite3 の標準状態ではメモリ上にテンポラリーテーブルを作成するので、ACFinder の終了時に DROP TABLE する必要はないはずです。
 確認していませんが、ACFinder の終了時に TSQLiteDb オブジェクトを Free (=開いているデータベースのクローズ)し忘れると、メモリリークが発生するかも…。
・ツリー全体表示

〔595〕Re:開発者モードが欲しい
 kabe  (07/03/20 0:56)

引用なし
   >Hidemi Oyaさん

kabe です。

とりあえず今のところ create drop delete update を含む場合に ExecSQLを実行するようにしてます。他のコマンドで必要なものがあれば追加します。
・ツリー全体表示

〔594〕Re:開発者モードが欲しい
 kabe  (07/03/20 0:52)

引用なし
   >Hidemi Oyaさん

kabe です。

> できれば、起動オプションに /d なんて付ければ、開発者モードになって SQL が制限無く使えるとありがたいです。
ダウンロードページに開発者バージョンをアップしました。
EXEファイルのみです。
・ツリー全体表示

〔593〕Re:検索の高速化
 Hidemi Oya WEB  (07/03/20 0:52)

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

>作業用テーブル案、取り組んでみます。
 検索高速化にはかなり効果がありそうですし、SQL を発行する部分だけ若干修正すればすみますから、ぜひよろしくお願いします。

>21日に私用で出かけなくてはならず、可能性は低いです。(^^;
 了解しました。
・ツリー全体表示

〔592〕Re:ACFinder 070319版
 Hidemi Oya WEB  (07/03/20 0:49)

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

 早速のアップデート、お疲れ様でした。

>薬剤候補に >20000 と入れると
>登録番号 20000 以降の薬剤を表示します。
 指定作物に登録がある比較的新しい農薬を調べたいときなんかには、結構便利かも。'<10000' だと登録番号が 10000 以下の農薬が検索できることも確認しました。あえて、古い農薬のみを調べたいことはあまりないかもしれませんが…。
 それと、'>20000' のように全角でも OK なんですね。すばらしい! 薬剤候補は IME が自動オンになるので、こういう細かな配慮が使い勝手を大きく左右します。
・ツリー全体表示

〔591〕Re:検索の高速化
 kabe  (07/03/20 0:17)

引用なし
   >Hidemi Oyaさん

kabe です。

作業用テーブル案、取り組んでみます。

> 3/22 に埼玉県の農薬飛散防止技術緊急実証事業の担当者会議があり、そこで ACFinder のデモを行うので、もし可能ならそれに間に合わせてもらえると大変ありがたいです。
21日に私用で出かけなくてはならず、可能性は低いです。(^^;
・ツリー全体表示

〔590〕Re:ACFinder 070319版
 kabe  (07/03/20 0:08)

引用なし
   kabeです。

追加です。
薬剤候補に >20000 と入れると
登録番号 20000 以降の薬剤を表示します。
範囲指定もしたいところですが、それは今後の課題ということで…
・ツリー全体表示

〔589〕開発者モードが欲しい
 Hidemi Oya WEB  (07/03/20 0:05)

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

 検索高速化を確認するのに、ACFinder の SQL タブでは CREATE コマンド等に制限がかかっているので、自前のソフトで行いました。
 できれば、起動オプションに /d なんて付ければ、開発者モードになって SQL が制限無く使えるとありがたいです。暇なときで結構ですので、御一考ください。
・ツリー全体表示

〔588〕ACFinder 070319版
 kabe  (07/03/20 0:03)

引用なし
   070819版をアップしました。
http://acfinder.kabe.info/

>Hidemi Oyaさん

> 一番良いのは、薬剤候補に登録番号も入力可能にする方法ですが、名称・通称等は部分一致検索、登録番号は完全一致検索になるので、プログラムの修正が必要になりますね。StrToIntDef 関数で、デフォルトを -1 とかにしておけば、正数が取得できた場合は登録番号による完全一致検索、負数の場合は 名称・通称等による部分一致検索と切り分けることは可能です。
これを採用させていただきました。

登録番号タブのバグも修正しました。
・ツリー全体表示

〔587〕Re:検索の高速化
 Hidemi Oya WEB  (07/03/19 22:36)

引用なし
   補足です。

 ExecSQL メソッドは、SQL 文をセミコロンで区切ることにより、複文を一括実行できると思ってたんですが、1文ごとに ExecSQL を実行しないとダメかも…。
・ツリー全体表示

〔586〕検索の高速化
 Hidemi Oya WEB  (07/03/19 22:30)

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

>ただし作物タブと同様に regexp演算子を使用しているため、作物名を指定すると以前より検索に時間がかかります。
 テンポラリーテーブルを作ると、高速になります。たとえば、薬剤候補を検索する時点で、
DROP TABLE IF EXISTS tempyakuzai;
CREATE TEMP TABLE tempyakuzai AS SELECT * FROM tekiyo WHERE meisho||shurui MATCH '%薬剤名%';
を実行して、以後の SQL は tempyakuzai に対して
SELECT DISTINCT tsusho FROM tempyakuzai WHERE sakumotsu REGEXP ...
SELECT DISTINCT bango, meisho FROM tempyakuzai WHERE sakumotsu REGEXP ...
SELECT sakumotsu, byochu, mokuteki, ... FROM tempyakuzai WHERE bango = ...
などを発行すれば OK です。
 なお、SQLite3 の標準状態ではメモリ上にテンポラリーテーブルを作成するので、ACFinder の終了時に DROP TABLE する必要はないはずです。

 作物タブでも同様にテンポラリーテーブルを使えば、薬剤タブよりも効果が大きいはずです。まず、作物名で検索する段階で
DROP TABLE IF EXISTS tempsakumotsu;
CREATE TEMP TABLE tempsakumotsu AS SELECT * FROM vTsushoTekiyo WHERE sakumotsu REGEXP ...;
SELECT * FROM tempsakumotsu;
を実行しておき、コンボボックスにセットする値は
SELECT DISTINCT byochu FROM tempsakumotsu
SELECT DISTINCT mokuteki FROM tempsakumotsu
などの SQL で取得すれば、現状の約 1/3 で検索が終了します。

 3/22 に埼玉県の農薬飛散防止技術緊急実証事業の担当者会議があり、そこで ACFinder のデモを行うので、もし可能ならそれに間に合わせてもらえると大変ありがたいです。
・ツリー全体表示

〔585〕Re:ACFinder 070318版
 kabe  (07/03/19 15:06)

引用なし
   >Hidemi Oyaさん

kabe です。

> 話は変わりますが、薬剤候補に「アファーム」と入力して検索すると、登録番号タブに「21853 アファームエクセラ顆粒水和剤」が2つ表示されます。登録番号タブ表示用の検索に DISTINCT がないのが原因かな…。
すいません。2成分以上含む薬剤は全て成分の数だけ同じ登録番号の薬剤が表示されてしまうようです。
検索対象とするテーブルを間違えました。
多分 m_kihon を使っているつもりで DISTINCT しなかったんでしょう。

これについては今晩修正します。
・ツリー全体表示

〔584〕Re:ACFinder 070318版
 Hidemi Oya WEB  (07/03/19 13:41)

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

 ACFinder のアップデート、ありがとうございました。私の方は [#583] に書いたような理由で、InetUtil の更新が遅れています(^_^;)。

>従来の名称タブを通称タブに変更し、薬剤名、作物名での絞り込み結果を、通称タブ、登録番号タブで切り替えて参照できます。
 JAなんかで最新適用についてチェックしたい場合などは、登録番号で入力した方が簡単です。しかし、現在の仕様では一度検索してしまうと、別の農薬を登録番号で確認したいと思っても登録番号で検索できません。
 登録番号タブに、検索結果をクリアして全農薬を再表示するか、入力番号で再検索する機能があると良さそうです(この場合、通称タブと登録番号タブの内容が一致しなくなりますが)。一番良いのは、薬剤候補に登録番号も入力可能にする方法ですが、名称・通称等は部分一致検索、登録番号は完全一致検索になるので、プログラムの修正が必要になりますね。StrToIntDef 関数で、デフォルトを -1 とかにしておけば、正数が取得できた場合は登録番号による完全一致検索、負数の場合は 名称・通称等による部分一致検索と切り分けることは可能です。

 話は変わりますが、薬剤候補に「アファーム」と入力して検索すると、登録番号タブに「21853 アファームエクセラ顆粒水和剤」が2つ表示されます。登録番号タブ表示用の検索に DISTINCT がないのが原因かな…。

>作物名の絞り込みは、作物タブと同様に複数作物の指定を行えるよう修正しました。
>作物選択ダイアログから上位分類を含めた作物名を指定できます。
 これは要望しようと思っていた機能なので、非常にありがたいです。作物別防除資料のチェックをするときに、特にマイナークロップなどでは上位分類の農薬も記載されていることが多いので、作物名をその都度変更しなければならず不便だったのが解消されます。
・ツリー全体表示

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