Q&A

  • TTable 사용한 DBGrid에서 일부 field만 Sort하는 법/오름,내림차순 반복
안녕하세요..



먼저 제 문제에 관심을 가져주셔서 고맙습니다...^^



TTable component를 사용해서 DBGrid에 table을 연결했습니다.

이후 DBGrid의 OnTitleClick event를 사용해서 DBGrid의 title field를 클릭하면

sorting이 되도록 하려고 했습니다.



procedure TForm1.DBGrid1TitleClick(Column : TColumn);

begin

table1.IndexName := Column.FieldName;

end;



FieldName과 IndexName은 동일합니다.



단, 문제는 Index가 지정된 field는 sorting이 되는데,



Index가 지정되지 않은 field의 title을 클릭하면 error가 발생을 하는군요.



모든 field에 대해 index를 지정하지 않고, 일부 field만 sorting이 가능하도록 하는



방법은 없을까요? 제 생각엔 클릭한 Title의 field을 선별할 수 있다면



(mouse의 위치라든지..) 해결할 수 있을 것 같아 여러 가지 시도를 해보았는데



실력이 역부족입니다.



그리고 click event 발생시 오름차순과 내림차순이 반복되도록 할 수 있는 방법도



아시면 가르쳐 주셨으면 합니다.



너무 아는 바가 없어 질문조차도 영 아니네요.



많은 지적과 가르침 부탁드립니다.



그럼 행복하세요...구벅 ^^*♬

3  COMMENTS
  • Profile
    최석기 2000.08.21 19:10
    AddIndex라는 메소드를 사용하면 되요..



    제가 자료실에 올려놓은 자료 있거든요.



    한번 참고해보세요..



    TTable에서는 AddIndex라는 메소드가 바로 존재하니까 ClientDataSet를 쓸 필요는 없겠네요..



    도움이 돼었으면 하네요..



    물리학부생 wrote:

    > 안녕하세요..

    >

    > 먼저 제 문제에 관심을 가져주셔서 고맙습니다...^^

    >

    > TTable component를 사용해서 DBGrid에 table을 연결했습니다.

    > 이후 DBGrid의 OnTitleClick event를 사용해서 DBGrid의 title field를 클릭하면

    > sorting이 되도록 하려고 했습니다.

    >

    > procedure TForm1.DBGrid1TitleClick(Column : TColumn);

    > begin

    > table1.IndexName := Column.FieldName;

    > end;

    >

    > FieldName과 IndexName은 동일합니다.

    >

    > 단, 문제는 Index가 지정된 field는 sorting이 되는데,

    >

    > Index가 지정되지 않은 field의 title을 클릭하면 error가 발생을 하는군요.

    >

    > 모든 field에 대해 index를 지정하지 않고, 일부 field만 sorting이 가능하도록 하는

    >

    > 방법은 없을까요? 제 생각엔 클릭한 Title의 field을 선별할 수 있다면

    >

    > (mouse의 위치라든지..) 해결할 수 있을 것 같아 여러 가지 시도를 해보았는데

    >

    > 실력이 역부족입니다.

    >

    > 그리고 click event 발생시 오름차순과 내림차순이 반복되도록 할 수 있는 방법도

    >

    > 아시면 가르쳐 주셨으면 합니다.

    >

    > 너무 아는 바가 없어 질문조차도 영 아니네요.

    >

    > 많은 지적과 가르침 부탁드립니다.

    >

    > 그럼 행복하세요...구벅 ^^*♬

  • Profile
    임형호 2000.08.20 13:58
    당연히 인덱스를 너무 많이 사용하면 역효과가 발생합니다.

    그래서 정말 필요한 필드만 인덱스로 잡죠.

    그런데... 인덱스로 설정되어있지 않아도 query 컴포넌트를 사용하여 sql문의 order by문을 사용하면 sort가 됩니다.

    그리고 오름차순, 내림차순 순서대로 하실려면...

    제 생각에는 타이틀을 한번클릭할때 title에 어떤 변화를 주면 안될까여? 가령 색깔이라든지....모양이라든지..뭐... 그것으로 판단해서 sql의 order by 문에 desc를 붙였다 안붙였다 하면 되지 않을까요?

    테스트를 안해봐서.. 참..한델 1회 세미나때 김영대님께서 강의하신 내용중에 그런내용이 있던것으로 기억합니다. 윈도우탐색기처럼 타이틀 클릭시 sort시킨것이었거든요.

    김영대님께 직접 여쭤보시면 좋을듯 싶네요. (김영대님 죄송합니다. 떠넘기는것 같아서....)



    물리학부생 wrote:

    > 안녕하세요..

    >

    > 먼저 제 문제에 관심을 가져주셔서 고맙습니다...^^

    >

    > TTable component를 사용해서 DBGrid에 table을 연결했습니다.

    > 이후 DBGrid의 OnTitleClick event를 사용해서 DBGrid의 title field를 클릭하면

    > sorting이 되도록 하려고 했습니다.

    >

    > procedure TForm1.DBGrid1TitleClick(Column : TColumn);

    > begin

    > table1.IndexName := Column.FieldName;

    > end;

    >

    > FieldName과 IndexName은 동일합니다.

    >

    > 단, 문제는 Index가 지정된 field는 sorting이 되는데,

    >

    > Index가 지정되지 않은 field의 title을 클릭하면 error가 발생을 하는군요.

    >

    > 모든 field에 대해 index를 지정하지 않고, 일부 field만 sorting이 가능하도록 하는

    >

    > 방법은 없을까요? 제 생각엔 클릭한 Title의 field을 선별할 수 있다면

    >

    > (mouse의 위치라든지..) 해결할 수 있을 것 같아 여러 가지 시도를 해보았는데

    >

    > 실력이 역부족입니다.

    >

    > 그리고 click event 발생시 오름차순과 내림차순이 반복되도록 할 수 있는 방법도

    >

    > 아시면 가르쳐 주셨으면 합니다.

    >

    > 너무 아는 바가 없어 질문조차도 영 아니네요.

    >

    > 많은 지적과 가르침 부탁드립니다.

    >

    > 그럼 행복하세요...구벅 ^^*♬

  • Profile
    물리학부생 2000.08.21 07:20
    임형호 wrote:

    > 당연히 인덱스를 너무 많이 사용하면 역효과가 발생합니다.

    > 그래서 정말 필요한 필드만 인덱스로 잡죠.

    > 그런데... 인덱스로 설정되어있지 않아도 query 컴포넌트를 사용하여 sql문의 order by문을 사용하면 sort가 됩니다.

    > 그리고 오름차순, 내림차순 순서대로 하실려면...

    > 제 생각에는 타이틀을 한번클릭할때 title에 어떤 변화를 주면 안될까여? 가령 색깔이라든지....모양이라든지..뭐... 그것으로 판단해서 sql의 order by 문에 desc를 붙였다 안붙였다 하면 되지 않을까요?

    > 테스트를 안해봐서.. 참..한델 1회 세미나때 김영대님께서 강의하신 내용중에 그런내용이 있던것으로 기억합니다. 윈도우탐색기처럼 타이틀 클릭시 sort시킨것이었거든요.

    > 김영대님께 직접 여쭤보시면 좋을듯 싶네요. (김영대님 죄송합니다. 떠넘기는것 같아서....)



    임형호님 답변주셔서 정말 감사합니다..^^*



    그런데 말씀하신대로 적용하자니 TQuery를 사용해야하는데 저는 TTable을 사용했거든요.



    프로그램이 거의 마무리 단계라서 바꾸기엔 실력도 모자라고, 시간도 오래 걸릴 듯



    싶고.....



    그렇다고 단순 Sorting때문에 DataSet을 TTable에서 TQuery로 변경한 다음 처리하자니



    기가 막히구요...^^*



    혹 TTable을 사용하면서 가능한 방법은 없는지요?



    염치불구하고 다시 질문드려 죄송합니다..



    그럼 행복하세요....구벅 ^^*♬