stringにSQL文を貯めこんでいく方式で、
データの検索をしています。
コンボボックス(検索項目)とエディット(検索文字)のセットが4つあります。
コンボボックスには
「レコードID」、
「氏名」、
「氏名カナ」、
「電話番号」
の4項目が4つのコンボボックスそれぞれ Item.Addされています。
仮にコンボボックスの名前を
combo_key1、
combo_key2、
combo_key3、
combo_key4
エディットの名前を
edit_key1、
edit_key2、
edit_key3、
edit_key4 とします。
それぞれのコンボボックスに例えば、
combo_key1 = 氏名カナ、
combo_key2 = 電話番号、
combo_key3 = 氏名カナ、
combo_key4 = 電話番号
が選択されていて、
全てのエディットにも検索文字が入力されていた場合に、
where (氏名カナ='アイウエオ' or 氏名カナ='カキクケコ') and (電話番号 = '000-0000' or 電話番号 = '000-0000')
と、自動的にSQL文を作成したいのです。
コンボボックスに「レコードID」、「氏名」、「氏名カナ」、「電話番号」の別々の選択がされていたら、全て「and」でつなげ、
同一項目が選択されている場合は、「or」でつなげたいのです。
いろいろ試行錯誤しているのですが、私には難しく悩んでおります。
どなたか手助けお願いします!
ぱっと思いついた方法としては、StringListをキーが4つなら4つ用意して、選択されてるのがレコードIDなら1個目のリストに、氏名が選択されてるなら2個目のリストにという風にキー毎に検索条件をリストに追加するようにしておいて
最後に、それぞれのリスト内の項目はorで繋いで、最後にそれぞれのリストから作成した条件をandで繋ぐという風にすればどうでしょ?
auさん
回答有り難うございます。
なるほど、その発想はありませんでした。
早速やってみましたところ、
TStringListに値を入れて、
1〜4のstringlistから値を抽出する場合、
forで回して取得したいと思い
for i:=1 to 4 do begin
TStringList(FindComponent('keylist'+IntToStr(i))).Text
という感じでやろうとしたのですが、
TStringListは使えないのですね。
keylistは名前です。
楽にやりたいと思うのですが、良い方法ないでしょうか?
重ね重ねお願いします。
ComboBoxだけど
var
StringList: TStringList;
I: Integer;
C1: String;
B: Boolean;
Result: String; //結果
begin
StringList := TStringList.Create;
StringList.AddObject(ComboBox1.Text+ '=' + Char(39) + Edit1.Text + Char(39) , TObject(ComboBox1.ItemIndex) );
StringList.AddObject(ComboBox2.Text+ '=' + Char(39) + Edit2.Text + Char(39) , TObject(ComboBox2.ItemIndex) );
StringList.AddObject(ComboBox3.Text+ '=' + Char(39) + Edit3.Text + Char(39) , TObject(ComboBox3.ItemIndex) );
StringList.AddObject(ComboBox4.Text+ '=' + Char(39) + Edit4.Text + Char(39) , TObject(ComboBox4.ItemIndex) );
StringList.Sort;
Result := StringList[0];
C1 := '';
B := False;
for I:=1 to StringList.Count - 1 do
begin
if Integer(StringList.Objects[I-1]) = Integer(StringList.Objects[I]) then
begin
C1 := ' or ';
end
else
begin
C1 := ') and (';
B := True;
end;
Result := Result + C1 + StringList[I]
end;
if B = True then Result := '(' + Result + ')';
StringList.Free;
KHE00221さん
回答有り難うございます。
バッチリでした!
StringListの使い方をよくわかってませんで、
目から鱗でした。
プログラムがすごくスマートになりました。
大変勉強になりました。
お二方、ありがとうございました!
ツイート | ![]() |