Delphi의 ClientDataSet 사용법 소결

8286 단어 Delphi
TClientDataSet 컨트롤러는 TDataSet에서 계승되고 데이터 저장 파일 형식확장자은 입니다.cds, 파일형 데이터 저장 및 조작을 기반으로 하는 컨트롤러입니다.이 컨트롤러는 데이터를 조작 처리하는 인터페이스와 기능을 봉인하고 그 자체는 상기 몇 가지 데이터베이스 드라이버에 의존하지 않으며 기본적으로 단기 데이터베이스 응용 프로그램의 수요를 만족시킬 수 있다.
1. TClientDataSet의 기본 속성과 방법 소개
1. FieldDefs: 필드 정의 목록 속성
개발자는 속성 편집기에서 속성 편집 버튼을 클릭하거나 컨트롤을 마우스 오른쪽 버튼으로 클릭하여 팝업 메뉴의 "Fields Editor"메뉴를 선택하여 필드 편집을 수행할 수 있습니다.이 속성을 설정하면 사실상 표의 구조를 정의하는 것과 같다.기존 데이터 테이블의 구조와 데이터를 불러오려면 팝업 메뉴의 "Assign Local Data"메뉴를 오른쪽 단추로 선택하고 팝업 대화상자에서 현재 창에 데이터베이스에 연결된 데이터 세트 컨트롤 이름을 선택하면 됩니다(현재 창에 사용할 데이터 세트를 배치하고 활성화해야 합니다).
사용 참고 사항:
사용자 정의 필드시계에 대해 이 속성을 편집한 후에도 이 컨트롤을 열 수 없습니다.이러한 컨트롤을 마우스 오른쪽 버튼으로 클릭하고 팝업 메뉴에서 "Create DataSet"메뉴를 선택하여 위에서 편집한 필드 목록을 기준으로 데이터 세트를 작성한 후 활성화하여 사용 가능하게 해야 합니다.그렇지 않으면 "ClientDataSet1: Missing data provider or data packet"과 유사하게 나타납니다.오류 (실행 기간, 실행 기간에 이 컨트롤을 호출할 수 있는CreateDataSet 방법을 포함하여 필드와 테이블을 동적으로 정의합니다.)
2. FileName 속성
설명: 데이터 저장 파일의 이름입니다.이 컨트롤은 파일형 데이터 조작 컨트롤이기 때문에, 동작하는 데이터 파일 이름 (기본 확장 이름. cds) 을 지정하여 이 컨트롤을 열고 활성화시켜 데이터 편집을 해야 합니다.
예1: 이 속성을 이용하여 지정한 것을 엽니다.cds 파일
var
  Path: string;
begin
 Path := ExtractFilePath(Application.ExeName); //         
 CDataSet1.FileName := Path + 'test.cds';
 CDataSet1.Open;
end;

3. CreateDataSet 방법
설명: 이 방법은 FieldDefs의 필드 이름 표를 구조로 데이터 집합을 만들고 동적 정의 표를 만드는 데 자주 사용된다.
예2: 이름과 나이 두 필드가 있는 데이터 집합을 동적으로 만듭니다.
   
//      
CDataSet.FieldDefs.Clear;
with CDataSet.FieldDefs.AddFieldDef do
begin
 Name := 'Name';
 Size := 10;
 DataType := ftString;
end;
with CDataSet.FieldDefs.AddFieldDef do
begin
 Name := 'Age';
 DataType := ftInteger;
end;

//       
 CDataSet.CreateDataSet;
//         
 CDataSet.Open;

4. Open 방법
설명: 데이터 세트 컨트롤을 열고 활성화하여 데이터 편집을 합니다.a. FileName 속성을 지정하면 Open 메서드로 컨트롤을 열고 활성화할 수 있습니다. 예1 참조.b. FileName 속성을 지정하지 않은 경우 예2 방법을 사용하여 데이터 세트를 동적으로 생성하고 열어 데이터를 조작할 수 있습니다.
5. LoadFromFile 및 SaveToFile
설명: 파일에서 테이블 구조와 데이터를 불러오고 파일에 저장합니다.이 방법은 Word의 열기새로운 문장 부품과 다른 이름으로 저장하는 기능과 유사하다.
예3: 데이터 집합의 데이터를 지정한 파일에 저장
   
CDataSet.SaveToFile('C:\Windows\ZHU\Test.cds');

6, First(끝까지), Prior(앞으로), Next(뒤로), Last(끝까지), Edit(편집), CanCel(편집 취소), Post(저장), Insert(레코드 삽입), Append(레코드 추가), Delete(삭제), Refresh(데이터 리셋) 등 데이터 집합의 일반적인 방법.
설명: FileName 속성을 지정하면 Post 메서드는 SaveToFile 메서드와 같은 지정된 파일에 데이터를 저장할 수 있습니다.저장 파일 이름을 지정하지 않으면 Post 메서드는 RAM에만 데이터를 저장합니다.기타 방법은 일반 데이터 집합 컨트롤러의 사용 방법과 약간이다.
7.Filter,Filtered:필터 속성
설명: 지정한 조건의 기록을 선별하는 데 사용되며, 일반 데이터 집합 컨트롤러와 약간으로 사용됩니다.
예4: 이미 활성화된 데이터에서 성별이 남성인 기록을 집중적으로 선별합니다
  
CDataSet.Close;
CDataSet.Filter := '  =''' + ' ' + '''';
CDataSet.Filtered := True;
CDataSet.Open;

 
2. TClientDataSet 컨트롤을 사용하는 응용 프로그램 릴리즈에 대한 참고 사항:
앞에서 말한 바와 같이 TClient DataSet 컨트롤러를 사용하는 프로그램은 발표할 때 어떠한 데이터베이스 드라이버도 필요하지 않아 설치 파일의 크기를 크게 절약할 수 있다.그러나 프로그램을 발표할 때 Windows 시스템 디렉터리에 midas를 넣는 것을 잊지 마세요.dll (257KB) 은 프로그램과 함께 발표해야 합니다. (실행은 반드시 해야 합니다.) 그렇지 않으면 프로그램이 계속 실행되지 않습니다. 법정
Delphi에서 TClient DataSet 컨트롤러를 사용함으로써 응용 프로그램이 데이터베이스 드라이버에서 철저히 벗어날 수 있을 뿐만 아니라 일반적인 데이터 집합 컨트롤러가 간단하고 사용하기 쉬운 특성도 실현하여'마른'데이터베이스 응용 프로그램을 작성하는 데 기술적 방법과 수단을 제공하였다.
 
3. TClient DataSet은 3층 구조에서 TClient Dataset의 지위는 가늠할 수 없다. 본고는 다음과 같은 몇 가지 측면에서 그녀의 사용을 논술하고자 한다.
1. 동적 인덱스
   
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
   if (not column.Field is Tblobfield) then//Tblobfield    ,   
  ClientDataSet1.IndexFieldNames:=column.Field.FieldName;
end;

2. 다층 구조에서 주종표의 실현
마스터 테이블 ClientDataSet1 설정packetrecord는 -1이고 모든 기록;
테이블 ClientDataSet1 설정packetrecord는 0입니다. 현재 기록입니다.
3. Taggregates 사용
(1) 필드 편집에서add new field 형식을aggregates로 설정한 후expression 설정을 active:=true로 dbedit의field를 전자로 사용하면 됩니다(2)Aggergates 속성add 디자인 표현을 사용하여 호출할 수 있습니다
   
ShowMessage(FloatTostr(ClientDataSet1.Aggregates.Count));
ShowMessage(ClientDataSet1.Aggregates.Items[0].Value);

4. 단일 계층 데이터베이스에서 BDE를 사용하지 않음
ClientDataSet을 사용하여 테이블을 대체하고, ClientDataSet의loadfilename을 사용하여 테이블의tablename의db나 dbf 대신 cds를 불러옵니다
참조:
원래의 프로그램 개조 방법:
ClientDataSet 추가, assign locate 데이터 마우스 오른쪽 버튼 클릭
다음savetofile,loadfromfile,table 삭제
연결된 테이블의 데이터소스를 ClientDataSet으로 설정
유일하게 주의해야 할 것은:midas를dll을 시스템이나 현재 디렉터리로 복사
5. 3층 구조의서류 가방의 실현 방법
동시에 filename(*.cds)2.remote server
6. 데이터에 값을 부여할 수 있다(다른 데이터 집합에서 값을 얻는다)
    
ClientDataSet2.Data:=ClientDataSet1.Data;
ClientDataSet2.Open;

혹은
   
ClientDataSet2.CloneCursor(ClientDataSet1,true);
ClientDataSet2.Open;

7. 추가 데이터 취득
클라이언트 프로그램이 응용 서버에 데이터를 요청합니다.TClientDataSet의FetchOnDemand 속성이 True로 설정되면, 클라이언트 프로그램은 필요에 따라 BLOB 필드의 값이나 플러그인 테이블의 내용을 자동으로 검색합니다.그렇지 않으면, 클라이언트 프로그램은 GetNextPacket을 현저하게 호출해야만 이러한 추가 패키지를 얻을 수 있습니다.ClientDataSet의 packetrecords는 한 번에 가져오는 레코드 개수를 설정합니다.
8. ClientDataSet과 서버측query 연결 방법
(1) sql 내용이 비어 있음
    
ClientDataSet1.Close;
ClientDataSet1.CommandText:=edit1.Text;// sql  
ClientDataSet1.Open;

응용 서버에 Filter를 설정하지 않았습니다. 예를 들어country like 'A%',filtered=true는 sql 기능을 실현할 수 있습니다.
(2) 매개변수 있음
   
예를 들어 서버query의 sql는
select * from animals
where name like :dd
예: 클라이언트 ClientDataSet
var
     pm:Tparam;
begin
     ClientDataSet1.Close;
     ClientDataSet1.ProviderName:='DataSetProvider1';
     pm:=Tparam.Create(nil);
     pm.Name:='dd';
     pm.DataType:=ftString;
     ClientDataSet1.Params.Clear;
     ClientDataSet1.Params.AddParam(pm);
     ClientDataSet1.Params.ParamByName('dd').AsString:=edit1.Text ;
     ClientDataSet1.Open;
     pm.Free;
end;

9. 데이터의 업데이트 관리
(1)savepoint는 지금까지의 데이터 상태를 저장하여 이 상태로 회복할 수 있습니다
   
var
     pp:integer;
begin
     pp:=ClientDataSet1.SavePoint;
     ClientDataSet1.Edit;
     ClientDataSet1.FieldByName('  ').asstring:='  ';
     ClientDataSet1.Post;
     table1.Refresh;
end;

복구 시점: ClientDataSet1.SavePoint:=pp;
    (2)Cancel,RevertRecord
현재 기록에 대한 수정을 취소합니다. 포스터가 없는 경우에만 적용됩니다. 만약post가 있으면 Revert Record를 호출합니다.
    (3)CancelUpdate
데이터베이스에 대한 모든 수정 취소
    (4)UndoLastChange(boolean),changecount
마지막 수정을 취소하면 연속적으로 취소할 수 있습니다.매개 변수는true: 커서가 복구된 곳으로 가기;false: 커서가 현재 위치에서 움직이지 않습니다.changecount는 수정 기록의 횟수를 되돌려줍니다. 한 기록은 여러 번 수정하고 한 번만 되돌려줍니다. 그러나 UndoLastChange는 한 번만 취소합니다.
10、쓰기 가능한recno
Ttable과 Tquery의recno는 읽기만 하고 TClient DataSet의recno는 읽을 수 있고 Client DataSet1은 쓸 수 있습니다.recno:=5;네. 다섯 번째 기록을 현재 기록으로 설정합니다.
11. 데이터 저장
테이블은post를 사용하여 데이터를 업데이트할 수 있고ClientDataSet1의post는 메모리 데이터만 업데이트합니다. 서버 데이터를 업데이트하려면 ApplyUpdates(MaxErrors:Integer)를 업데이트해야 합니다. 그는 오류가 발생하는 횟수를 허용하는 파라미터가 있습니다. -1은 수차례 오류가 없음을 표시하고simpleobjectbroker를 사용할 때 항상 0으로 설정하여 자동 오류와 부하 균형을 실현합니다.

좋은 웹페이지 즐겨찾기