Q&A

  • Sort 을 자유자재로 하는 컴퍼넌트 없나요...?


그리드상에 보여지고 있는 모든 필드가 sort 의 조건이 될 수가 있구요...

더더군다나 필드들에 순서를 줘서 다중 sort 도 가능해야 합니다...



참고로 전에 파워빌더로 짠 프로그램에서는...

그리드를 마우스 오른쪽 버튼으로 누르면 팝업 윈도우가 나오면서...

그리드의 타이틀 리스트를 물고오고...

드래그 앤 드랍으로 소트 순서 리스트에 옮기고 ASC, DSC 설정해주고...

팝업 닫아버리면 그리드가 원하는대로 소트가 되도록 만든게 있었거든요...

물론 원하는 필드들에 대해서도 값을 주어서 필터도 가능하게 했었구요...



문제는 지금 사용하고 있는 델파이에서는 어디서도 이런 코딩이 가능하게 하는 기본적인 기능들이 없는거 같네요...

동적으로 키를 생성하는 것도 거리가 멀고...

필터 기능도 참 요원하고...



허나 고객이 누굽니까...?

황당한 요구를 하고 있으니 안해줄 수도 없고...



여차하다가는 SQL 문을 새로 생성해서 다시 실행해야 할 것 같은데...



혹여나 이런 기능을 가지고 있는 그리드 컴퍼넌트나 query 컴퍼넌트가 있는지...?



고수님들의 조언 부탁드립니다...

4  COMMENTS
  • Profile
    김광섭 2001.02.27 03:48
    이기태 wrote:

    >

    > 그리드상에 보여지고 있는 모든 필드가 sort 의 조건이 될 수가 있구요...

    > 더더군다나 필드들에 순서를 줘서 다중 sort 도 가능해야 합니다...

    >

    > 참고로 전에 파워빌더로 짠 프로그램에서는...

    > 그리드를 마우스 오른쪽 버튼으로 누르면 팝업 윈도우가 나오면서...

    > 그리드의 타이틀 리스트를 물고오고...

    > 드래그 앤 드랍으로 소트 순서 리스트에 옮기고 ASC, DSC 설정해주고...

    > 팝업 닫아버리면 그리드가 원하는대로 소트가 되도록 만든게 있었거든요...

    > 물론 원하는 필드들에 대해서도 값을 주어서 필터도 가능하게 했었구요...

    >

    > 문제는 지금 사용하고 있는 델파이에서는 어디서도 이런 코딩이 가능하게 하는 기본적인 기능들이 없는거 같네요...

    > 동적으로 키를 생성하는 것도 거리가 멀고...

    > 필터 기능도 참 요원하고...

    >

    > 허나 고객이 누굽니까...?

    > 황당한 요구를 하고 있으니 안해줄 수도 없고...

    >

    > 여차하다가는 SQL 문을 새로 생성해서 다시 실행해야 할 것 같은데...

    >

    > 혹여나 이런 기능을 가지고 있는 그리드 컴퍼넌트나 query 컴퍼넌트가 있는지...?

    >

    > 고수님들의 조언 부탁드립니다...



    소트를 그렇게 친절히 해주는 컴포넌트를 본적은 없구요.

    델파이는 그리드 이벤트중에서 ONTITLECLICK 에서 정의하는데 인자가 AColumn이죠

    이넘만 받어서 소트해야져... --"

    좀 간단하게 하자면 프로시져를 하나 만드세요.

    인자로는 AColumn, TRealDBGrid, TQuery 이렇게 받아서 하나 만들면 되죠.



    참고로 RealGrid 를 보면요 단지 스트링그리드에서만요. 아래 메서드가 있더군요. =="

    procedure Sort(ACol: Integer; bDesc: Boolean = False; bChangeTitle: Boolean = True);

    글구여...델파이는 쉽고 간단히 코딩되는 부분은 그리 많지 않아요 --"

  • Profile
    이기태 2001.02.27 07:04
    컴퍼넌트가 있는지 없는지 고민을 덜어주셔서 고맙습니다.

    없다면 머 어쩔 수 있나요 SQL 을 새로 만들어야지요.



    그런데 여기서 한가지 질문을 더 드리고자 합니다.

    모든 그리드가 공유할 수 있는 POPUP 윈도우를 생성하는 방법을 여쭤보고 싶은데요.



    일단은 현재 구성하려고 하는 방법은 다음과 같습니다.

    일단 작은 폼을 만들고 그 위에 탭을 두어서 첫번째 탭에는 소트를 위한 리스트를 두고.

    두번째 탭에는 필터링을 위한 리스트를 두고.

    세번째 탭에는 엑셀로 저장을 위한 다이얼로그 메뉴를 두고 싶습니다.



    문제는 이 폼에서 리스트 생성시 현재 사용자가 지정한 윈도우명과 그리드명을 넘기는 방법입니다.

    물론 델파이 안에서 사용하고 있는 이름을 그대로 넘겨주면 현재 그리드상에 나타나고 있는 컬럼들의 리스트를 검색해낼 수 있는지가 궁금합니다.

    물론 컬럼 이름을 쿼리 컴퍼넌트에서 Alias 해서 사용하게 되면 SQL 문 생성이 어려우므로 알리아스 없이 모든 컬럼이름을 그대로 사용한다고 가정하구요.



    좀 난해한 질문인가요?

    다시 설명하자면 쿼리 컴퍼넌트와 관계없이 현재 그리드상에서 Visible 로 지정되어 있는 컬럼들의 타이틀 Caption 과 Field Name 을 알아내는 방법이 궁금합니다.

    트랜잭션을 다시한다는 것이 찝찝하긴 하지만.

    고객이 전체 컬럼에 대해 소트 속성을 지정할 수 있고, 필터가 가능하도록 요청하였으니 무조건 안된다고 할 수도 없는 일이네요.

    하나를 얻으면 하나를 버릴 수 밖에요.

    성능이 떨어져도 저 기능은 지원이 되어야 한다고 하니 어쩔 수 없지요.



    또 엑셀로의 저장시도 현재 그리드에서 보여지는 정보만 저장되어야 하므로 어떻게 구현하는 것이 가장 쉬운 방법인지 알고 싶습니다.



    제 생각에는 그리드명, 쿼리 컴퍼넌트명, 윈도우명만 넘겨주는 프로시져를 만들었으면 하는데.

    물론 프로시져가 그리드와 쿼리 컴퍼넌트의 속성을 알아서 읽어내야겠지요?



    고수님들의 답변 부탁드립니다.

  • Profile
    김광섭 2001.02.27 22:26
    이기태 wrote:

    > 컴퍼넌트가 있는지 없는지 고민을 덜어주셔서 고맙습니다.

    > 없다면 머 어쩔 수 있나요 SQL 을 새로 만들어야지요.

    >

    > 그런데 여기서 한가지 질문을 더 드리고자 합니다.

    > 모든 그리드가 공유할 수 있는 POPUP 윈도우를 생성하는 방법을 여쭤보고 싶은데요.

    >

    > 일단은 현재 구성하려고 하는 방법은 다음과 같습니다.

    > 일단 작은 폼을 만들고 그 위에 탭을 두어서 첫번째 탭에는 소트를 위한 리스트를 두고.

    > 두번째 탭에는 필터링을 위한 리스트를 두고.

    > 세번째 탭에는 엑셀로 저장을 위한 다이얼로그 메뉴를 두고 싶습니다.

    >

    > 문제는 이 폼에서 리스트 생성시 현재 사용자가 지정한 윈도우명과 그리드명을 넘기는 방법입니다.

    > 물론 델파이 안에서 사용하고 있는 이름을 그대로 넘겨주면 현재 그리드상에 나타나고 있는 컬럼들의 리스트를 검색해낼 수 있는지가 궁금합니다.

    > 물론 컬럼 이름을 쿼리 컴퍼넌트에서 Alias 해서 사용하게 되면 SQL 문 생성이 어려우므로 알리아스 없이 모든 컬럼이름을 그대로 사용한다고 가정하구요.

    >

    > 좀 난해한 질문인가요?

    > 다시 설명하자면 쿼리 컴퍼넌트와 관계없이 현재 그리드상에서 Visible 로 지정되어 있는 컬럼들의 타이틀 Caption 과 Field Name 을 알아내는 방법이 궁금합니다.

    > 트랜잭션을 다시한다는 것이 찝찝하긴 하지만.

    > 고객이 전체 컬럼에 대해 소트 속성을 지정할 수 있고, 필터가 가능하도록 요청하였으니 무조건 안된다고 할 수도 없는 일이네요.

    > 하나를 얻으면 하나를 버릴 수 밖에요.

    > 성능이 떨어져도 저 기능은 지원이 되어야 한다고 하니 어쩔 수 없지요.

    >

    > 또 엑셀로의 저장시도 현재 그리드에서 보여지는 정보만 저장되어야 하므로 어떻게 구현하는 것이 가장 쉬운 방법인지 알고 싶습니다.

    >

    > 제 생각에는 그리드명, 쿼리 컴퍼넌트명, 윈도우명만 넘겨주는 프로시져를 만들었으면 하는데.

    > 물론 프로시져가 그리드와 쿼리 컴퍼넌트의 속성을 알아서 읽어내야겠지요?

    >

    > 고수님들의 답변 부탁드립니다.



    공용팝업메뉴를 만든다는 것은 공용 프로시져혹함수를 만든다는것과 같은 말이죠?

    알리아스는 동일하게해서 하나로 해결가능한데여.

    설사 테이블이 다른 데이타베이스에 있더라도 쿼리문의 From에서

    해당DB명.dbo.테이블명 하시면 되요. 물론 기본적으로 쓰는 얼라이어스는 연결하구여.

    이러면 얼라이어스는 해결이죠 ^^



    DBGrid1.Columns.Count 이건 그리드 컬럼의 총 갯수

    DBGrid1.DBColumns[AColumn.Index].FieldName; 필드이름

    이러면 소트 리스트 필드를 만들 수 있겠죠.

    리스트 쓰는거는 어렵지 않아 헬프를 참조하면 쉽게 할 수 있을 겁니다.



    소트리스트, 필터리스트 쿼리를 인자로 받는 프로시져에서

    소트리스트하고 필터리스트를 쿼리문의 Where 조건절에만 붙이고.

    인자로 받은 쿼리는 오픈만 하면 되겠죠 ^^



    이러면 소트를 리스트순으로 필터링해서 쿼리 생성할 수 있겠죠!



    엑셀로 저장하는 것은 여러 소스가 사이트마다 있으니 찾으보시면 되겠네요.

  • Profile
    이기태 2001.02.28 09:38


    감사합니다...



    소트용 공용함수도 다 만들었고...

    엑셀 저장 함수도 다 만들었습니다...



    필요해서 다 만들긴 했는데...

    정말 파워빌더 데이터윈도우 처럼 빠방하게 제 구실을 못하는 델파이가 밉다는 생각이 절로 드네요...



    아우아우...

    덕분에 도움이 많이 되었습니다...



    다시한번 감사드립니다...