● 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모든것의 전문 에서...
'개발' 카테고리의 다른 글
[DELPHI] DEVEXPRESS BOUND 모드 연결. (0) | 2018.09.11 |
---|---|
[DELPHI] 데이터베이스 개발관련 요점 2 (0) | 2018.09.06 |
[C#] DEVEXPRESS GANTT (1) | 2018.08.17 |
분리기통 2인용 고전게임기 자작 (0) | 2017.10.25 |
아두이노 - 리코 GR 무선 리모컨 만들기 -_- (3) | 2017.10.25 |