Q&A

  • dbgrid를 이용한 질문
oracle 8

delphi c/s 사용합니다



시간표table, 수강신청table 이 있습니다

시간표 table : s_haksu s_gyosu s_ban s_hakgwa s_gubun

수강신청 table : su_haksu su_gyosu su_ban su_hakbun su_sungjuk su_dung



제가한일

마스터dbgrid detail dbgrid 를 각각 만들엇습니다

각각은 datasource1, 2 table1, 2 dbgrid1,2 를 만들고



table2에서 마스터source - table1 masterfield - haksu, gyosu, ban 을

match 시켯습니다



질문1)

dbgrid1 에서

s_gubun(학수구분)은 숫자로만 되어있습니다

이것을 1은 '선택'으로 2는 '필수' 로 display 하고싶습니다





질문2)

dbgrid2 에서

수강신청한 학생명단이 나옵니다

이때 연번항목을 추가해서 연번을 display 하고싶습니다



질문3)

dbgrid2 에서

수강신청한 학생명단이 나옵니다

이때 성적입력난에 0 ~ 100점 사이에 점수를 입력하도록

조건을 propery에서 min값 max값을 지정했습니다

조건에 맞지 않으면 error message 가 화면에 뜨게 하고싶습니다

지금은 프로그램이 죽어버립니다

어떤 event에서 어떻게 exception 처리를 해야 하나요

질문4)

dbgrid2 에서

수강신청한 학생명단이 나옵니다

이때 성적입력난에 점수를 입력하면

90 su_dung에 'A'

88 su_dung에 'B+'

가 display 되게 하고싶습니다





꼭 부탁드립니다 초보이고 또 급해서요 그리고 중요해서요

자세한 설명이면 더욱 고맙겠습니다



2  COMMENTS
  • Profile
    하윤철 1999.05.19 02:04
    TField의 OnValidate event에서 TField.value를 검사하세요.

    이 이벤트는 값이 입력되고 포커스가 이동하면서 생기는 이벤트입니다.

    방금 입력된 값을 검사하는데 도움이 되겠지요.

    그러니까 대충 코딩을 해보면...



    Procedure TForm1.Table2su_sungjukOnValidate(sender : TObject);

    begin

    // 질문3

    if not((Table2su_sungjuk.Value >= 0)

    and (Table2su_sungjuk.Value <= 100)) then

    begin

    // Error 메세지 보이고 포커스도 이동시켜주면 친절하겠지요?

    end

    else

    begin

    // 질문4

    Case Table2su_sungjuk.Value of

    90..100 : Table2su_dung.Value := 'A'; // 문법이 맞나요? ^^;

    ~~~~~

    else Table2su_dung.Value := 'F';

    end;

    end;

    end;



    참고로 Value는 각 필드 성격에 맞도록 AsString, AsFloat, AsInteger 등으로

    쓸수 있습니다.



    또 덧붙이면... TTable이라면 잘 모르겠지만 SQL을 슬수 있다면 질문1은 Oracle 함수를 써보세요. select decode(s_gubun, 1, '선택', 2, '필수', '') from.. 이렇게요.



  • Profile
    redhead 1999.05.19 01:24
    박천문 wrote:

    > oracle 8

    > delphi c/s 사용합니다

    >

    > 시간표table, 수강신청table 이 있습니다

    > 시간표 table : s_haksu s_gyosu s_ban s_hakgwa s_gubun

    > 수강신청 table : su_haksu su_gyosu su_ban su_hakbun su_sungjuk su_dung

    >

    > 제가한일

    > 마스터dbgrid detail dbgrid 를 각각 만들엇습니다

    > 각각은 datasource1, 2 table1, 2 dbgrid1,2 를 만들고

    >

    > table2에서 마스터source - table1 masterfield - haksu, gyosu, ban 을

    > match 시켯습니다

    >

    > 질문1)

    > dbgrid1 에서

    > s_gubun(학수구분)은 숫자로만 되어있습니다

    > 이것을 1은 '선택'으로 2는 '필수' 로 display 하고싶습니다

    >

    답변1)

    이것은 DBGrid에서 처리하는 것 보다는 DataSet에서 처리하는게 좋겠군요.

    Table1에 New Field해서 Lookup Field를 이용해보세요.

    혹은 Calc Field를 이용해도 무난하겠네요.

    >

    > 질문2)

    > dbgrid2 에서

    > 수강신청한 학생명단이 나옵니다

    > 이때 연번항목을 추가해서 연번을 display 하고싶습니다

    답변2)

    이 것은 위에서 설명한 Calc field로 해결할 수 있습니다.

    >

    > 질문3)

    > dbgrid2 에서

    > 수강신청한 학생명단이 나옵니다

    > 이때 성적입력난에 0 ~ 100점 사이에 점수를 입력하도록

    > 조건을 propery에서 min값 max값을 지정했습니다

    > 조건에 맞지 않으면 error message 가 화면에 뜨게 하고싶습니다

    > 지금은 프로그램이 죽어버립니다

    > 어떤 event에서 어떻게 exception 처리를 해야 하나요

    답변3)

    입력범위를 벗어난다고 프로그램이 죽는다는 건 좀 이상한데요?

    어찌되었건 조건문으로 check 하여도 좋고,

    try

    점수입력

    except

    showmessage('error');

    end;

    해도 좋겠네요.



    > 질문4)

    > dbgrid2 에서

    > 수강신청한 학생명단이 나옵니다

    > 이때 성적입력난에 점수를 입력하면

    > 90 su_dung에 'A'

    > 88 su_dung에 'B+'

    > 가 display 되게 하고싶습니다

    답변4)

    이 것 역시 위에 설명한 calc field로 해결이 될듯...



    --참고로 Lookup field란

    어떤 키값을 가지고 그에 해당하는 디스플레이 값을 찾는 것이고요.

    Calculated field란

    어떤 특정 field의 값이 들어오면 이 것을 계산해서 값을 갖는

    필드입니다. OnCalc... Event에 식을 쓰면 됩니다.

    >

    >

    > 꼭 부탁드립니다 초보이고 또 급해서요 그리고 중요해서요

    > 자세한 설명이면 더욱 고맙겠습니다

    >