Q&A

  • 코딩좀 봐주세요.틀린점을 지적해 주세요
4개 정도의 radiogroupbox를 써서 선택되어진 항목을 포함하는 record만 뽑아내려면 어떤 식으로 코딩을 해야 하나요

예를 들면

첫번째 radiogroup은 미혼, 기혼

두번째 radiogroup은 남, 녀

그래서 dbgrid에 결과를 나타내고 싶은데요

조건이 하나씩은 되는데 4가지를 어떻게 연결해야 할지 잘 모르겠습니다.

radiogroup 4개중 1가지만 선택 될 수도 있고 모두 다 선택될 수도 있게 할려면요..

도와주세요..



procedure TForm7.BitBtn2Click(Sender: TObject);

var

wedding, SQL, andstr,wherestr : string;

begin



andstr := 'and';

if RG_WedingState.ItemIndex = 0 then

wedding := '1';

if RG_WedingState.ItemIndex = 1 then

wedding := '2';



if wherestr = '' then

wherestr := 'where' + wedding;



if Query1.Active = true then

begin

Query1.Active := False;

end;



SQL := SQL + wherestr;

Query1.SQL.Clear;

SQL := 'select * from "GSCUM00" where CUFLAG = "0"';

SQL := SQL + ' and CUKHGU = "' + wedding + '"';

Query1.SQL.Add(SQL);

Query1.Active := true;



if RadioGroup2.ItemIndex = 0 then

wedding := '1';

if RadioGroup2.ItemIndex = 1 then

wedding := '2';



if wherestr = ''then

wherestr := wherestr+'where'+wedding

else

wherestr := wherestr+andstr+wedding;



if Query1.Active = true then

begin

Query1.Active := False;

end;

SQL := SQL + wherestr;

Query1.SQL.Clear;

SQL := 'select * from "GSCUM00" where CUFLAG = "0"';

SQL := SQL + ' and CUBTGU = "' + wedding + '"';

Query1.SQL.Add(SQL);

Query1.Active := true;





if RadioGroup3.ItemIndex = 0 then

wedding := '1';

if RadioGroup3.ItemIndex = 1 then

wedding := '2';



if wherestr = '' then

wherestr := wherestr+'where'+wedding

else

wherestr:= wherestr+andstr+wedding;



if Query1.Active = true then

begin

Query1.Active := False;

end;

SQL := SQL + wherestr;

Query1.SQL.Clear;

SQL := 'select * from "GSCUM00" where CUFLAG = "0"';

SQL := SQL + ' and CUDMGU = "' + wedding + '"';

//ShowMessage(SQL);

Query1.SQL.Add(SQL);

Query1.Active := true;





if RadioGroup4.ItemIndex = 0 then

wedding := '1';

if RadioGroup4.ItemIndex = 1 then

wedding := '2';

if RadioGroup4.ItemIndex = 2 then

wedding := '3';

if RadioGroup4.ItemIndex = 3 then

wedding := '4';



if wherestr = '' then

wherestr := wherestr+'where'+wedding

else

wherestr:= wherestr+andstr+wedding;



if Query1.Active = true then

begin

Query1.Active := False;

end;

SQL := SQL + wherestr;

Query1.SQL.Clear;

SQL := 'select * from "GSCUM00" where CUFLAG = "0"';

SQL := SQL + ' and CUHMCO = "' + wedding + '"';

//ShowMessage(SQL);

Query1.SQL.Add(SQL);

Query1.Active := true;

end;

1  COMMENTS
  • Profile
    하얀까마귀 2000.03.09 18:59
    안녕하세요 이선미님 하얀까마귀 입니다.

    음... 솔직히 코드를 자세히 보지는 않았습니다. 그래서 답변에 약간이라도 무제가 있거든 제게 메일 주세요.. 죄송... 좀길어서.. ^^;



    우선 라디오 그룹에 대해서

    라디오 그룹에서 선택하지 않았을때는 itemindex = -1입니다.. 순서대로 0 부터 되지만

    선택하지 않으면 -1의 값이 들어가게 됩니다. 이것 뿐만이 아니고 거의모든 TStrings형이 이런식으로 되어 있습니다.



    그리고 소스를 조금은 봤는데 좀 이상하게 되어 있더라구요...

    4개의 조건으로 검색하는거 아니에요????



    select * from table

    where (조건1 = 조건1)

    and (저건2 = 조건2) and (조건3 = 조건3) and (조건4 = 조건4)



    이렇게요... 저는 그렇게 알아들었는데 코딩은 좀 다르게 된것 같아서...



    일단 4개의 조건에 모두 만족하는 데이타만 추출한다고 보구 말씀드릴께요...

    일단 이건 좀 간단해요... 왜냐하면 그냥 SQL문만 만들어 주면 되거든요...

    with Query1 do

    begin

    Close;

    SQL.Clear;

    SQL.Add(' select * from GSCUM00 ');

    SQL.Add(' where 1 = 1 '); <-- 요놈을 쓰는 이유는 조건이 없을수도 있느니까

    코딩을 간단히 하기 위해서 쓴겁니다.

    case 그룹1.itemindex of

    0 : begin

    SQL.Add(' AND 결혼 = 했다 ');

    end;

    1 : begin

    SQL.Add(' AND 결혼 = 안했다 ');

    end;

    end;

    case 그룹2.itemindex of

    0 : begin

    SQL.Add(' AND 성별 = 남자 ');

    end;

    1 : begin

    SQL.Add(' AND 성별 = 여자 ');

    end;

    end;

    case 그룹3.itemindex of

    end;

    case 그룹4.itemindex of

    end;

    OPEN;

    end

    이렇게 하시면 되죠.. 아닌가??? 좀 쉬운것 같은데.. 아니면 메일주세요.. 자세한 설명과 함께.. 코딩은 계속 여러번 오픈하게 되어 있는것 같아서.. 좀 이해가 안되요...

    그렇게 만드셔야 하는가?????



    아!! 그러고 선택되지 않았을때는 itemindex가 -1이니까 그냥 무시하니까 이대로 하시면 제가 말씀드린 결과는 얻을수 있을겁니다.

    그럼 즐거운 시간 되세요..

    - 하얀까마귀 -