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 バージョンです。
長々とすみません。宜しくお願い致します。
文字化けしてしまいましたが
☐A ☐B ☐C ☐D ☐E ☐F ☐G
は
□ A □ B □ C □ D □ E □ F □ G
で
☐B ☐D
は
□ B □ D
になります。
sWhereSQLにぐりぐり条件を足してゆくのではなく、営業所、営業部の部分と区分CDの部分で別々に文字列変数を用意して、あとでこの2つをまとめればいいんじゃないですかね。
# 関係ないですけどコードをCDって略すのってXXですよね(自主規制)。
ちなみに、
DBGridで文字が上手く反映されません
https://www.petitmonte.com/bbs/answers?question_id=8525
は、解決されましたか?
# 質問された方と同じ人でしたら、ですが・・・
解決しました。
ありがとうございました。
ツイート | ![]() |