Q&A

  • ComboBox의 질문입니다.....
안냐세요...

델의 불모지 경남 통영입니다.

그러다보니 지금 혼자서 독학을 하고 있는 학생입니다.

책과 싸움을 하다가 이렇게 통신으로 질문을 드립니다.

넓은 아량으로 이해를...



제가 만드는 인명관린데, 영 안 됩니다.



먼저 DB형식은 파라독스7/Table형식의 DB입니다.

DB로 만든 주민등록번호필드에서 번호로 'dd'라는 calculate필드를 만들어 Edit에 나타내었습니다. 임시필드라서 그런가요?

그러다보니 더 궁금한것은 DBGrid와 ComboBox에 연결에 연결을 한번 해 보려고 했습니다.

방법은 ComboBox에서 남자/여자를 선택하면 Table을 통해서 DBGrid에 해당 조건만 뿌려주는 방식이죠... 그런데 문제는 여깁니다.

제가 손수 무식한 머리를 굴러 코딩을 해 보았지만, 꿈쩍도 안하는 DBGrid... 미워 죽겠어요...

제가 아직도 초보라서 쉽게 아주 쉽게 좀 가르쳐 주세요

그리고, 선택된 남자/여자의 수가 Edit에 나왔는데 선택한 조건의 전체 데이타에서 %(비율)을 나타내고 싶은데 그런 방법도...

그럼 오늘도 즐거운 하루가 되시길





3  COMMENTS
  • Profile
    최은창 2000.01.27 19:52
    답변입니다.



    1. calculate 필드 : 이 필드는 계산을 위한 용도입니다. 그러니 DBEdit 등에 연결해도 입력이나 변경 등을 할 수 없습니다.



    2. ComboBox에 남자, 여자를 입력하고 위 값을 선택하면 DBGrid 내용을 변경 :

    Combobox OnChange 이벤트에 코딩을 하시면 됩니다. 범위를 주는 가장 쉬운 방법은 Filter를 사용하는 것인데 Table의 Filtered을 True로 두시고 Filter에 sex='1' 이런 식으로 필드명과 비교식을 써주시면 됩니다.



    예제



    procedure TForm1.ComboBox1Change(Sender: TObject);

    begin

    if combobox1.itemindex= 0 then

    table1.filter:='sex=''1'''

    else

    table1.filter:='sex=''2''';

    table1.filtered:=true;

    end;



    3. 비율을 나타내기 : 먼저 전체 카운트를 TABLE1.RECORDCOUNT 라는 식으로 알아내고 후에 FILTER를 건후 위와 같이 TAEBL1.RECORDCOUNT로 후의 레코드수(즉 남성이든, 여성이든)를 알아 그 후엔 적절히 계산하시면 됩니다.



    예제



    procedure TForm1.ComboBox1Change(Sender: TObject);

    var

    i, total : integer;

    begin

    table1.filtered:=false;

    total:=table1.recordcount;

    if combobox1.itemindex= 0 then

    table1.filter:='code=''1'''

    else

    table1.filter:='code=''2''';

    table1.filtered:=true;

    i:=table1.RecordCount;

    edit1.text:=i div total * 100; // 비율

    end;





    조금은 답변이 되셨는지....

  • Profile
    서지현 2000.01.28 03:45
    최은창 wrote:

    > 답변입니다.

    >

    > 1. calculate 필드 : 이 필드는 계산을 위한 용도입니다. 그러니 DBEdit 등에 연결해도 입력이나 변경 등을 할 수 없습니다.

    >

    > 2. ComboBox에 남자, 여자를 입력하고 위 값을 선택하면 DBGrid 내용을 변경 :

    > Combobox OnChange 이벤트에 코딩을 하시면 됩니다. 범위를 주는 가장 쉬운 방법은 Filter를 사용하는 것인데 Table의 Filtered을 True로 두시고 Filter에 sex='1' 이런 식으로 필드명과 비교식을 써주시면 됩니다.

    >

    > 예제

    >

    > procedure TForm1.ComboBox1Change(Sender: TObject);

    > begin

    > if combobox1.itemindex= 0 then

    > table1.filter:='sex=''1'''

    > else

    > table1.filter:='sex=''2''';

    > table1.filtered:=true;

    > end;

    >

    > 3. 비율을 나타내기 : 먼저 전체 카운트를 TABLE1.RECORDCOUNT 라는 식으로 알아내고 후에 FILTER를 건후 위와 같이 TAEBL1.RECORDCOUNT로 후의 레코드수(즉 남성이든, 여성이든)를 알아 그 후엔 적절히 계산하시면 됩니다.

    >

    > 예제

    >

    > procedure TForm1.ComboBox1Change(Sender: TObject);

    > var

    > i, total : integer;

    > begin

    > table1.filtered:=false;

    > total:=table1.recordcount;

    > if combobox1.itemindex= 0 then

    > table1.filter:='code=''1'''

    > else

    > table1.filter:='code=''2''';

    > table1.filtered:=true;

    > i:=table1.RecordCount;

    > edit1.text:=i div total * 100; // 비율

    > end;

    >

    >

    > 조금은 답변이 되셨는지....



    그런데 calculate 필드 는 계산용필드라고 하는데, 그럼 제가 했듯이 주민번호로 성별을 나눈것을 calculate 필드에 기억시킨 상태에서는 Combobox와 연계가 힘들다는 뜻인가요



  • Profile
    하얀까마귀 2000.01.28 17:01
    힘든게 아니라 안됩니다. 그건 불가능하죠..

    그리고 위의 답변또한 sex라는 필드가 테이블에 존재하는 겁니다.

    그러니까 현재 만드신 테이블에서는 불가능하죠.... ^^;

    비율은 그냥 계산을 하셔야 되고요...



    아무래도 필드를 추가하시는게 좋을것 같네요.