where条件内のCheckBoxについて

解決


aaa  2015-07-01 19:22:08  No: 47427

DBGridにて保守画面作成中です。

ヘッダーの検索条件に
コンボボックスにて営業所・営業部選択できるようにしてます。
もう一つ検索条件があり、チェックボックスにて区分を設けてるのですが、

☐A ☐B ☐C ☐D ☐E ☐F ☐G

と7つチェックボックスがあります。
明細抽出時に、営業所or営業部 and チェックされた区分CD
で絞込みをしたいです。
この時チェックは複数可能です。
ここで聞きたいのはこの時のwhere文の書き方です。

今は
sWhereSQL := ' where 0 = 0 ';
// 店所
if cmbKaisou.ItemIndex = 0 then
  sWhereSQL := sWhereSQL
             + ' and 営業所CD = ' + currtostr(edtEIGYO.Value)
else
  sWhereSQL := sWhereSQL
             + ' and 営業部CD = ' + currtostr(edtEIGYO.Value);

// 収入区分
    if chkA.checked = True then
      sWhereSQL := sWhereSQL
                + ' and (区分CD in [1,10])';
    if chkB.checked = True then
      sWhereSQL := sWhereSQL
                + ' and (区分CD in [2,20])';
    if chkC.checked = True then
      sWhereSQL := sWhereSQL
                + ' and (区分CD in [3,30])';
    if chkD.checked = True then
      sWhereSQL := sWhereSQL
                + ' and (区分CD in [4,40])';
    if chkE.checked = True then
      sWhereSQL := sWhereSQL
                + ' and (区分CD in [5,50])';
    if chkF.checked = True then
      sWhereSQL := sWhereSQL
                + ' and (区分CD in [6,60])';
    if chkG.checked = True then
      sWhereSQL := sWhereSQL
                + ' and (区分CD in [7,70])';

としています。
この書き方だと()の場所が悪い為
思ってる通りに明細が出ません。
例えば、☐B ☐D  にチェックされているとき

(営業所 = XXX) and (区分CD = 2 OR 区分CD = 20) and (区分CD = 4 OR 区分CD = 40) 

となってしまうので...。

(営業所 = XXX) and (区分CD = 2 OR 区分CD = 20 or 区分CD = 4 OR 区分CD = 40) 

と出したいのです。
1つ1つ組み合わせてくと7つチェックボックスがありますので
組み合わせの数がすごいことになります。
何か効率の良い方法はございませんでしょうか?

バージョンは Delphi® XE バージョンです。

長々とすみません。宜しくお願い致します。


aaa  2015-07-01 19:24:34  No: 47428

文字化けしてしまいましたが
☐A ☐B ☐C ☐D ☐E ☐F ☐G

□ A  □  B  □  C  □ D  □  E  □ F  □  G  

☐B ☐D

□  B  □ D

になります。


通りすがり  2015-07-01 19:36:04  No: 47429

sWhereSQLにぐりぐり条件を足してゆくのではなく、営業所、営業部の部分と区分CDの部分で別々に文字列変数を用意して、あとでこの2つをまとめればいいんじゃないですかね。

# 関係ないですけどコードをCDって略すのってXXですよね(自主規制)。


igy  2015-07-02 00:20:44  No: 47430

ちなみに、

DBGridで文字が上手く反映されません
https://www.petitmonte.com/bbs/answers?question_id=8525

は、解決されましたか?

# 質問された方と同じ人でしたら、ですが・・・


aaa  2015-07-02 19:01:24  No: 47431

解決しました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加