안녕하세요..
DBGrid1에 출력되는 값들 중에....
검색한 결과가 첫 칼럼의 100번째 줄에 나타나는 값이라면..
그쪽에 포커스를 주면서 찾았다고 메시지를 출력하고 싶습니다..
찾고자 하는 값으로, 첫컬럼의 모든 라인의 값들을 비교시켜서
찾으면 그 해당 라인을 보여 주면 될것 같습니다만....
첫컬럼의 각 라인의 값들을 어떻게 읽는지 모르겠군요...
그리고, 특정 라인에 포커스를 주는것도 모르겠구요...
되긴 되는지 궁금~~~
왕초보 수정이가 답변 기다리겠습니다... ^^:
(아!~~ 잠도 안자믄서.. 프로그램하는 수정이에게 힘을 주소서... ^^")
if Table1.Locate('field1',edit1.text,[loPartialKey])=true then begin
// showmessage('찾았습니다!!!');
exit;
end;
if Table1.Locate('field2',edit1.text,[loPartialKey])=true then begin
// showmessage('찾았습니다!!!');
exit;
end;
if Table1.Locate('field3',edit1.text,[loPartialKey])=true then begin
// showmessage('찾았습니다!!!');
exit;
end;
다만 걱정은 이렇게 하실 경우 데이터가 100건만 되어도 시간이 상당히 걸릴겁니다.
locate함수는 인덱스를 사용하지 않기 때문이죠.
findkey나 findnearest를 사용하시면 좀 빠르겠지만 데이터가 많은 경우 오십보 백보입니다.
주제넘게 조언을 드리자면... 만일 학생이라면 학번과 성명으로 거의 검색하겠지요? 뭐 다른 경우도 한 두개정도의 검색어를 제공하면 사용자는 별로 불편해하지 않습니다.
학번과 성명 (아닐수도 있지만) 두개의 에디트를 사용하고 검색 후 검색으로 찾은 값을 다시 에디트에 뿌려주면 거의 모든 사용자는 불편을 느끼지 않습니다. (아닌사람도 있지만 이게 최선이라는 것을 인식시켜야 합니다.)
이렇게 해보시길 권해드리고 싶습니다.
//학번검색 프로시져
if key=vk_return then begin
Table1.IndexFieldNames:='hakbun';
Table1.FindNearest([edit1.text]);
edit1.text:=table1.fieldbyname('hakbun').asstring;
edit2.text:=Table1.fieldbyname('name').asstring;
end;
//성명검색 프로시져
if key=vk_return then begin
Table1.IndexFieldNames:='name';
Table1.FindNearest([edit2.text]);
edit1.text:=table1.fieldbyname('hakbun').asstring;
edit2.text:=Table1.fieldbyname('name').asstring;
end;
인덱스는 생성시켜줘야 하시는건 아시겠죠?
모르시는게 있으시면 재질문 주세요.
이수정 wrote:
> 안녕하세요..
>
> DBGrid1에 출력되는 값들 중에....
> 검색한 결과가 첫 칼럼의 100번째 줄에 나타나는 값이라면..
> 그쪽에 포커스를 주면서 찾았다고 메시지를 출력하고 싶습니다..
>
> 찾고자 하는 값으로, 첫컬럼의 모든 라인의 값들을 비교시켜서
> 찾으면 그 해당 라인을 보여 주면 될것 같습니다만....
>
> 첫컬럼의 각 라인의 값들을 어떻게 읽는지 모르겠군요...
>
> 그리고, 특정 라인에 포커스를 주는것도 모르겠구요...
>
>
> 되긴 되는지 궁금~~~
>
> 왕초보 수정이가 답변 기다리겠습니다... ^^:
>
> (아!~~ 잠도 안자믄서.. 프로그램하는 수정이에게 힘을 주소서... ^^")
>