Q&A

  • locate재질문....
전에 locate 문제로 질문을 올려서 아래와 같이 답변을 받았습니다...
그런데 잘 안되더군여...

---- 아    래 ----
1.질문사항
특정한 데이터 화일이 있습니다...
그런데, 검색프로그램에서 해결못하는 문제가 있습니다...
해당 조건에 맞는 사항만 걸러내라 하면 query의 where문으로 충분한데 문제는 그게 아니고 정렬해서 해당 위치를 찾아가야 합니다...
즉 예를 들면요...
거래처가 등록된 화일이 있습니다...
이 안에는 코드, 상호, 대표자,... 기타 등등의 필드들이 구성되었구요...
이 화일에 특정레코드를 검색하고 싶습니다... 다음과 같이요...
4자리 코드중 비슷한 코드1자리 이상을 입력하면 해당 화일을 코드순으로 정렬하여 입력한 코드로 시작하는 위치로 포인터를 이동하고 싶어요...
또 상호자리에 간단한 글자를 입력하면 마찬가지로 상호순으로 정렬하여 입력한 글자가 시작하는 위치로 가고 싶구요...
그런데 locate의 두개 option으로는 해결이 안되더군요...
가령 1001부터 1999까지 코드가 순차적으로 있는데 중간에 1500이 없다고 한다면 검색시 1500을 입력하면 1501로 포인터가 이동하여야 하는데 맨처음으로 이동합니다...
이러다 보니 상호는 아예 엉망이구요...
상호도 아래와 같이 정렬되어 있다면요...
가나상사
나리물산
다연유통
사랑방쇼핑
수정상회
:
:
예를 들어 '다가'라는 글자를 입력하면 포인터는 다연으로 있어야 합니다...
어떻게 할수 있는 방법이 없는지요....
고수 여러분들에 답변을 부탁드립니다,,,,
조금 급하거던여....^^

2.답변사항
쿼리로 해결할수 있지요..

sqltxt := 'select * from 거래처 where 거래처명 >= ''' + 검색어 + '''';
qq.sql.clear;
qq.sql.add(sqltxt):
qq.open;

bm := qq.getbookmark;

sqltxt := 'select * from 거래처';
qq.sql.clear;
qq.sql.add(sqltxt);
qq.open;
qq.gotoBookmark(bm);
qq.freebookmark(bm);

이렇게 하심이~
----------------------------
bm은 pointer변수같아서 선언을 pointer로 했다가 도움말 사항을 보니깐 선언을 tbookmark로 해야한다고 하더군여...
그래서 그렇게 했는데도 안되고... 항시 맨처음으로 가있네요...
뭐가 문제죠...
그리고 getbookmark와 gotobookmark, freebookmark의 정확한 개념이 뭔가요....
제가 가진 책에는 위 명령에 관한 설명이 없더군요...

고수여러분의 답변을 부탁드립니다...

2  COMMENTS
  • Profile
    버섯 2002.01.19 18:58
    죄송해서 어쩌죠... 제가 해보니까 안되네요...헉..

    다른방법을 써봅시다..

    var sqltxt : string;
        bm : Tbookmark;
    begin
        QUERY1.Filter := 'NAME >= ''' +eDIT1.TEXT + '''';
        QUERY1.Filtered := TRUE;

        bm := query1.GetBookmark;

        QUERY1.Filter := '';
        QUERY1.Filtered := FALSE;

        query1.GotoBookmark(bm);
        query1.FreeBookmark(bm);


    end;

    레코드의 개수가 틀려지니까 못찻더군요..
    그래서 위처럼했습니다.

    TDATASET  에 보면 FILTER  라는 프로퍼티가 있습니다./
    거기에 조건문을 적고.. 북마크를 한다음.. 조건을 풀고..
    북마크를 찾아가면 됩니다...

    죄성~~~~
  • Profile
    씨나락 2002.01.19 08:11
    edit2로 입력받아서 KeyPress에서 엔터를 치면 검색하게 하는 방법입니다.
    도움이 되었는지 모르겠네요.

    즐프하세요...

    procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
    begin
      if  Key = #13 then begin  // Enter Key를 치면
        Query1.Locate('custnm',Trim(Edit2.Text),[loPartialKey]);
      end;
    end;