본문 바로가기
Delphi Tip/데이터베이스

델파이 데이타베이스 기초 5

by MonoSoft 2023. 10. 7.
728x90
반응형

델파이 데이타베이스

 

728x90

 

 

Post 한다음 Disk로 바로 저장하기 위해 DbiSaveChange함수를 쓰는 예입니다.

 

CustTable의 AfterPost이벤트 헨들러에서

procedure TDataModule2.CustTableAfterPost(DataSet: TDataSet);

begin

DbiSaveChanges((DataSet as TTable).Handle); //또는

DbiSaveChanges(CustTable.Handle);

end;

 

Table에서 레코드 검색

 

테이블에서 레코드를 검색하는 방법은 많이 있습니다.

 

GotoKey, FindKey, GotoNearest, FindNearest 등이 있으며

이것들은 모두 인덱스가 있는 파일만 검색합니다.

 

우선 위의 명령을 써서 검새을 하기 위해서는

Table콤포넌트의 IndexFileName 프로퍼티를 설정해야 합니다.

설정안하면 프라이머리 키를 가지고 찾습니다. (파라독스의 경우).

물론 이 인덱스 키는 테이블을 만들때 지정을 해주는 것입니다.

 

1. FindKey, FindNearest : 둘다 쓰는 법은 같습니다.

단지. FindKey는 조건값과 정확히 일치해야 하고,

FindNearest 는 조건값과 일치하는게 없으면 가장 비슷한 레코드를 찾습니다.

 

//Edit1.Text 와 일치하는 레코들 찾을때

//뭐가 일치하냐면 IndexFileName에

설정한 인덱스 필드와 Edit1.Text 가

일치하는 레코드를 찾아서 그 현재 레코드 포인터를

그 레코드로 이동시킴

 

begin

Table1.FindNearest([Edit1.Text]);

end

begin

if not Table1.FindKey(Edit1.Text]) then

ShowMessage('만족하는 레코드가 없습니다')

else

...

end;

 

FindKey는 일치하는 레코드가 없으면 False를 리턴합니다.

그리고 레코드 포인터는 그대로 있습니다.

 

GotoKey, GotoNearest

SetKey 또는 EditKey를 사용하여 Table의 State를 dsSetKey로 바꾸어 놓고

FieldByName으로 키 필드의 값을 입력하여 찾는 방식으로

SetKey는 검색어 버퍼를 비우고 새로 입력받을 준비를 하고

EditKey는 검색어 버퍼를 비우지 않고 이전 값을 바꿀 준비를 한다.

 

즉 키필드가 2개이상인 경우에 필드 하나느 고정이고

나머지 하나의 값만 변할때 이걸 찾을때는 SetKey로 첨에

두 개의 검색어를 모두 지정하고 그담에 한개만 변했을 때는

EditKey를 가지고 변한 필드의 값만 바꾸어서 찾으면 된다.

 

begin

Table1.SetKey;

Table1.FieldByName('LastName').AsString := Edit1.Text;

Table1.GotoNearest;

end;

 

Goto명령은 이런식으로 Setkey, FieldByName으로 검색할

조건을 지정한 다음에야 쓸수 있다.

 

만약 Table1.SetKey 없이

 

Table1.FieldByName('LastName').AsString := Edit1.Text;

 

이렇게 쓰면 이것은 테이블의 데이타를 갱신할수도 있으니 주의해야 한다.

(테이블의 상태에 따라 검색어가 될수도 있고 데이타가 될수도 있다)

 

begin

Table1.SetKey;

Table1.FieldByName('LastName').AsString := Edit1.Text;

if not Table1.GotoKey then

ShowMessage('검색어가 존재 하지 않습니다.')

else

...

end;

 

GotoKey도 일치하는 레코드가 없으면 False를 리턴합니다.

그리고 레코드 포인터는 그대로 있습니다.

만약 인덱스가 두개 이상의 필드로 이루어져 있으면

아래 처럼 쓸수도 있습니다.

 

with Table1 do

begin

EditKey;

FieldByName('State').AsString := 'CA';

FieldByName('City').AsString := 'Santa Barbara';

GotoKey;

end;

728x90
반응형

댓글