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

研究会

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

〔343〕テーブルの構成
 kabe WEB  (06/06/24 1:03)

引用なし
   >Hidemi Oyaさん
>s_kobayashi さん

kabe です。

> ACFinder の動作を見ていると、おそらく基本部で生成した通称を適用部に持ってきているのではなく、基本部は基本部、適用部は適用部でそれぞれのテーブルに存在する「農薬の名称」から個別に「通称」を生成しているのではないかと思います。
全くその通りです。

>せっかく RDBMS を使うのであれば無駄は省くべきと言う主旨であれば、通称だけでなく「用途」「農薬の種類」「農薬の名称」「略称」「混合数」も tekiyo テーブルから削除してしまった方が良いと思います。
どこまでテーブルを正規化するのか、悩ましいところですが、単純な使い勝手を考えると、現状の方法でもいいのかなと思います。なにせ、1回データベースを作ってしませばあとは検索だけの用途ですから。

ただ本来のデータベースということからすると、どういうテーブル構成にするのが理想的なのか、興味のあるところではあります。

基本部マスターテーブル
登録番号、農薬の種類、農薬の名称、農薬通称、会社名略称、混合数、用途、剤型

基本部有効成分テーブル
登録番号、有効成分、濃度

登録適用部 テーブル
登録番号、作物名、病害虫名、使用目的 〜 使用時期、使用方法、〜適用農薬

本剤の使用回数部分のテーブル
登録番号、作物名、本剤の使用回数
(ここまでやるか?)

登録適用部使用回数部分のテーブル
登録番号、作物名、有効成分、使用回数
(これがあると、防除暦を作成して、使用回数をチェックすることも可能か)

あと、適用部分はけっこう空値のあるフィールドが多いので、どこまで別テーブルにするべきか。

検索で使うにはビューを作ればいいので、元のテーブルは分割してもいいのですの ACFider でこれをやるとデータ更新の時間は今より確実に増えますね。
・ツリー全体表示

〔342〕「キング」対応パターン
 Hidemi Oya WEB  (06/06/24 0:05)

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

>上記sql文の検索結果によると、家庭園芸用に対応しようとする場合、屋号のキングは文頭に来るとは限りません。しかもホームランキング、クサキングなど本来の農薬名にキングを使うものが多数あるので単純に削除することもできません。対応策の検討が必要と思われます。
 MACS for ACIS では問題ありませんが、確かに中抜きしようとすると問題がでますね。方法としては次の2種類があると思いますが、どちらも一長一短ですね。

(1) 「キング」は別処理とする
方法:略称が「キング化学」の時だけ「キング」を抜く
欠点:「サンキングA」に対する例外処理が必要

(2) 中抜きしないパターンを列挙する
方法:パターンを「(?<!サン|ラン|クサ|リホ|トリ)キング(?!スタ|ダム)」にする
欠点:「○○キング」や「キング○○」が生まれるたびにパターン修正が必要

>それと、ACFinderではtsushoのフィールドをtekiyoテーブルに置いていますが、これは検索の便宜を計るという意味でしょうか。tsushoはmeishoから生成されると考えるなら、kihonテーブル上にあるのが自然だと思うのですけれど、いかがでしょうか。
 ACFinder の動作を見ていると、おそらく基本部で生成した通称を適用部に持ってきているのではなく、基本部は基本部、適用部は適用部でそれぞれのテーブルに存在する「農薬の名称」から個別に「通称」を生成しているのではないかと思います。現在の kihon テーブルを検索に使うことはあまりないので、tekiyo テーブルに通称があった方が使いやすいのも間違いありません。
 「元データが両方にあるなら、生成データも両方にあった方が自然だ」って論理も成り立ちます。せっかく RDBMS を使うのであれば無駄は省くべきと言う主旨であれば、通称だけでなく「用途」「農薬の種類」「農薬の名称」「略称」「混合数」も tekiyo テーブルから削除してしまった方が良いと思います。
LEFT JOIN kihon ON tekiyo.bango = kihon.bango
で簡単に結合できますから。
・ツリー全体表示

〔341〕Re:SQL ステートメント制限
 s_kobayashi  (06/06/23 22:02)

引用なし
   >kabeさん、oyaさん

スレの趣旨とぜんぜん違うのですけれど。(^◇^;)

>^キング(?!ダム|スタ)

select meisho,ryakusho from kihon where meisho like "%キング%" group by meisho

上記sql文の検索結果によると、家庭園芸用に対応しようとする場合、屋号のキングは文頭に来るとは限りません。しかもホームランキング、クサキングなど本来の農薬名にキングを使うものが多数あるので単純に削除することもできません。対応策の検討が必要と思われます。

それと、ACFinderではtsushoのフィールドをtekiyoテーブルに置いていますが、これは検索の便宜を計るという意味でしょうか。tsushoはmeishoから生成されると考えるなら、kihonテーブル上にあるのが自然だと思うのですけれど、いかがでしょうか。
・ツリー全体表示

〔340〕Re:ACFinder 060622版
 Hidemi Oya WEB  (06/06/23 20:02)

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

>クエリーの結果が返ってくることしか想定していないので、create view などを実行すると検索結果がないというダイアログが出ます。
 本日確認して、ちょうど書こうと思ったところでした。SELECT 文以外では、結果がなくてもダイアログが出ないようにした方が良いですね。
・ツリー全体表示

〔339〕Re:ACFinder 060622版
 kabe WEB  (06/06/23 19:46)

引用なし
   kabe です。

>[#333]の修正を行いました。
すいません。これ不完全です。
クエリーの結果が返ってくることしか想定していないので、create view などを実行すると検索結果がないというダイアログが出ます。
ただ実行自体はできます。
・ツリー全体表示

〔338〕Re:正規表現拡張構文
 Hidemi Oya WEB  (06/06/23 13:31)

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

>試してみて、だめなら
>http://www.regular-expressions.info/delphi.html
>あたりを使うしかないですかねえ…(クラスと DLL を使うことになりますが)。
 昨夜試してみたら、TRegExpr ではだめでした。で、こちらの PerlRegEx を試してみましたが、これがなかなか良さそうです。クラスを使いますが、ビジュアルコンポーネントになっているので、分かりやすいです(使い方が分かってしまえばビジュアルコンポーネントじゃない方が良いんですけど)。コンポーネントのコンパイル時に DLL の元となる .obj を取り込んでしまうので、実行ファイルに DLL を添付する必要もありません。
 本題の (?= ), (?! ), (?<= ), (?<! ), (?>= ), (?>! ) も問題なく使えそうです。TRegExpr では $1, $2, .., $n による置換だけで、\1, \2, .. , \n による置換には対応していませんでしたが、PrlRegEx はこちらにも対応しています。

 現在定型処理ルーチンをアップデート中ですが、こちらは PerlRegEx 対応にしますので、完成したらメールします。
 ちなみに、定型処理ルーチンのアップデート内容は下記の通り。
(1) 作物名、病害虫名、農薬の種類をメモコントロールで表示するとともに、サイズを可変に
(2) 設定可能項目に使用時期と使用方法を追加
(3) 設定項目を必須項目(未入力だとエラー)と推奨項目(未入力でもエラーにならない)の2種類に分ける
・ツリー全体表示

〔337〕正規表現拡張構文
 Hidemi Oya WEB  (06/06/23 0:56)

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

>ところで
>[#328]
>アグロス(?!リン|ター)
>^キング(?!ダム|スタ)
>をReplaceRegExprで使うとエラーになるのですが、どう書けばいいのでしょうか。
RegExprModifierX := true;
で使えると思ったんですが、ヘルプを見ると全ての (?...) 拡張構文に対応してるわけじゃなさそうですね。試してみて、だめなら
http://www.regular-expressions.info/delphi.html
あたりを使うしかないですかねえ…(クラスと DLL を使うことになりますが)。
・ツリー全体表示

〔336〕Re:ACFinder 060622版
 Hidemi Oya WEB  (06/06/23 0:04)

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

>[#331][#332]の屋号の修正を行いました。
 三井シーゼットフロアブル、ヤシマNCSについては、別通称とするか同一通称とするか微妙ですね。薬剤タブで使用する時は、分かれてない方が使いやすいです。定型処理では別通称の方が都合が良さそうなんですが、大抵は対象作物を指定するでしょうから、同一通称でもあまり問題はないかもしれません。
 考えてみたら、キャベツの根こぶ病で通称NCSが検索されたとして、それにヤシマNCSが含まれているかどうかは名称を見るまで分からないわけで、だとすれば別通称としてもあまり意味はないかもしれませんね。

 定型処理や SQL で通称のみの表示にしても、たとえば検索結果の「農薬の種類」「名称」「通称」で右ボタンクリックすると「薬剤タブで検索」メニューが出て、薬剤候補にグリッドの値を設定して自動的に検索する機能があれば、簡単に個々の農薬の適用を確認することができますね。ついでに、「作物名」で右クリックすると「作物・病害虫タブで検索」メニューが出て、自動的に検索されるとか…。
 これができれば、同一通称で適用が異なる農薬も全て同じ通称としてしまっても何とかなりそうです。


>[#333]の修正を行いました。
 ありがとうございます。あとで試してみます。
・ツリー全体表示

〔335〕Re:SQL ステートメント制限
 kabe WEB  (06/06/22 22:46)

引用なし
   >Hidemi Oyaさん
kabe です。

> kihon, tekiyo テーブルを直接変更する可能性がある SQL 文のみを禁止し、あとは自由に使えるといいですね。下記のような感じでチェックできるのではないかと思います。
060622版に入れてみました。

ところで
[#328]
アグロス(?!リン|ター)
^キング(?!ダム|スタ)
をReplaceRegExprで使うとエラーになるのですが、どう書けばいいのでしょうか。
・ツリー全体表示

〔334〕ACFinder 060622版
 kabe WEB  (06/06/22 22:22)

引用なし
   kabe です。

060622版です。
http://acfinder.kabe.info/

[#331][#332]の屋号の修正を行いました。
[#332]
>定型処理タブで設定保存したときに、用途の設定に閉じシングルクォートがつかず、
yoto = '設定値…
を修正しました。

[#333]の修正を行いました。

グリッド上でダブルクリックかエンターすると、該当行を別窓で表示します。

実験的にインデックスを増やしたので、データベースのファイルサイズが増えます。
・ツリー全体表示

〔333〕SQL ステートメント制限
 Hidemi Oya WEB  (06/06/22 11:45)

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

 テンポラリビューやテンポラリテーブルを使ったクエリを実行したいと思ったんですが、実行禁止になってました。複雑なクエリを一発で書くのは難しいですし、ビューで再利用したいクエリもあります。
 kihon, tekiyo テーブルを直接変更する可能性がある SQL 文のみを禁止し、あとは自由に使えるといいですね。下記のような感じでチェックできるのではないかと思います。index1, index2 は ACFinder が標準で使っているインデックス名を指定してください。

 あと、SQL のエラーメッセージも DecodeHex 関数で hex..... を ShiftJIS に戻してもらった方が見やすいです。おそらく、デバッグ用に Utf8ToAnsi のみにしてあったんじゃないかと思うのですが…。

RegExprModifierI := true;
RegExprModifierS := true;
if ExecRegExpr('(CREATE|DROP)\s+.*TABLE\s+.*(acis\.)?(kihon|tekiyo)', sql) then error;
if ExecRegExpr('(INSERT|REPLACE)\s+.*INTO\s+(acis\.)?(kihon|tekiyo)', sql) then error;
if ExecRegExpr('DELETE\s+FROM\s+(acis\.)?(kihon|tekiyo)', sql) then error;
if ExecRegExpr('UPDATE\s+.*(acis\.)?(kihon|tekiyo)', sql) then error;
if ExecRegExpr('CREATE\s+.*TRRIGER\s+.*ON\s+(acis\.)?(kihon|tekiyo)', sql) then error;
if ExecRegExpr('DROP\s+INDEX\s+.*(acis\.)?(index1|index2|....)', sql) then error;
・ツリー全体表示

〔332〕Re:ACFinder 060620版
 Hidemi Oya WEB  (06/06/21 16:06)

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

 毎度素早い修正をありがとうございます。
 前のバージョンからですが、定型処理タブで設定保存したときに、用途の設定に閉じシングルクォートがつかず、
yoto = '設定値…
となってしまいます。

 あと、屋号関係ですが、[#331] で書いた以外に、「三井ソイリーン」の「三井」(硫酸銅の方も後ろに(粉状)が付いてて適用が異なる他の硫酸銅と区別できるので取っちゃっても大丈夫そうです)、「東ソーシーゼットフロアブル」の「東ソー」、「三洋NCS」の「三洋」が適用がほぼ同じ農薬があるにもかかわらず取れていません。
 逆に、「三井シーゼットフラブル」や「ヤシマNCS」のように、他の同一通称の農薬とかなり適用が違うものは、別通称として認識された方が使いやすいかもという感じもします。1剤ものの農薬の屋号をあえて取るかどうかなども含めて、どこまで屋号を取ってしまうかは、なかなか悩ましいものがありますね(^_^;)。

>#323,#326の修正を行いました。
 #番号の両脇に [] を書いてもらうと、自動的に記事にリンクします。
・ツリー全体表示

〔331〕Re:通称
 Hidemi Oya WEB  (06/06/21 15:37)

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

> 通称についてはoyaさんのをもとにいろいろと試行錯誤して、以下のような内容で作成しています。どこを変更したのか覚えていないのでサブルーチンを全部お見せします。(^◇^;)

> 'アグロス(?!リン|ター)|イヅツ|カダン(?=泡)|カヤク|^キング(?!ダム|スタ)|'.
 「イヅツヤ」ってのもあるので、「イヅツ(ヤ)?」とした方が良いです。

> 'クミアイ( )?|くみあい|クレハ|コープケミカル|サイアナミッド|サンケイ|シオ
 屋号と通称名の半角スペースは後で一括削除するので、「クミアイ」で OK です。

> 'ミカサ|メリーネコ(?!\d)|モンサント|ヤシマ(産業)?|ユーピーエル|ローヌ・プーラン|'.
 りん化亜鉛、クマリン、タリウムは商品によって適用がバラバラなので、「メリーネコ」は削除しない方が良さそうです。

> '日産|日曹|日本化薬|菱商|細井|丸紅|丸和|三井(東圧)?|三菱(油化)?|明治|理研|呉羽|“京都微研\"';
 京都微研は今のところ1剤だけですが、今後もダブルクォートが付くとは限らないのと、他のメーカーが屋号をダブルクォートで囲むところも出てくるかもしれないで、ダブルクォートは括弧等と同様に後で一括処理した方がよろしいかと…。

 あと、屋号の追加で「マガン」「ニューファム」があります。私のも kabe さんのも同様ですね(^_^;)。
・ツリー全体表示

〔330〕Re:通称
 kabe WEB  (06/06/20 23:34)

引用なし
   >s_kobayashiさん

kabe です。
参考にさせていただきます。

この他には ALモミゲンキ がありました。
・ツリー全体表示

〔329〕Re:ACFinder 060619版
 kabe WEB  (06/06/20 23:26)

引用なし
   >Hidemi Oyaさん

kabe です。
ありがとうございました。
修正しました。

>>リスト型は変更されているようですが、エレメント型がクリアされていないようです。
> ありゃ〜、私のせいだったのね(^_^;)。エレメント型は更新されるけど、リスト型が更新されませんね。
あれ、逆でしたか。
・ツリー全体表示

〔328〕Re:通称
 s_kobayashi  (06/06/20 23:25)

引用なし
   >Hidemi Oyaさん

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

 カテゴリ毎にメーカーで普及会を編成して登録内容や名称の協議はされていますけれど、ルールとして明確化されていない部分も多いので、今回のような表記ふれもあるのでしょうね。

 通称についてはoyaさんのをもとにいろいろと試行錯誤して、以下のような内容で作成しています。どこを変更したのか覚えていないのでサブルーチンを全部お見せします。(^◇^;)

sub cut_yago {
    #農薬名称から屋号を除去する。
    my $list =
 'ACC|BASF|DAS|DIC|F.G.|FMC|GF|HCC|IC(I)?|'.
 'JA|JC|SDS|ST|TG|TM|UBE|'.
 'ACC|BASF|DAS|DIC|F\.G\.|FMC|GF|HCC|IC(I)?|'.
 'JA|JC|SDS|ST|TG|TM|UBE|'.
 'アグロス(?!リン|ター)|イヅツ|カダン(?=泡)|カヤク|^キング(?!ダム|スタ)|'.
 'クミアイ( )?|くみあい|クレハ|コープケミカル|サイアナミッド|サンケイ|シオノギ|'.
 'シンジェンタ|ゼネカ|タケダ|チバガイギー|デュポン|トクヤマ|トモノ(?!ー)|ナガセ|'.
 'ノバルティス|ハース|バイエル|ファイザー|フマキラー|ホドガヤ|ホクコー|'.
 'ミカサ|メリーネコ(?!\d)|モンサント|ヤシマ(産業)?|ユーピーエル|ローヌ・プーラン|'.
 '旭|石原|一農|井筒屋|出光|永光|大塚|科研|兼商|協友|協和|金鳥|興農|三光|三共(?!の)|'.
 '三明|三洋|昭和|信越|新富士|住化|住商|住友(化学)?|双商|太洋|武田|東ソー|南海|日農|'.
 '日産|日曹|日本化薬|菱商|細井|丸紅|丸和|三井(東圧)?|三菱(油化)?|明治|理研|呉羽|“京都微研\"';

# 屋号削除
 my $t = $_[0];
 utf8::is_utf8($t) or decode('eucjp',$t);
# 「硫酸銅」「(粉末)生石灰」「石灰硫黄合剤」「石灰窒素」「エムダイファー」の前を削除
 $t =~ s/^.*?(硫酸銅|(粉末)?生石灰|石灰硫黄合剤|石灰窒素|エムダイファー)/\1/;
# $t =~ s/(家庭)?園芸(用)?|産業//; # 「(家庭)園芸(用)」「産業」削除
 $t =~ s/フマキラー印/家庭園芸用/; # フマキラー印スミチオン乳剤、マラソン乳剤への対応
 $t =~ s/(.*?)$//; # 末尾括弧を削除
 $t =~ s/防散/\1/; # 「防散」を削除
 $t =~ s/(「|[|〔|\[)?($list)(\]|〕|]|」)?(印|・|の|−)?//; # 屋号と接尾語を削除
 $t =~ s/^[ \-]//; # 屋号と商品名の間の半角スペースを除去
 $t;
}
・ツリー全体表示

〔327〕ACFinder 060620版
 kabe WEB  (06/06/20 23:21)

引用なし
   kabe です。

060620版です。
http://acfinder.kabe.info/

#323,#326の修正を行いました。
・ツリー全体表示

〔326〕Re:ACFinder 060619版
 Hidemi Oya WEB  (06/06/20 22:51)

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

>リスト型は変更されているようですが、エレメント型がクリアされていないようです。
 ありゃ〜、私のせいだったのね(^_^;)。エレメント型は更新されるけど、リスト型が更新されませんね。すみません、FTplQuery を書き換えるべきなのに、書き換えちゃいけない FTemplate.Text を書き換えちゃってました。
 TemplateToQuery を下記のように、修正してください(う〜む、どうしてもインデントが全角スペースになってしまう)。エレメント型を先に展開して、その後リスト型を展開、リスト型展開ルーチンの FTemplate.Text を全て FTplQuery に置換です。

 // エレメント型メタフィールド展開
 dest := TStringList.Create;
 list := TStringList.Create;
 for i := 0 to FTemplate.Count - 1 do begin
  line := Trim(FTemplate.Strings[i]);
  if not ExistElement([sakumotsu..shurui], line) then
   dest.Add(line)
  else
   for f := sakumotsu to shurui do begin
    if not ExistElement([f], line) then continue;
    case f of
     sakumotsu: list.CommaText := edtTplSakumotsu.Text;
     byochu: list.CommaText := edtTplByochu.Text;
     yoto: list.CommaText := edtTplYoto.Text;
     shurui: list.CommaText := edtTplShurui.Text;
    end;
    for j := 0 to list.Count - 1 do dest.Add(ReplaceRegExpr('\[' + CField[f] + '\]', line, list.Strings[j], false));
    break;
   end;
 end;
 FTplQuery := ReplaceRegExpr(',(\s+from)', dest.Text, '$1', true);
 list.Free;
 dest.Free;
 // リスト型メタフィールド展開
 if FTplSakumotsu then begin
  FTplQuery := ExpandList(sakumotsu, FTplQuery, edtTplSakumotsu.Text);
 end;
 if FTplByochu then begin
  FTplQuery := ExpandList(byochu, FTplQuery, edtTplByochu.Text);
 end;
 if FTplYoto then begin
  FTplQuery := ExpandList(yoto, FTplQuery, edtTplYoto.Text);
 end;
 if FTplShurui then begin
  FTplQuery := ExpandList(shurui, FTplQuery, edtTplShurui.Text);
 end;
・ツリー全体表示

〔325〕Re:ACFinder 060619版
 kabe WEB  (06/06/20 21:59)

引用なし
   >Hidemi Oyaさん
kabe です。

> 定型処理タブなんですが、実行後にテンプレートを読み込むと、処理内容タブがアクティブになるものの、タブ内は検索結果のストリンググリッドのままです。ページコントロールではなく、タブコントロールを使っているんでしょうか?
そうです。
Visible を切り替えるのを忘れてました。

> それと、実行後に作物や病害虫を書き換えて再度「実行」ボタンをクリックしても、新たな条件で再検索されず、前回実行結果が表示されます。
リスト型は変更されているようですが、エレメント型がクリアされていないようです。
TemplateToQuery 中のメタフィールドを展開する前に
FTemplate.Text := ReplaceRegExpr('.*#template\s*\{\s*(.*?)\s*?\}.*', memTplSource.Text, '$1', true);
を入れるとクリアされるみたいですが、こんな方法で大丈夫でしょうか。
・ツリー全体表示

〔324〕Re:ACFinder 060619版
 Hidemi Oya WEB  (06/06/20 20:02)

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

 定型処理タブなんですが、実行後にテンプレートを読み込むと、処理内容タブがアクティブになるものの、タブ内は検索結果のストリンググリッドのままです。ページコントロールではなく、タブコントロールを使っているんでしょうか?
 それと、実行後に作物や病害虫を書き換えて再度「実行」ボタンをクリックしても、新たな条件で再検索されず、前回実行結果が表示されます。
・ツリー全体表示

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