델파이 데이타베이스
데이타 베이스 관련 콤포넌트
Data Access Component
데이타엑세스 콤포넌트는 물리적인 데이타베이스를 프로그램시
사용자가 쓸수 있도록 접근할수 있게 해주는 콤포넌트들로
TDataBase, TDataSource,TTable, TQuery, TBatchMove, TSession 등이 있다.
TTable
데이타베이스 테이블에 접근하기 위한 콤포넌트이다.
테이블에 접근하기 위해
TableName 프로퍼티에 테이블 이름,DatabaseName 프로퍼티에
Alias이름을 지정해 주어야 한다.
그리고 실제 사용하기 위해서는 Active를 True로 해주거나
TTable.Open 메서드를 사용하여 테이블을 활성화 시켜야 한다.
그리고, Filter 프로퍼티를 사용하여 테이블을 필터링 할수 있으며
Master and Detail관계를 사용하여 테이블을 서로 연결할 수도 있다.
Filtering : 예를 들어 학교 이름이 '부산대학교' 인사람만 보고 싶을때
Filter : SchoolName = '부산대학교'
Filtered : True
이렇게 두개의 프로퍼티를 설정하면 됩니다.
그리고 WildCard 문자도 사용할수 있습니다.
Filter : SchoolName = '부산*'
이런식으로 그리고 and, or 연산도 가능합니다.
SchoolName = '부산대학교' or '부경대학교'
Master and Detail 테이블 연결 : MasterSource를 적어주는 쪽이
Detail 테이블이 됩니다.
마스터 테이블이 연결된 DataSource를 MasterSource 프로퍼티에 쓰고
MasterFiled를 더블클릭하면 Field Link Designer 가 나옵니다.
거기 보면 Detail과 Master Field가 나오는데
여기서 Detail은 Master에 종속되기 때문에..
즉 마스터 테이블의 레코드가 바뀔 때마다 Detail 테이블에서 원하는
레코드를 찾아야 되기 때문에 Detail Field는 Index 가 되어 있어야 합니다.
(Primary 또는 Secondary ) Detail과 Master 필드를 설정한 다음
Add 버튼을 누르면 아래에 조인된 표시가 나옵니다.
그럼 확인 버튼을 누르고 마스터와 디테일 테이블을 오픈하면
마스터 테이블의 레코드가 변할때 마다 디테일 테이블의 레코드도 따라 움직입니다.
TTable 2 개와 TDataSource 2개
TDBGrid(Data Control 콤포넌트) 2개를 폼에 올려 놓고
Table1.Name : MasterTbl
Table2.Name : DetailTbl
DataSource1 : MasterSource
DataSource2 : DetailSource MasterTbl과 DetailTbl모두
DatabaseName을 DBDEMOS로한다.
MasterTbl.TableName : ORDERS.DB
DetailTbl.TableName : CUSTOMER.DB 설정
MasterSource.DataSet : MasterTbl
DetailSource.DataSet : DetailTbl 준비가 끝났으면
이제 마스터-디테일 테이블 연결을 할 차례다.
먼저 DetailTbl.MasterSource : MasterSource 로 설정하고
DetailTbl의 오브젝트 인스펙터에서 MasterField를
더블클릭하면 Field Link Desinger 창이 나오는데
여기서 Detail 부분에서 CustNo, Master 부분에서 똑같이
CustNo를 선택하고 Add 버튼을 누르고 확인을 한다.
그리고 DBGrid1.DataSource에 MasterSource를
DBGrid2.DataSource에 DetailSource를 입력하면 연결은 끝이다.
그리고 MasterTbl과 DetailTbl의 Active를 True로 하면
두 테이블이 연결되어 움직이는 것이 보일것이다.
ORDERS.DB는 고객의 주문에 관한 내용이고
CUSTOMER.DB는 고객에 관한 정보이다.
결국 실제 모습은 주문한 내용이 변하면
거기에 딸린 고객의 정보가 바로 나온다.
즉 주문한 내용의 고객에 관한 내용이
단 한줄의 소스 코딩도없이 바로 볼수 있는 것이다.
TTable에는 또 중요한 속성이 하나 더 있다.
그것은 다로 TField속성이다.
이것은 테이블의 필드에 접근할수 있도록 해주는 클래스입니다.
폼위에 TTable을 하나 얹어 두고 더블 클릭을 하면
아무 내용도 없는 조그만 Field Editor라는 창이 생긴다.
이것을 사용해서 사용자정의 계산 필드를 만든다 던지
룩업 필드를 만들수 있습니다.
Table에서 데이타 읽기
이제 까지 테이블을 실제 DB와 연결하고 테이블 끼리
연결하는걸 간단하게 나마 보았다.
그럼 실제 테이블의 데이타를 프로그램 내부에서 쓰고
싶을때는 어떻게 하는가?
이때는 TTable.Fields라는 프로퍼티를 이용한다.
헬프를 보면 알겠지만 Fields라는 프로퍼티는
property Fields[Index: Integer]: TField;
이렇게 구성되어 있습니다 그리고, 이건 Table의 디폴트 프로퍼티 입니다.
그럼 실제로는 어떻게 사용하느냐 하면 폼에 TTable을 하나 놓고
Name 을 CustTable로 바꿉니다.
그러고 나서 DatabaseName에 DBDEMOS를 넣고,
TabbleName 을 Customer.DB로넣어 줍니다.
그리고 Active 를 True로 해줍니다.
이렇게 해줘야 아래 문장을 쓸수 가 있습니다.
Active 를 True로 하는 거하고
Table을 Open시키는 거하고는 같은 일입니다.
이렇게 함으로써 물리적인 Customer.db화일이
프로그램상의 테이블 콤포넌트와 연결이 됩니다.
그럼 Customer.db의 7번째 필드의 값을 알고 싶다면
Edit1.Text := CustTable[6].AsString;
^번호가 0부터 시작하므로 7번째는 6이다.
Edit1.Text := CustTable.Fields[6].AsString ;
이런식으로 사용합니다. 둘다 똑같은 일을 합니다.
위처럼 Fields 를 쓰지 않고 Table에다바로
CustTable[6] 이런식으로 해도 되는 이유가 바로
Fields프로퍼티가 디폴트 프로퍼티이기 때문입니다.
그럼 이 놈은 어느 레코드의 값을 돌려 주느냐 하면
현재 레코드의 값을 돌려 줍니다.
Open한 바로 다음이라면 보통 첫번째 레코드를 돌려 주죠.
현재 레코드란 테이블의 모든 레코드를 한번에 접근할수는 없습니다.
한순간에 단 한개의 레코드에만 접근할수 있죠..
그게 바로 현재 레코드입니다.
눈에 보이긴 여러개 보이더라고 그중 우리가 수정하거나,
지우거나 할수 있는건 단 하나의 레코드,
바로 현재 레코드 뿐인 것입니다.
그래서 현재 레코드라는 말을 쓰는 겁니다.
아마 앞으로 자주 이말이 등장할것입니다.
즉 수많은 레코드들이 있는데 그걸 프로그램에서 할려면
마치 배열 처럼 써야 되는데 그렇게 하지 않고 쓸수 있는
이유가 바로 한순간엔 하나의 레코드 밖에 처리 할수 없기 때문입니다.
그럼 뒤에 있는 AsString이란 뭐냐?
대충 눈치 챘겠지만 이건 필드의 값을 String type 으로 넘겨 줍니다.
이렇게 넘겨 줄려면 당연히 필드의 DataType도
문자형(paradox의 경우 Alpha타입)이어야 합니다.
정수형필드에 AsString을 쓰면 당연히 에러가 납니다.
그럼 필드의 DataType하고 델파이의 데이타 타입은 다른가?
예!! 다릅니다. 왜냐면 C의 데이타 형이 다르고 파스칼의
데이타 형이 다르듯이 테이블도 테이블을 만들때 정의하는 Driver에 따라
서로 다른 형의 타입을 가집니다.
'Delphi Tip > 데이터베이스' 카테고리의 다른 글
데이터셋 북마크 DataSet Bookmark (0) | 2024.06.07 |
---|---|
델파이 데이타베이스 기초 5 (0) | 2023.10.07 |
델파이 데이타베이스 기초 3 (0) | 2023.10.05 |
델파이 데이타베이스 기초 2 (0) | 2023.10.04 |
델파이 데이타베이스 기초 1 (0) | 2023.09.27 |
댓글