TClientDataSet使用要點

  TClientDataSet控件繼承自TDataSet,其數據存儲文件格式擴展名為 .cds,是基于文件
型數據存儲和操作的控件。該控件封裝了對數據進行操作處理的接口和功能,而本身并不依
賴上述幾種數據庫驅動程序,基本上能滿足單機"瘦"數據庫應用程序的需要。

一、TClientDataSet的基本屬性和方法介紹

  1).FieldDefs: 字段定義列表屬性

  開發者可通過單擊屬性編輯器中該屬性編輯按鈕,或在該控件上單擊右鍵選擇彈出菜單
中的"Fields Editor"菜單進行字段編輯。設置完此屬性后,實際上就相當于定義了表的結構
;如果想裝入已有的數據表的結構和數據,可通過單擊右鍵選擇彈出菜單中的"Assign Loca
l 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\desktop\test.cds');

  6).First(到首),Prior(向前),Next(向后),Last(到尾),Edit(編輯),CanCel(取
消編輯),Post(保存),Insert(插入記錄),Append(添加記錄),Delete(刪除),Refresh
(數據刷新)等數據集常用方法

  說明:當指定了FileName屬性時,其Post方法可將數據存入指定的文件中,類似其SaveT
oFile方法;如果未指定存儲文件名,則Post方法只將數據存儲在RAM中。其它方法,同一般
數據集控件使用方法,略。

  7).Filter, Filtered: 過濾篩選屬性

  說明:用于篩選指定條件的記錄,用法同一般數據集控件,略。

  例4:在已經激活打開的數據集中篩選性別為男性的記錄

CDataSet.Close;
CDataSet.Filter := '性別=''' + '男' + '''';
CDataSet.Filtered := True;
CDataSet.Open;

二、使用TClientDataSet控件的應用程序發布的注意事項:

  如前所述,使用TClientDataSet控件的程序發布時不需要任何數據庫驅動程序,大大節
省了安裝文件的大小。但是,在發布程序時別忘了將Windows系統目錄下midas.dll(257KB)與
應用程序一起發布(運行必須),否則,程序仍然無法正常運行。

三、結束語

  通過使用Delphi中TClientDataSet控件,既實現了應用程序可徹底脫離數據庫驅動程序
,也實現了常規數據集控件簡單易用的特性,為編寫"瘦"數據庫應用程序提供了一種技術方
法和手段。

  上述程序在Pwindows98,Delphi5下測試通過。

  TClientDataSet在三層結構中,TClientDataSet的地位是不可估量的,她的使用正確與
否,是十分關鍵的,本文從以下幾個方面闡述她的使用,希望對你有所幫助.

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代替table,使用ClientDataSet的loadfilename裝入cds
代替table的tablename的db或者dbf
原來的程序改造方法:
加一個ClientDataSet,使用右鍵assign locate data
后savetofile,再loadfromfile,后刪除table
將原連table的datasource設為ClientDataSet
唯一注意的是:要將midas.dll拷到system或者當前目錄
5.三層結構的公文包的實現方法
同時設定1:filename(*.cds)2.remote server
6.可以對data賦值(從另一個數據集取值)
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的,如果post,調用
RevertRecord
(3)cancelupdate
取消對數據庫所有的修改
(4)UndoLastChange(boolean),changecount
取消上一次的修改,可以實現連續撤消
參數為true:光標到恢復處
false:光標在當前位置不動
changecount返回修改記錄的次數,一個記錄修改多次,返回只一次
但UndoLastChange只撤消一次

10.可寫的recno
對于Ttable和Tquery的recno是只讀的,而TClientDataSet的recno可讀可寫
ClientDataSet1.recno:=5;是設第五個記錄為當前記錄
11.數據保存
對于table使用post可更新數據
而ClientDataSet1的post只更新內存數據,要更新服務器數據要使用
ApplyUpdates(MaxErrors: Integer),他有一個參數,是允許發出錯誤的
次數,-1表示無數次,使用simpleobjectbroker時常設為0,實現自動容錯和負載平衡

?

轉載于:https://www.cnblogs.com/spiritofcloud/p/3980370.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376645.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376645.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376645.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

滑動窗口在重構數據集的作用

step1:使用滑動窗口重構數據集 給定時間序列數據集的數字序列,我們可以將數據重構為看起來像監督學習問題。 我們可以通過使用以前的時間步作為輸入變量并使用下一個時間步作為輸出變量來做到這一點。 通過觀察重構后的數據集與原本的時間序列&…

sliverlight - Unhandled Error in Silverlight Application錯誤

使用firebug控制臺輸出錯誤: Unhandled Error in Silverlight Application 查詢“GetFlow_Process”的 Load 操作失敗。遠程服務器返回了錯誤: NotFound。 位于 System.ServiceModel.DomainServices.Client.OperationBase.Complete(Exception error) 位于 System.S…

前向驗證對于模型的更新作用

首先,讓我們看一個小的單變量時間序列數據,我們將用作上下文來理解這三種回測方法:太陽黑子數據集。該數據集描述了剛剛超過 230 年(1749-1983 年)觀察到的太陽黑子數量的每月計數。 數據集顯示了季節之間差異很大的…

2014年9月21日_隨筆,jdic,ETL,groovy,Nutz好多東西想學

(1)老媽十一要回老家,才突然發現買票好難啊。有親朋很重要 (2)這周我做了什么。jdic,ETL,groovy, Nutz好多東西想學。 Nutz開發成員專訪、Nutz優酷視頻(演講)、Nutz 入門教程、 (3)想改變&#…

PHP-面向對象(八)

1、多態的介紹與優勢 多態性是繼抽象和繼承后,面向對象語言的第三個特征。從字面上理解,多態的意思是“多種形態”,簡單來說,多態是具有表現多種形態的能力的特征,在OO中是指“語言具有根據對象的類型以不同方式處理。…

雙指數平滑中參數對于預測模型的影響

先看看α 在β一致的情況下,α越小,模型越滯后。 再看看β 在α一致的情況下,β越大,模型對于趨勢的預測更敏銳。

SQL 性能不佳的幾個原因

SQL 性能不佳的幾個原因 ?不準確的統計數據?差勁的索引?差勁的查詢設計 ?差勁的執行計劃,通常是由不正確的參數引起的?過度阻塞和死鎖 ?非基于集合的操作?不良數據庫設計 ?過度碎片 ?不能重復使用執行計劃 ?查詢頻繁重編譯 ?不當使用游標 ?數據庫日志的…

分頁查詢

分頁查詢算是比較常用的一個查詢了在DAO層主要是查兩個數據第一個總條數第二個要查詢起始記錄數到查詢的條數當第一次點擊查詢時候(非下一頁時Page類里面預設的就是 index就是0 pageSize是預設值當點擊下一頁的時候 index 和 pageSize帶的就是頁面上面給的值了分頁的頁面一般的…

TypeError: Object of type ‘datetime‘ is not JSON serializable

python中這個錯誤的原因是json.dumps無法對字典中的datetime時間格式數據進行轉化,dumps的原功能是將dict轉化為str格式,不支持轉化時間. 所以請這樣使用: json.dumps(response_data, defaultstr)

oracle問題

ORA-01031: insufficient privileges 用戶沒有權限,給它賦予角色轉載于:https://www.cnblogs.com/50614090/p/3986880.html

me23n去價格

SELECT knumv kposn AS ebelp kschl kbetr kpein kwert INTO CORRESPONDING FIELDS OF TABLE gt_konv FROM konv FOR ALL ENTRIES IN gt_ekpo WHERE knumv gt_ekpo-knumv AND kinak EQ AND kschl IN (PB00,PBXX,P101).轉載于:…

Fix “Windows cannot access the specified device path or file” Error

http://helpdeskgeek.com/help-desk/windows-cannot-access-the-specified-device-path-or-file/ Method 1 – Windows Server 2003 Terminal Services Firstly, if you’re running into this issue on a Windows Server box running Terminal Services, your problem can be …

使用Bootstrap-table創建表單,并且與flask后臺進行數據交互

文章目錄引用css和js使用htmljavascriptflaskmysql參考引用css和js Bootstrap-table為這些文件提供了 CDN 的支持&#xff0c;所以不需要下載.js .css文件就可以直接用了&#xff0c;十分方便 <!-- Latest compiled and minified CSS --> <link rel"stylesheet…

php編碼規則(一)

---恢復內容開始--- <轉載自己整理> GNU C 庫&#xff08;GNU C Library&#xff0c;又稱為glibc&#xff09;是一種按照LGPL許可協議發布的&#xff0c;公開源代碼的&#xff0c;免費的&#xff0c;方便從網絡下載的C的編譯程序。 GNU C運行期庫&#xff0c;是一種C函數…

重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下載數據, 上傳數據, 上傳文件...

重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下載數據, 上傳數據, 上傳文件 原文:重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下載數據, 上傳數據, 上傳文件[源碼下載] 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下載數據, 上傳數據, 上傳…

【經驗貼】smartCarers在比賽后如何獲取更好的發展

博主聯系方式: QQ:1540984562 QQ交流群:892023501 群里會有往屆的smarters和電賽選手,群里也會不時分享一些有用的資料,有問題可以在群里多問問。 由于最近專欄開了付費,群友讓更新一些經驗貼,于是有了這篇文章。 一般來說,比賽完了之后是大二結束的暑假,此時有這么幾條…

isset()和empty()到底區別是什么。

一招鮮吃遍天&#xff0c;自從看了燕十八關于PHP變量內部機制的那課&#xff0c;解釋了一些很久的疑惑&#xff0c;知其然還知其所以然&#xff0c;果然是學習的最佳途徑&#xff0c;比背下來要重要N倍。 我們知道一個變量有變量表的位置&#xff0c;然后他指向自己的內存地址&…

html清除圖片緩存

img.src ?t(new Date()); 如&#xff1a; <img id "5" src"../../../pics/prod_146/__INLINE__user_nums_cmp_146.png?t"(new Date()) width"1024">

分享下自己編譯 XBMC 的過程(zhuan)

刷YunOS贏魅族MX3首先要感謝下網上其他網友的經驗&#xff0c;沒有這些經驗有的問題還是不太好解決&#xff5e; 先介紹下編譯環境&#xff0c;操作系統是 CentOS 6.5 64位 (最小桌面版本安裝&#xff0c;除了最基本的組件外&#xff0c;類似 java 什么的都沒有安裝)&#xff0…

使用Xcode和Instruments調試解決iOS內存泄露

雖然iOS 5.0版本之后加入了ARC機制&#xff0c;但由于相互引用關系比較復雜時&#xff0c;內存泄露還是可能存在。所以了解原理很重要。 這里講述在沒有ARC的情況下&#xff0c;如何使用Instruments來查找程序中的內存泄露&#xff0c;以及NSZombieEnabled設置的使用。 本文假設…