고수님들 아시다시피, DBGrid에서 특정 필드의 특정값을 검색하여 그 레코드로 커서를 이동시키는 것으로 Locate가 있습니다.
소스를 보면,
procedure TSimpleSqlExp.LctBttnClick(Sender: TObject);
var
LocateSuccess : Boolean;
SearchOptions : TLocateOptions;
begin
SearchOptions := [lopartialKey, loCaseinsensitive];
LocateSuccess := Query1.Locate(edtFld.Text, edtSchwd.Text, SearchOptions);
end;
저는 Edit를 이용해서 edtFld.Text에서 검색할 필드를, edtSchwd.Text에서 검색할 단어를 입력받아서 DBGrid에서 읽어온 테이블에서 원하는 레코드로 커서를 위치시키도록 만들었습니다.
여기서 질문은, edtText에서 입력된 단어, 예를 들어 검색할 단어가 '석'이라 한다면, 테이블의 처음부터 검색하여 제일 처음 나오는 '석'을 검색하여 그 위치로 커서를 위치시키는데, 그다음 나오는 '석'을 검색하기 위해서 어떻게 해야하는 겁니다.
Locate는 항상 처음부터 검색하여 찾는 것 같은데, 현재 커서위치에서 다음 단어가 있는 것으로 커서를 다시 위치시킬 수는 없을까요?
> 고수님들 아시다시피, DBGrid에서 특정 필드의 특정값을 검색하여 그 레코드로 커서를 이동시키는 것으로 Locate가 있습니다.
>
> 소스를 보면,
>
>
>
> procedure TSimpleSqlExp.LctBttnClick(Sender: TObject);
> var
> LocateSuccess : Boolean;
> SearchOptions : TLocateOptions;
>
> begin
> SearchOptions := [lopartialKey, loCaseinsensitive];
> LocateSuccess := Query1.Locate(edtFld.Text, edtSchwd.Text, SearchOptions);
> end;
>
>
>
>
> 저는 Edit를 이용해서 edtFld.Text에서 검색할 필드를, edtSchwd.Text에서 검색할 단어를 입력받아서 DBGrid에서 읽어온 테이블에서 원하는 레코드로 커서를 위치시키도록 만들었습니다.
>
>
>
> 여기서 질문은, edtText에서 입력된 단어, 예를 들어 검색할 단어가 '석'이라 한다면, 테이블의 처음부터 검색하여 제일 처음 나오는 '석'을 검색하여 그 위치로 커서를 위치시키는데, 그다음 나오는 '석'을 검색하기 위해서 어떻게 해야하는 겁니다.
>
> Locate는 항상 처음부터 검색하여 찾는 것 같은데, 현재 커서위치에서 다음 단어가 있는 것으로 커서를 다시 위치시킬 수는 없을까요?
>
헬프에서 찾아보니 LocateNext란 함수가 있네요.
이걸 이용해서 해보시죠 ^^
function LocateNext(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean
즐코하세요~