Q&A

  • 검색 결과 중 일부만 fetch해 오는 방법은?
안녕하십니까.

프로젝트 중 DB 검색 결과가 수만건 이상 되는 경우가 발생하는 사례가 있어

이런 질문을 올리게 되었습니다.

검색을 하고 그 검색 결과 중에서 예를 들면 1번째 레코드 ~ 10번째 레코드,

그 다음은 11번째 레코드 ~ 20번째 레코드 이런 식으로 일부분씩 fetch해오는

방법을 알고 싶습니다. Data Access/Data Controls 컴포넌트들을 그냥 연결하면

검색 후 모든 결과를 한번에 다 fetch해 오지 않습니까? 그게 너무 느려서 이런

질문을 드립니다.

사실 이런 기능은 거의 매번 필요를 느끼는데 저도 많이 찾아봤지만 찾을 수 없었고

의외로 다른 곳에서도 찾지 못하겠더군요. 검색하기 좋은 키워드가 없어서 검색하지

못해서인지도 모르겠습니다. 그러니 제가 혹 답이 있는데 못 찾은 것이더라도

그냥 넘어가지 마시고 알려주시면 대단히 감사하겠습니다.

부탁드립니다.

2  COMMENTS
  • Profile
    타락천사 2000.08.03 19:43
    안녕하세여.. 타락임다..^^



    TQuery 결과셋의 레코드 개수를 제한 할수 있습니다....



    ..님 질문은 결과셋이 넘 커서, 시간이 길어진다는 거져.. 책에는 네트웍의 부담도



    가중된다구 써 있네여... 고로 결과셋을 적당하게 조절하란 건데.......음....



    아래의 Query함수로 적당한 크기의 결과셋을 가진 Query를 부르고,,



    보는 동안 전체 결과셋을 부르는 쿼리를 실행시켜서...



    사용자가 보기엔 빨라진거 처럼 느끼게 하면 어떨까여?



    ** 결과셋의 크기를 제한할수 있는 TQuery 상속객체..



    unit MyQuery;



    interface



    uses

    Dialogs, DB, DBTables, BDE;



    type

    TMyQuery = class(TQuery)

    private

    FMaxRowCount : Longint;

    protected

    procedure PrepareCursor; override;

    publshed

    property MaxRowCount: Longint read FMaxRowCount write FMaxRowCount;

    end;



    implementation



    procedure TMyQuery.PrepareCursor;

    begin

    inherited PrepareCursor;

    if FMaxRowCount > 0 then

    begin

    Check(DbiValidateProp(hDBIObj(Handle), curMAXROWS, True));

    Check(DbiSetProp(hDBIObject(Handle), curMAXROWS, FMaxRowCount));

    end;

    end;



    end.



    즐푸하세여...^^



    경고 : 오타가 있을수도 있습니다.. --



    타락천사.. ^________________^



  • Profile
    타락천사 2000.08.03 22:12
    타락천사 wrote:

    > 안녕하세여.. 타락임다..^^

    >

    > TQuery 결과셋의 레코드 개수를 제한 할수 있습니다....

    >

    > ..님 질문은 결과셋이 넘 커서, 시간이 길어진다는 거져.. 책에는 네트웍의 부담도

    >

    > 가중된다구 써 있네여... 고로 결과셋을 적당하게 조절하란 건데.......음....

    >

    > 아래의 Query함수로 적당한 크기의 결과셋을 가진 Query를 부르고,,

    >

    > 보는 동안 전체 결과셋을 부르는 쿼리를 실행시켜서...

    >

    > 사용자가 보기엔 빨라진거 처럼 느끼게 하면 어떨까여?

    >

    > ** 결과셋의 크기를 제한할수 있는 TQuery 상속객체..

    >

    > unit MyQuery;

    >

    > interface

    >

    > uses

    > Dialogs, DB, DBTables, BDE;

    >

    > type

    > TMyQuery = class(TQuery)

    > private

    > FMaxRowCount : Longint;

    > protected

    > procedure PrepareCursor; override;

    > publshed

    > property MaxRowCount: Longint read FMaxRowCount write FMaxRowCount;

    > end;

    >

    > implementation

    >

    > procedure TMyQuery.PrepareCursor;

    > begin

    > inherited PrepareCursor;

    > if FMaxRowCount > 0 then

    > begin

    > Check(DbiValidateProp(hDBIObj(Handle), curMAXROWS, True));

    > Check(DbiSetProp(hDBIObject(Handle), curMAXROWS, FMaxRowCount));

    > end;

    > end;

    >

    > end.

    >

    > 즐푸하세여...^^

    >

    > 경고 : 오타가 있을수도 있습니다.. --

    >

    > 타락천사.. ^________________^

    >