Q&A

  • 나쁜 DBGrid 제발좀 너무급해서....
안녕하세요

다시 한번 부탁드립니다.



팁 또는 강좌란에서 찾아보아도 없기에 질문을 올립니다.



오라클의 rownum넘버 함수를 사용해서 번호가 나타나는데

이 번호를 이용해서 10번째 20번째 만을 나타나게 하려 합니다.



쿼리를 열고 데이타가 dbgrid에 삽입를 합니다

하지만 order by을 해야 하기때문에 select 문에서는 rownum를

이용해서 조건을 걸면 Sort가 되지 않습니다.



select xxx,yyy,zzz from table_name

where rownum <10 order by xxx <---- sort가 되지않음





그렇기 때문에 rownum를 사용하기 않고 DBGrid에서 10행부터

삭제을 하려 합니다.





질문의 요지는 DBGrid에서 특정행 부터 마지막 행 까지 삭제

할수 있는 방법을 알고 싶습니다.



감사합니다.

2  COMMENTS
  • Profile
    delchobo 2000.04.07 23:07
    Go100 wrote:

    > 안녕하세요

    > 다시 한번 부탁드립니다.

    >

    > 팁 또는 강좌란에서 찾아보아도 없기에 질문을 올립니다.

    >

    > 오라클의 rownum넘버 함수를 사용해서 번호가 나타나는데

    > 이 번호를 이용해서 10번째 20번째 만을 나타나게 하려 합니다.

    >

    > 쿼리를 열고 데이타가 dbgrid에 삽입를 합니다

    > 하지만 order by을 해야 하기때문에 select 문에서는 rownum를

    > 이용해서 조건을 걸면 Sort가 되지 않습니다.

    >

    > select xxx,yyy,zzz from table_name

    > where rownum <10 order by xxx <---- sort가 되지않음

    >

    >

    > 그렇기 때문에 rownum를 사용하기 않고 DBGrid에서 10행부터

    > 삭제을 하려 합니다.

    >

    >

    > 질문의 요지는 DBGrid에서 특정행 부터 마지막 행 까지 삭제

    > 할수 있는 방법을 알고 싶습니다.

    >

    > 감사합니다.



    질문을 제대로 이해했는지 모르겠지만

    원하는 행까지만 검색을 하시려면 View를 이용하셔도 됩니다.

    Rownum은 일단 일련번호를 붙인후에 Sorting을 하기때문에 그냥은 이용하실수

    없을것 같습니다.

    일단은 group by를 사용하셔서 View 테이블을 만드시고 View를 Select하시는것도

    하나의 방법일것 같습니다.

    ex)

    뷰 테이블 생성

    create or replace view ssss of

    select xxx, yyy, zzz from table_name

    group by xxx, yyy, zzz;



    실행

    select rownum, xxx, yyy, zzz from ssss;

    를 실행해보시면 sorting이 되어 있을겁니다.



    좋은 코딩 하세요...

  • Profile
    이재식 2000.04.07 22:41
    이재식 Wrote :

    안녕하세요?



    특정해부터 삭제를 하고 싶다면,

    디비그리드내에서 선택을 해서 삭제를 하고 싶은것인지,

    아니면 특정행으로 이동해서 어떤 이벤트에서 삭제를 하고 싶은것인지

    잘 모르겠군요...



    우선 rownum를 쓰면 소트가 안된다고 하셨는데요,

    한번 테스트를 해보아야 겠군요. ^^



    혹 rownum를 써서 정 소트구문이 먹질 않는다면

    아마 rownum를 쓰지 않고 order by구문으로 특정필드를 소트해서

    select를 하셨을 거라 생각합니다.



    구체적인 상황을 모르니까, 제가 하나의 예를 들어서 써보겠습니다.

    마우스로 디비그리드에서 특정행을 선택했고, 거기서부터 끝까지

    삭제를 하고 싶다고 가정합시다.

    xxx라는 필드로 소트가 되어있으니까 이것을 이용하는 것입니다.

    우선 특정행을 선택햇다고 합시다.

    삭제버튼 이벤트에서

    firstXXX := query1.fieldbyname('xxx').asString ;

    query1.Last ;

    EndXXX := query1.fieldbyname('xxx').asString ;

    with query2 do

    begin

    close ;

    sql.clear ;

    sql.add('delete from 테이블명') ;

    sql.add('where xxx >= :Fx') ;

    sql.add('and xxx <= :Ex') ;

    paramByName('Fx').asString := firstXXX ;

    paramByname('Ex').asString := EdnXXX ;

    ExecSql ;

    end ;



    이 방법외에 상황에따라 얼마든지 특정행부터 마지막까지 삭제를 할 수 있겠죠.

    방법은 많습니다.