본문으로 바로가기

[DELPHI] 데이터베이스 개발관련 요점 1

category 개발 2018. 9. 6. 11:38

● TDataSet 콤포넌트.

   데이터 세트란 결과적으로 델파이에서 지원하는 관계형 데이터베이스의 테이블(열과 행으로 구분되는)을 지칭하는 것이다

   데이터 세트의 계층도를 살펴보면 다음과 같다

   

   

   TDataSet 클래스는 모든 테이블의 상위에 존재




● TDataSet 컴포넌트의 주요 기능

    1. Active, Open, Close

       Active := True 와 Open 문장은 동일한 동작을 수행

       TQuery 의 형태인 경우 ExecSQL 이라는 메소드가 있는데, 이 메소드는 insert, delete, update에 이용된다. 이 경우 수행되는 내용 을 Active 프로퍼티를 통하여 검사.

    

    2. TDataSet 의 조작

       First, Next, Prior, MoveBy(수치)는 레코드의 행을 이동하는 메소드이다. 그리고 BOF 와 EOF 는 레코드의 처음과 끝을 참조하기 위한 Boolean 형태의 프로퍼티이다.

       해당 레코드의 필드를 조작하기 위해서는 다음과 같은 프로퍼티를 이용한다.


       테이블.FIelds[n].AsString 

       테이블.FIeldByName( ‘필드명’ ).AsString;  // 가장 무난한 방법.

       테이블.FIeldValues[‘필드명’] 

       테이블필드명.Value (이 경우는 필드 에디터에서 필요한 필드를 추가해야 사용할 수 있다)


       Insert, Edit, Post, Delete, Cancel 메소드 들을 이용할때는 데이터 세트의 커서위치에서 이루어지는데 커서를 이동하는 것은 위의(First, Next..) 을 이용하며 된다.




    3. 자료를 읽어오는 방법

       자료를 읽어올때는 TTable, TQuery, TStoredProc 컴포넌트를 이용한 방법이 있다.

       TQuery 와 TStoredProc 컴포넌트는 거의 동일한 기능을 수행한다. 

       TQuery = TTable + Query.

       TTable 컴포넌트는 테이블 형태가 고정되어있거나, 마스터/디테일 기능을 이용할 때 주로 이용한다.




    4. 데이터 검색

       TTable 에서 인덱스가 존재할때 검색하는 가장 빠른 조회방법.

       

 Table1.SetRangerStart; 

 Table1.FieldByName(‘필드명’).AsString := ‘검색값’; 

 Table1.SetRengeEnd; Table1.FieldByName(‘필드명’).AsStrign := ‘검색값’; 

 Table1.ApplyRange;



       TTable와 TQeury에서 모두 사용가능한 방법.


       Table1.Filtered := True; 

       Table1.Filter := ‘(필드명 >= 값 ) and ( 필드명 <= 값 )’;


       이렇게 필터기능을 사용한 다음 FindFirst, FIndLast, FindNext, FIndPrior 을 사용하면 원 하는 레코드를 찾을 수 있다.


       인덱스가 지원되는 TTable 이나 TClientDataSet 와 같은 컴포넌트에서는 다음과 같 이 EditKey, FindKey, FindNearest, GotoKey, GotoNearest, SetKey 메소드를 

 사용하여 레코드를 검색할 수도 있다. 


 Table1.SetKey; 

 Table1.FieldByname(‘필드명’).AsString := ‘검색값’; 

 if not Table1.GotoKey then ShowMessage(‘찾지못함’); 


 Table1.GotoKey 메소드를 사용하면 해당 값을 가진 레코드로 이동하며, 값이 존재하지 않 는다면 False 가 반환된다



 TQuery 컴포넌트에서 조회하는 방법


 with Query1 do 

 beign 

Active := False; 

Sql.Clear; 

Sql.Add( ‘select * from 테이블명 where 필드명 조건 값’ ); 

Active := True // 또는 Open 또는 ExecSQL; 

 end;


 INSERT, DELETE, UPDATE 문장의 경우 ExecSQL 을 사용.

 SELECT문장의 경우 리턴을 받아야 하므로 TTABLE와 동일하게 Active, Open/Close 를 사용.




    5. Locate 메소드(레코드 커서 위치)

 커서를 찾을때 CustTable 의 Company 컬럼의 값이 "Professional Divers, Ltd."인 첫번째 행에 커서를 위치시킨다.

  var 

 LocateSuccess: Boolean; 

 SearchOptions: TLocateOptions; 


 begin 

 SearchOptions := [loPartialKey]; 

 LocateSuccess := CustTable.Locate('Company', 'Professional Divers, Ltd.', SearchOptions); 

 end;

 



    6. Lookup 메소드(찾아서 해당 레코드의 결과값 리턴)

  검색 조건에 맞는 첫번째 행을 찾아서 데이터 세트와 관련된 lookup 필 드와 calculated 필드의 재계산까지 실행하고, 하나 이상의 필드의 값을 가변형으로 돌려 준다. Lookup 메소드는 Locate 메소드와 달리 커서를 움직이지 않고, 값만을 돌려준다.


예> CustTable 의 Company 컬럼의 값이 "Professional Divers, Ltd."인 회사 이름, 담당자, 전화번호를 돌려 준다.

var 

 LookupResults: Variant; 

begin with CustTable do 

 LookupResults := Lookup('Company', 'Professional Divers, Ltd.', 'Company; Contact; Phone'); 

end;


여러컬럼에 여러 값을 이용해 검색할때... 


 var 

 LookupResults: Variant; 

 begin with CustTable do 

LookupResults := Lookup('Company; City', VarArrayOf(['Sight Diver', 'Christiansted']), 'Company; Addr1; Addr2; State; Zip'); 

 end;




● 저장 프로시저의 사용 방법      


with StoredProc1 do 

begin 

 StoredProcName := ‘insert_data’; 

 ParamByName( ‘pcode’ ).AsString := ‘값’; 

 ParamByName( ‘pname’ ).AsString := ‘값’; 

 ParamByName( ‘page’ ).AsInteger := 값; 

 ExecProc; 

end;









출처 : 과거에 '신현묵 정지훈 공저' - 델파이 4모든것의 전문 에서...