小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

ClientDataSet的隱含功能-計(jì)算機(jī)二級考試-考試大

 遠(yuǎn)在南非 2010-07-09
 ClientDataSet組件支持很多特性,其中一些與三級結(jié)構(gòu)有關(guān),而且還可以用在其他環(huán)境中。該組件說明了一個數(shù)據(jù)庫完全映象在內(nèi)存中,這使得可以進(jìn)行動態(tài)的操作,如建立一個索引,其他數(shù)據(jù)集合通常不支持該特性。例如,為了對查詢分類,我們通常是重新執(zhí)行它。為了索引一個局部表格,需要定義索引。只有ADO數(shù)據(jù)集合有一些與ClientDataSet一樣的動態(tài)索引功能。
  索引并不是ClientDataSet提供的全部功能。當(dāng)我們擁有了索引之后,可以基于它定義組,可能是多級別的分組。對于確定一個記錄在組中的位置(頭、尾或中間位置),甚至有專門的支持。在組或整個數(shù)據(jù)表格中,我們可以定義總計(jì);也就是說,可以動態(tài)計(jì)算整個表格或當(dāng)前組中一列的總和或平均值。數(shù)據(jù)不需要發(fā)送給物理服務(wù)器,因?yàn)檫@些總計(jì)操作發(fā)生在內(nèi)存中。我們甚至可以定義新的總計(jì)字段,可以直接與數(shù)據(jù)敏感控件相連。
  注意,所有這些特性不但可以用與MIDAS應(yīng)用程序,還可以用與客戶機(jī)/服務(wù)器,甚至是局部瘦應(yīng)用程序。事實(shí)上,ClientDataSet組件可以從遠(yuǎn)程MIDAS連接、局部數(shù)據(jù)集合(建立起數(shù)據(jù)的快照)、或局部文件(就象在公文包模式中一樣,但使用的只是在客戶機(jī)數(shù)據(jù)集合中定義的整個表格)中獲得起數(shù)據(jù)。
  這是另一個需要研究的領(lǐng)域,所以將向讀者演示兩個范例來突出關(guān)鍵特性。這些范例沒有基于MIDAS,而是基于局部表格。
  1、定義抽象的數(shù)據(jù)的數(shù)據(jù)類型
  VCL數(shù)據(jù)庫支持的一個有趣的特性是,當(dāng)我們基于局部文件使用ClientDataSet時,可以定義抽象的數(shù)據(jù)類型。只需在窗體上放置一個ClientDataSet組件,為FieldDefs屬性激活編輯器,添加兩個字段,并為他們的DataType屬性選擇ftADT值?,F(xiàn)在,移到ChildDefs屬性,并定義子字段,下面是AdtDemo范例的字段定義:
  FieldDefs = <
  item
  Name = \'ID\'
  DataType = ftInteger
  end
  item
  name = \'Name\'
  ChildDefs = <
  item
  name = \'LastName\'
  DataType = ftString
  size = 20
  end
  item
  name = \'FirstName\'
  datatype = ftString
  size = 20
  end>
  datatype = ftADT
  size = 2
  end>
  在此,只需為ClientDataSet的FileName屬性輸入一個名稱,用鼠標(biāo)右鍵單擊組件,并選擇Create Table命令即可;我們準(zhǔn)備編譯并運(yùn)行應(yīng)用程序(在向它連接數(shù)據(jù)敏感組件之后)。數(shù)據(jù)會自動從提供的文件中讀取,關(guān)閉程序時會將變化保存在文件中。
  如果使用DBGrid查看結(jié)果數(shù)據(jù)集合,它允許我們展開或壓縮ADT字段的子字段。我們可以通過定義字段的OnGetText事件提供它的壓縮值(在Delphi4 中有一個缺省值,但Delphi5中沒有):
  procedure TForm1.ClientDataSet1NameGetText(Sender:TField;
  var Text:String;DisplayText:Boolean);
  begin
  Text:=ClientDataSet1NameFirstName.AsString+\' \'+
  ClientDataSet1NameLastName.AsString;
  end;
  2、動態(tài)索引
  一旦ClientDataSet上有了數(shù)據(jù),數(shù)據(jù)就已全部處于內(nèi)存中了。當(dāng)我們將組件基于局部文件中時(如在AdtDemo范例中),在程序啟動時整個文件就被裝載到了內(nèi)存總。這與從Paradox數(shù)據(jù)表格中裝載數(shù)據(jù)(BDE只裝載正訪問的字段)不同。
  將整個表格裝在內(nèi)存中的優(yōu)點(diǎn)是,我們可以快速地對它進(jìn)行分類。使用ClientDataSet組件,我們可以通過賦給IndexFieldNames屬性相應(yīng)的字段名來實(shí)現(xiàn)分類。在AdtDemo(以及很多程序)中,該索引變動會在單擊DBGrid控件的標(biāo)題(觸發(fā)OnTitleClick事件)時執(zhí)行:
  procedure TForm1.DBGrid1TitleClick(Column:TColumn);
  begin
  if Column.Field.FullName = \'Name\' then
  ClientDataSet1.IndexFieldNames := \'Name.LastName\'
  else
  ClientDataSet1.IndexFieldNames := Column.Field.FullName;
  end;
  由于ADT定義,程序使用了字段的FullName屬性(而不是FieldName屬性)。事實(shí)上,對于子字段來說,索引應(yīng)該基于Name.LastName,而不是LastName。而且ADT字段不能自己被索引,所以如果選擇它,程序會使用LastName子字段作為索引。這些索引不是持久性的;它們沒有保存在文件中,而只是在內(nèi)存中應(yīng)用于數(shù)據(jù)。
  技巧:ClientDataSet可以擁有基于計(jì)算字段的索引,特別是內(nèi)部計(jì)算字段,這種字段類型只能用于該數(shù)據(jù)集合。來源:考試大-計(jì)算機(jī)二級考試

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多