西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴(lài)的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)Delphi → Delphi通過(guò)ADO讀寫(xiě)數(shù)據(jù)庫(kù)

Delphi通過(guò)ADO讀寫(xiě)數(shù)據(jù)庫(kù)

前往專(zhuān)題相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:百度搜索時(shí)間:2012/8/28 17:50:06字體大。A-A+

作者:西西點(diǎn)擊:4207次評(píng)論:0次標(biāo)簽: Delphi 數(shù)據(jù)庫(kù)

Borland Delphi8.0光盤(pán)版
  • 類(lèi)型:編程工具大小:83.1M語(yǔ)言:中文 評(píng)分:4.0
  • 標(biāo)簽:
立即下載
4 頁(yè) 三、 ADODataset組件

三、 ADODataset組件


    ADODataset是ADO組件中最通用的一個(gè)組件,它能獲取并代表任何其他ADO組件從數(shù)據(jù)庫(kù)返回的數(shù)據(jù)集合。數(shù)據(jù)集是通過(guò)SQL命令返回的一個(gè)表或者多個(gè)表數(shù)據(jù)。
    要使ADODataset數(shù)據(jù)集組件能夠正常地發(fā)揮作用,則應(yīng)首先設(shè)置其Connection或Connection String屬性來(lái)建立起到數(shù)據(jù)庫(kù)的連接。如果要使用一個(gè)RDSDataSpace對(duì)象將該數(shù)據(jù)集連接到基于ADO的應(yīng)用程序服務(wù)器,則需要RDSConnection屬性設(shè)置為一個(gè)TRDSConnection對(duì)象。
由于ADODataset組件必須返回一個(gè)結(jié)果集,所以其CommandText屬性中如果使用語(yǔ)句,則只能使用SELECT語(yǔ)句,而不能使用一引起數(shù)據(jù)操作語(yǔ)言(DML),比如DELETE、INSERT和UPDATE語(yǔ)句。
同時(shí)由于該數(shù)據(jù)集可以使用SQL 語(yǔ)句。所以可以從一個(gè)或多個(gè)基表中查詢(xún)數(shù)據(jù)。

? ADODataset的常用屬性
1) Active
    指示當(dāng)前的記錄集是否處于打開(kāi)狀態(tài),調(diào)用open方法,打開(kāi)數(shù)據(jù)庫(kù),Active值為T(mén)rue;調(diào)用close方法,數(shù)據(jù)庫(kù)關(guān)閉,則Active為False;
    只有Active的值為False時(shí),應(yīng)用程序才能對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀寫(xiě)操作。需要將Active變?yōu)門(mén)rue的情況是:
v 數(shù)據(jù)庫(kù)的狀態(tài)設(shè)為dsBrowse(瀏覽模式、查看、掃描數(shù)據(jù))。
v 如果程序中加載了BeforeOpen事件,在該事件被觸發(fā)時(shí)。
v 如果程序加載了AfterOpen事件,在該事件被觸發(fā)時(shí)。
v 通過(guò)記錄集打開(kāi)一個(gè)數(shù)據(jù)指針時(shí)。
    在更改數(shù)據(jù)集屬性,且這些屬性影響到數(shù)據(jù)庫(kù)的狀態(tài)或數(shù)據(jù)顯示組件的狀態(tài)時(shí),要提前將數(shù)據(jù)集的Active屬性設(shè)置為False;
2) AutoCalcFields
    設(shè)為T(mén)rue,則允許應(yīng)用程序觸發(fā)OnCalcFileds事件。計(jì)算字段依賴(lài)于當(dāng)前記錄的一個(gè)或多個(gè)字段。通過(guò)已有的字段數(shù)據(jù)統(tǒng)計(jì)計(jì)算。該值為T(mén)rue,在記錄數(shù)據(jù)被修改或者編輯時(shí),就觸發(fā)OnCalcFields事件。應(yīng)用程序自動(dòng)更新計(jì)算字段的值,以保證數(shù)據(jù)的一致性 。能觸發(fā)OnCalcFileds事件的條件是:
v 數(shù)據(jù)集組件的狀態(tài)變?yōu)閐sEdit。
v 記錄已經(jīng)被修改。
v 應(yīng)用程序從數(shù)據(jù)庫(kù)中重新獲得一條記錄。
    可以看出,上述的情況并不都需要更新計(jì)算字段。如果用戶(hù)需要頻繁地修改數(shù)據(jù),則OnCalcFields事件就會(huì)不斷地調(diào)用。頻繁地調(diào)用在一定程度影響了應(yīng)用程序的性能。在這種情況下,可以將屬性AutoCalcFields設(shè)為False。
3) Cachesize
    指定數(shù)據(jù)集的緩沖區(qū)大小。數(shù)據(jù)集首先把數(shù)據(jù)從數(shù)據(jù)庫(kù)中取出,然后保存在內(nèi)存的一塊域中。這塊內(nèi)存區(qū)域就是所謂的緩沖區(qū)。如果設(shè)置CacheSize為20,則表示數(shù)據(jù)集將一次從數(shù)據(jù)集將一次從數(shù)據(jù)庫(kù)中提取20條記錄并將這20條記錄保存到緩沖區(qū)中。缺省值為1,也是最小值。


4) CommandText


     指定數(shù)據(jù)集合中包含的命令,可以是SQL語(yǔ)句,一個(gè)表名或者一個(gè)存儲(chǔ)過(guò)程名。常用的調(diào)用形式為:
with ADODataset1 do
begin
    commandType:=cmdText;
command Text:=’Select * From customerTable’;
open;
end;

5) Filer


    數(shù)據(jù)集的過(guò)濾器,通過(guò)使用過(guò)濾器可以把那些不需要的數(shù)據(jù)過(guò)濾掉。設(shè)置Filter屬性的典型方法為:
with ADODataset1 do begin
Filterd:=False;
Filter:=’State=’+Quotedstr(‘CA’)+’OR’+”State=’+Quotedstr(‘CA’);
Filterd:=True;
End;
    如果用戶(hù)修改了帶有過(guò)濾數(shù)據(jù)集的數(shù)據(jù),修改的結(jié)果如果不滿(mǎn)足過(guò)濾器的條件,則修改的數(shù)據(jù)就自動(dòng)從當(dāng)前的數(shù)據(jù)庫(kù)中消失。

6) MaxRecord


   最大 返回?cái)?shù)據(jù)集記錄數(shù),默認(rèn)值為0 返回所有數(shù)據(jù)。

7)  RecordCount


顯示與數(shù)據(jù)集相連的記錄的總數(shù)

 

詳細(xì)的屬性大家可以看最后一頁(yè)


 ADODataset的常用方法


1) GetIndexNames(List:Tstring)


    查詢(xún)表中的全部索引,返回值將保存在參數(shù)List中,調(diào)用方法為:
ADODataset1.GetIndexNames(ListBox1.Items);


2) DeleteRecords(AffectRecords:TaffectRecords=arAll)


    刪除記錄集的記錄,參數(shù)AffectRecords用于指定要?jiǎng)h除的具體記錄。它的取值可為如下:
AffectRecords的參數(shù)及說(shuō)明
參數(shù)值 說(shuō)明
arCurrent 僅刪除當(dāng)前記錄
arFiltered 刪除滿(mǎn)足過(guò)濾器過(guò)濾條件的數(shù)據(jù)
arAll 刪除記錄的所有記錄
arAllChapters 刪除ADO連接數(shù)據(jù)部分的全部記錄
    缺省值為arAll,刪除當(dāng)前記錄集中的所有記錄。

3) Locate(const KeyFields:String;constKeyValues:Variant;Options:TLocateOptions)


    定位一條記錄并把這條記錄作為當(dāng)前記錄。其中KeyFields是索引的字段名;KeyValues是要查找的值;Options是定位數(shù)據(jù)選項(xiàng),他的值可以是:
v IoCaseInsensitive:定位數(shù)據(jù)不區(qū)分大小寫(xiě)。
v IoPartialkey:部分匹配定位查找數(shù)據(jù)。


4) Requery(options:TexecuteOption=[])


    刷新數(shù)據(jù)集中的數(shù)據(jù),它是通過(guò)重新執(zhí)行原來(lái)的命令或SQL語(yǔ)句來(lái)重新生成記錄集。


5) SaveToFile(constFileName:String=’’;Format:TpersisFormat=PftAdTg)

    把當(dāng)前數(shù)據(jù)集中的數(shù)據(jù)按照指定的格式保存到指定的文件中。FileName為指定的文件名:Format為保存的文件格式,它可以選取下列值:
v PfAdTG:按照ADTG(Advanced Data Tablegram)格式生成文件。
v PfXML:按照XML格式保存文件。


6) seek(constKeyValues:Variant;seekOption:Tseekoption=SoFirstEQ)
    搜索記錄并移動(dòng)數(shù)據(jù)集的指針。搜索動(dòng)作是以當(dāng)前數(shù)據(jù)集中的索引為搜索依據(jù)。其中KeyValues為被搜索的值。
    Success:=ADODataSet1.seek(‘Jones’,SoFirstEQ);
    如果搜索到復(fù)合索引的值,則返回True,反之為False,也可以同時(shí)搜索多個(gè)值:
    ADODataSet1.seek(VarArrayof([90030,90020]),soFirstEQ);
    這就需要利用函數(shù)VarArrayof()構(gòu)造一個(gè)參數(shù)傳遞給KeyValues。
    Seek的第二個(gè)參數(shù)seekoption限定了搜索行為的動(dòng)作。

可以取的值如下:


Seekoption的取值及說(shuō)明
參數(shù)值 說(shuō)明
SoFirstEQ Rexord 數(shù)據(jù)庫(kù)指針定位在第一條匹配的記錄處,如果沒(méi)有任何匹配記錄則指向數(shù)據(jù)庫(kù)的未記錄
SoLastEQ Record 數(shù)據(jù)庫(kù)指針定位在最后一條匹配的記錄處,如果沒(méi)有任何匹配記錄則指向數(shù)據(jù)庫(kù)的未記錄
SoAfterEQ Record 如果搜索到匹配記錄,在指向匹配記錄的下一條,如果沒(méi)有找到則指向最近似匹配記錄上
SoAfter 指向匹配記錄的下一條
SoBeforeEQ 如果搜索到匹配記錄,在指向匹配記錄的前一條,如果沒(méi)有找到則指向最近似匹配記錄上
SoBefore 指向匹配記錄的前一條

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    第 1 樓 山西太原金玉網(wǎng)吧(山西大學(xué)商務(wù)學(xué)院) 網(wǎng)友 客人 發(fā)表于: 2013/11/19 20:15:07
    寫(xiě)的太好了

    支持( 0 ) 蓋樓(回復(fù))

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱(chēng):
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)