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

首頁編程開發(fā)Delphi → Delphi通過ADO讀寫數(shù)據(jù)庫

Delphi通過ADO讀寫數(shù)據(jù)庫

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

作者:西西點擊:4207次評論:0次標簽: Delphi 數(shù)據(jù)庫

Borland Delphi8.0光盤版
  • 類型:編程工具大。83.1M語言:中文 評分:4.0
  • 標簽:
立即下載

        ADO是一種程序?qū)ο,用于表示用?a href="http://elephantinaurance.com/k/sql/" target="_blank">數(shù)據(jù)庫中的數(shù)據(jù)結(jié)構(gòu)和所包含的數(shù)據(jù)。

ADO (ActiveX Data Objects,ActiveX數(shù)據(jù)對象)是Microsoft提出的應用程序接口(API)用以實現(xiàn)訪問關(guān)系或非關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)。例如,如果您希望編寫應用程序從DB2或Oracle數(shù)據(jù)庫中向網(wǎng)頁提供數(shù)據(jù),可以將ADO程序包括在作為活動服務器頁(ASP)的HTML文件中。當用戶從網(wǎng)站請求網(wǎng)頁時,返回的網(wǎng)頁也包括了數(shù)據(jù)中的相應數(shù)據(jù),這些是由于使用了ADO代碼的結(jié)果。

        在Delphi 5.0 以上的版本都可以很好的支持ADO技術(shù)。

 Delphi 中 ADO 主要有

1、ADOConnection 用于鏈接數(shù)據(jù)庫

2、ADOCommand      ADODataSet 用來查詢或執(zhí)行SQL語名;

3、DataSource 數(shù)據(jù)中間存儲組件;

4、DBGrid 數(shù)據(jù)顯示出來;

其實主要是用ADO連接,而ADO也是最常用的連接技術(shù)之一。

     以下幾個控件在連接數(shù)據(jù)庫時是用得比較多的,并且通常的的連接架構(gòu)是

————————————————————
             數(shù)據(jù)庫
             ↑
         ADOConnection
         ↑       ↑
ADOCommand     ADODataSet
                   ↑
               DataSource
                   ↑
                 DBGrid
————————————————————

或者

————————————————————
         數(shù)   據(jù)   庫
         ↑       ↑
   ADOCommand     ADODataSet
                     ↑
                 DataSource
                     ↑
                   DBGrid
————————————————————

也就是說,ADOCommand和ADODataSet既可以通過ADOConnection連接數(shù)據(jù)庫,也可以不用,分別直接連接數(shù)據(jù)庫,因為這三個控件都有一個共同的ConnectionString屬性。


一、 TADOConnection組件
該組件用于建立數(shù)據(jù)庫的連接。ADO的數(shù)據(jù)源組件和命令組件可以通過該組件運行命令及數(shù)據(jù)庫中提取數(shù)據(jù)等。
該組件用于建立數(shù)據(jù)庫的連接,該連接可被多個數(shù)據(jù)集所共享,但是并不是應用程序中必須的,因為ADO數(shù)據(jù)集及命令組件通過設(shè)置其ConnectionString屬性,可以直接連接到數(shù)據(jù)庫。但是如果多個數(shù)據(jù)集使用相同的數(shù)據(jù)庫連接時,則使用TADOConnection就有一定的優(yōu)勢,因為不必為每個數(shù)據(jù)集都單獨建立數(shù)據(jù)庫的連接,同時也減少了資源的消耗,并且可以建立跨越多個數(shù)據(jù)集的事務。一個事務(transaction)是數(shù)據(jù)庫操作的一個階段,用戶對數(shù)據(jù)庫的修改都保存在本地計算機的內(nèi)存中,只有提交一個事務后,才能將修改的內(nèi)容提交到數(shù)據(jù)庫中。如果選擇了回滾事務,則所有的修改將被取消,而不會提交到數(shù)據(jù)庫中。

? TADOConnection組件提供如下功能:
v 控件數(shù)據(jù)庫的連接
v 控制服務器的注冊
v 管理事務
v 為關(guān)聯(lián)的數(shù)據(jù)集提供數(shù)據(jù)庫連接
v 將SQL命令發(fā)送到數(shù)據(jù)庫中
v 獲得數(shù)據(jù)庫的原數(shù)據(jù)(metadata)

 TADOConnection的常用屬性


1) Attributes
    此屬性用于設(shè)置連接的數(shù)據(jù)庫的自動處理的行為,它是TxactAttributes
類型的集合,包括兩個集合元素:
I. XaCommitRetaining:提交一個事務后自動開始一個新的事務。
II. XaAbortRetaining: 回退一個事務的同時將開始一個新的事務。
2) CommandTimeout
    連接超時屬性,用于設(shè)置一個命令執(zhí)行時所能等待的最大時間值。以秒為計量單位。缺省值為30秒,即連接命令等待了30秒之后還沒有被執(zhí)行,系統(tǒng)就放棄這個命令。
3) Connected
    標識和數(shù)據(jù)庫的連接是否處于激活狀態(tài)。
用戶可以查詢Connected屬性的值來判斷數(shù)據(jù)庫的連接狀態(tài)。如果該屬性為true,則表明數(shù)據(jù)庫處于連接狀態(tài);為false,則當前數(shù)據(jù)庫連接關(guān)閉。
4) ConnectionString
    連字符串用于指定數(shù)據(jù)庫的連接信息。連字符串的標準調(diào)用方為:ADOConnection1.ConnectionString:='Provider=ProviderRet;Remote Server=ServerRet';
其中,連接串支持的常用參數(shù)如下:
數(shù)據(jù)庫連接參數(shù)及說明
         參數(shù) 說明
Provider 數(shù)據(jù)提供者名稱,例如MSDASQL.1
Password 登錄數(shù)據(jù)庫的口令
         參數(shù) 說明
Persist Security  支持安全登錄
User ID 登錄數(shù)據(jù)庫用戶
    DataSource 數(shù)據(jù)源名稱、數(shù)據(jù)源的設(shè)置需要額外的操作
設(shè)置成功之后,用戶就可以將屬性Connected設(shè)置為True,如果沒有任何提示信息,說明數(shù)據(jù)庫已經(jīng)成功連接,此時,屬性DefaultPatabase就被賦值為連接所指定的數(shù)據(jù)庫的路徑。
 5) ConnectOptions
    指定數(shù)據(jù)庫連接是按照同步方式還是異步方式。類型Tconnectoption包含兩個值:
v coConnectUnspecified:數(shù)據(jù)庫連接采用同步方式連接。
v coAsyncConnect:異步方式連接數(shù)據(jù)庫。當服務器負載很重的時候,這種連接方式很有用。引用這種連接方式,在第一次建立連接的時候,應用程序不能獲得全部的數(shù)據(jù)。
 6) CursorLocation
     指定數(shù)據(jù)庫指針是指向客戶端還是服務器端。類型TcursorLocation包含兩個值:
v cluseServer:使用服務器端的數(shù)據(jù)庫指針,適用于數(shù)據(jù)量大的數(shù)據(jù)集。
v cluseClient:使用客戶端的數(shù)據(jù)指針的時候,數(shù)據(jù)將被下載到本地計算機上,并在本地進行操作。
7) DefaultDatabase
    表明數(shù)據(jù)源成功連接后,這是由數(shù)據(jù)源自動賦值的。
8) IsoLationLevel
指定不同事務之間的相互獨立的級別,事務實際上是對數(shù)據(jù)庫的一系列操作的集合。事務具有整體性,如果事務中的某一個步驟不能正確執(zhí)行,則整個事務都不會執(zhí)行。由于數(shù)據(jù)庫服務器可以同時支持多個連接,來自不同連接的事務有可能在同一時刻對同一個數(shù)據(jù)進行操作,這就有可能造成數(shù)據(jù)不一致性。為防止這種情況出現(xiàn),ADO引入了事務獨立級來確定不同事務之間的相互關(guān)系。設(shè)定事務獨立級之后并調(diào)用BeginTrans方法后,新的事務獨立級別將生效。
TISolationLevel共包含9種常量值:如下:
TISolationLevel常量及說明
常量參數(shù) 說明
ilUnspecified 使用默認的獨立級別,沒有其它的獨立級別
ilChaos 來自更高獨立級別的事務對數(shù)據(jù)的改變不能被當前的事務覆蓋
ilReadUncommitled 當前事務可以讀取其他事務未提交的數(shù)據(jù)
ilBrowse 當前事務可以讀取其他事務未提交的數(shù)據(jù)
ilcursorStability 事務提交后數(shù)據(jù)才能被讀取
ilReadCommitled 事務提交后數(shù)據(jù)才能被讀取
ilRepeatableRead 不能讀取其它事務的數(shù)據(jù),執(zhí)行Requery操作可以獲得這些數(shù)據(jù)
ilSerializable 從其他事務中獲取事務的獨立級別
ilIsolated 從其他事務中獲取事務的獨立級別

    這些常量的定義在Microsoft Data Access SDK中有詳盡的說明,需要進一步了解可以查詢微軟的SDK文檔。
9) KeepConnection
    指定如果在沒有打開數(shù)據(jù)集的情況下是否仍然保持數(shù)據(jù)的連接。
    瀕繁地打開和關(guān)閉數(shù)據(jù)庫的操作將會影響系統(tǒng)的性能,特別在網(wǎng)絡(luò)上,會在一定程度上增加網(wǎng)絡(luò)的負載。這個屬性設(shè)置數(shù)據(jù)源始終處于連接狀態(tài),可以顯著提高程序的性能。
10) LoginPrompt
    指定在每次建立連接時是否彈出登錄對話框提示用戶登錄。如果設(shè)為False,則必須在ConnectionString中指定登錄數(shù)據(jù)庫的用戶和密碼。
11) Mode
 指定連接對數(shù)據(jù)庫的操作權(quán)限,這種連接模式的值如下:
連接模式參數(shù)及說明
參數(shù) 說明
cmUnknown 未指定數(shù)據(jù)庫操作權(quán)限或無法確定
cmRead 對數(shù)據(jù)庫只能讀操作
cmWrite 對數(shù)據(jù)庫只能寫操作
cmReadWrite 對數(shù)據(jù)庫可讀寫操作
cmShareDenyRead 禁止其他用戶對數(shù)據(jù)庫讀操作
cmShareDenyWrite 禁止其他用戶對數(shù)據(jù)庫寫操作
cmShareExclusive 禁止其他用戶對打開數(shù)據(jù)連接
cmShareDengNone 禁止其他用戶對數(shù)據(jù)庫任何操作

 ADOConnection的主要方法:
1) BeginTrans
    開始啟動一個新的事務,必須保證數(shù)據(jù)連接處于激活狀態(tài)。
2) Cancel
    關(guān)閉于數(shù)據(jù)庫的連接。
3) CommitTrans
    向數(shù)據(jù)庫提交一個事務。提交成功后,再事務中對數(shù)據(jù)庫所作的修改則寫入數(shù)據(jù)庫中,同時一個事務也結(jié)束。
4) Execute(constCommandText:Widestring;VarRecordsAffected;Executeoptions:TexcuteOptions=[eoExecuteNoRecords]);
執(zhí)行一個CommandText類型的SQL命令,其中,CommandText是指定的SQL命令;ReardsAffected指定該命令設(shè)計的記錄數(shù)目;ExecuteOptions指定命令特征如下:
ExecuteOption的值及說明
參數(shù) 說明
eoAsyncExecute 異步執(zhí)行命令
eoAsyncFetch 給定了Cache屬性的值后,在異步地去數(shù)據(jù)
eoAsyncFetchNonBlocking 非阻塞式線程執(zhí)行
eoExecuteNoRecords 沒有返回記錄
5) GetProcedureNames(List:Tstring);
    獲取數(shù)據(jù)庫服務器上的存儲過程名稱,獲取的存儲過程名稱在List參數(shù)中。
6) GetTableNames(List:Tstring;SystemTables:Boolean=False);
    獲取數(shù)據(jù)庫中的數(shù)據(jù)表,獲取的表名存放在List參數(shù)中SystemTables參數(shù)指示是否獲取數(shù)據(jù)庫系統(tǒng)表的名稱。數(shù)據(jù)庫系統(tǒng)表是指在數(shù)據(jù)庫中關(guān)于數(shù)據(jù)庫數(shù)據(jù)類型定義和用戶信息的數(shù)據(jù)表,這種系統(tǒng)表是數(shù)據(jù)庫本身自動生成的。
7) Open(const UserID:widestring;constPassword:widestring)                           
    打開一個連接,參數(shù)UserID是數(shù)據(jù)庫用戶的用戶名。Password是用戶登錄數(shù)據(jù)庫的密碼。
8) RollbackTrams
    撤回一個沒有全部執(zhí)行的事務。事務撤回之后,事務中所作的任何修改都不會寫入數(shù)據(jù)庫。

 ADOConnection的主要事件
事件 說明
AfterConnect  發(fā)生在一個連接建立之后
AfterDisconnect 發(fā)生在斷開連接之后
BeforeConnect 發(fā)生在連接建立前
BeforeDisconnect 發(fā)生在斷開連接前
OnBeginTranscomplete 發(fā)生在開始一個事務時
OnCommitTranscomplete 發(fā)生在提交事務成功時
OnConnectComplete 發(fā)生在連接完成時
OnDisconnect 發(fā)生在斷開時
OnExecuteComplete 發(fā)生在一個命令執(zhí)行后
OnInfoMessage 發(fā)生在收到數(shù)據(jù)庫的消息
OnLogin 發(fā)生在用戶登錄數(shù)據(jù)庫的時候
OnRollbackTransComplite 發(fā)生在一個事務撤回之后
OnWillConnect 發(fā)生在發(fā)出一個連接數(shù)據(jù)請求的時候
OnWillExecute 發(fā)生在數(shù)據(jù)庫收到一個SQL命令并將要執(zhí)行之前

二、ADOCommand組件


    ADOCommand向數(shù)據(jù)庫發(fā)送SQL指令并返回請求的數(shù)據(jù)集。
ADOCommand組件主要用于運行一些數(shù)據(jù)定義語言(DDL)的SQL命令或者運行一個沒有返回結(jié)果的存儲過程。對于返回結(jié)果集的SQL語句,則最好使用TADODataset、TADOQuer或TADOStoredProc組件。盡管ADOCommand組件的Exexute方法可以返回一個結(jié)果集,但卻是通過另一個ADO數(shù)據(jù)集組件來使用該記錄集。
TADOCommand組件與ADOCommand對象相似,所以ADOCommand組件中的屬性和方法在ADOCommand對象中都能找到相同的餓名字,并且具有相同的作用。如果使用ASP開發(fā)過動態(tài)網(wǎng)頁,對此一定會有深刻的認識。
 TADOCommand代表了ADOCommand(ADO命令)對象,它通過一個ADO提供者訪問數(shù)據(jù)庫。TADOCommand組件執(zhí)行的是其CommandText屬性中設(shè)置的命令,通過調(diào)用Execute方法執(zhí)行該命令。如果該命令中需要使用參數(shù),則通過Parameters屬性設(shè)置,該屬性與BDE數(shù)據(jù)集Tquery組件的Params屬性的作用及設(shè)置方法相同。

? ADOCommand的主要屬性
1) CommandText
    指定要執(zhí)行的SQL命令,可以手工編寫,也可以利用CommandText編輯器對話框來設(shè)置這個屬性。
CommandText編輯器是專門用來為ADO組件來編寫SQL命令的。Table列表框用來列出數(shù)據(jù)庫中所有的表,選中一個表,單擊”Add Table to SQL”按鈕,CommandText編輯器就會自動把表名插入SQL命令的相應位置。在選中某個表的同時,這個表中的所有字段都會自動地列在Fields列表框里。同樣,選中Fields列表框中的一個字段,單擊”Add Fields to SQL”,字段就會插入到SQL命令中。
2) CommandType
    指定要執(zhí)行的命令的種類:
CommandType的參數(shù)及說明
參數(shù) 說明
cmdUnknown 未知的命令類型
cmdText 文本類型
cmdTable 命令中指定的是一個表的名稱
cmdStoredProc 命令中指定的是一個存儲過程的名稱
cmdFile 命令中指定的是保存數(shù)據(jù)集的文件名
cmdTableDirect 命令中指定的是表的名稱,并返回所有的列
3) Connection
    指定所使用的數(shù)據(jù)源連接組件的名稱,即ADOConnection組件的名稱,通過這個屬性使得ADOCommand能與數(shù)據(jù)庫連接起來。
4) Paramcheck
    指定在SQL命令動態(tài)改變的時候,是否需要重置參數(shù)列表。
5) Parameters
執(zhí)行SQL命令時要用到的參數(shù),在參數(shù)查詢中,即在SQL命令中或在存儲過程中需要傳遞參數(shù)的時候才需要設(shè)置這個值,并且在命令類型CmmandType指定為cmdText或cmdStoredProc時,參數(shù)才有效。

? ADOCommand主要方法:
1) Cancel
    中止一個正在執(zhí)行的命令
2) Assign(source:TPersistent)
    把另一個ADOCommand組件的所有屬性復制到當前的ADOCommand組件中。調(diào)用的時候,按名存取組件對象。
3) Execute
    執(zhí)行ADOCommand組件所包含的命令,返回結(jié)果是一個數(shù)據(jù)記錄集,可以被其他ADO組件的Recordset記錄集屬性調(diào)用。

三、 ADODataset組件


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

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


4) CommandText


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

5) Filer


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

6) MaxRecord


   最大 返回數(shù)據(jù)集記錄數(shù),默認值為0 返回所有數(shù)據(jù)。

7)  RecordCount


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

 

詳細的屬性大家可以看最后一頁


 ADODataset的常用方法


1) GetIndexNames(List:Tstring)


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


2) DeleteRecords(AffectRecords:TaffectRecords=arAll)


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

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


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


4) Requery(options:TexecuteOption=[])


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


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

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


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

可以取的值如下:


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

四、ADOTable組件


    ADODataset組件、ADOTable組件、 ADOQuery組件和ADOstreProc組件都是繼承自父類TcustomADODataset ,所以在屬性、事件及方法上有許多共同的地方。
    TADOTable組件只能通過ADO訪問數(shù)據(jù)庫中單個基表的數(shù)據(jù),它即可以訪問 一個基表中的所有數(shù)據(jù)及字段,也可以訪問部分記錄,即通過在Filter屬性設(shè)置篩選條件實現(xiàn)。
由于TADOTable組件與其他組件不同的是,它專門針對數(shù)據(jù)庫中表進行操作。

? TADOTable特有的一些屬性方法:
1) MaterSource屬性和MasterFields屬性
    MaterSource屬性是用于建立主從關(guān)系的數(shù)據(jù)源,當前的ADQTable中的數(shù)據(jù)將根據(jù)MaterSource屬性所指定的數(shù)據(jù)源變化而變化。在一個數(shù)據(jù)庫匯總,某些表之間可能存在互相關(guān)聯(lián)的,一種常見的情況是兩個表之間存在共同的字段。通過這些共同的字段,可以建立主從關(guān)系的關(guān)聯(lián)?梢酝ㄟ^訪問一個表而得到另一個表的數(shù)據(jù),這種主從關(guān)系建立以后,如果用戶在主表記錄選中一條記錄,則從表中相應的記錄自動獲得。
    MasterFields屬性指定用于建立主從關(guān)系的關(guān)聯(lián)字段,指定的字段是將主表和從表賴以存在的紐帶,這個字段必須是主從表中共有的字段。
2) Readonly
    指定ADOTable中數(shù)據(jù)是否處于只讀狀態(tài)。
3) TableDirect
    指定是通過表名來訪問數(shù)據(jù)庫還是在后臺運行SQL命令訪問數(shù)據(jù)庫,部分的數(shù)據(jù)提供者不支持通過表名對數(shù)據(jù)庫的訪問,這時的ADOTable就只能通過后臺運行SQL的SELECT語句來訪問數(shù)據(jù)庫。如果設(shè)置為True,則ADOTable組件在后臺運行SQL命令訪問數(shù)據(jù)表,為False按表名訪問數(shù)據(jù)庫,缺省值為Flase。
4) TableName
    指定ADOTable要操作的表名。
    只有當設(shè)置了正確的connection或者connectionstring,Active屬性為True的時候,才能設(shè)置TableName屬性,表名的列表才會在ObjectInspector中顯示。
5) Append方法和AppendRecord(constValues:arrayofconst)
    使用Append方法在增加一條新記錄的同時,并為新記錄賦值。賦值是通過一個數(shù)組作為參數(shù)傳遞進去的。但是必須保證數(shù)組的維數(shù)和字段數(shù)一致且順序一致。
6) Post方法
    執(zhí)行Post方法,是將已經(jīng)修改完畢的記錄寫入數(shù)據(jù)庫中。通常是每執(zhí)行完一個修改記錄的操作,執(zhí)行一次Post操作,以完成對數(shù)據(jù)庫的更新。

五、ADOQuery組件


    ADOQuery組件借助于SQL語言的強大功能訪問多個數(shù)據(jù)表,可以實現(xiàn)數(shù)據(jù)瀏覽、修改和刪除等操作,并且,ADOQuery組件可以實現(xiàn)參數(shù)查詢。所謂參數(shù)在使用上可以理解為變量。在執(zhí)行SQL之前,就被賦值。運用參數(shù)化查詢,不需要修改SQL語句,給定不同的參數(shù)值,就可以獲得不同得到的查詢結(jié)果。通常情況下,使用ADOQuery是為了從數(shù)據(jù)集中查詢一部分字段或記錄,也可以使用INSERTV、DELETE、UPDATE、ALTER TABLE等SQL命令實現(xiàn)數(shù)據(jù)的更新、插入和刪除記錄的操作。如果數(shù)據(jù)集只包含一個基表,則可以使用ADOQuery,也可以使用TADOTable數(shù)據(jù)集。

? ADOQuery的主要屬性和方法
1) SQL屬性
    SQL屬性是Tstring類型的變量,包含了ADOQuery組件要執(zhí)行的SQL命令,它是ADOQuery的最為重要的屬性之一。在應用程序中,可以調(diào)用open方法或ExecSQL方法來執(zhí)行SQL屬性中指定的SQL語句。在代碼編寫階段,可以利用屬性編輯器編寫,在應用程序執(zhí)行過程中也可以動態(tài)的修改。
2) Parameters
    Parameters屬性中保存了SQL屬性中的SQL命令中執(zhí)行所需的參數(shù) ,這些參數(shù)可以在程序設(shè)計階段添加,這時可以在ObjectInspector設(shè)定參數(shù)的值,并且,參數(shù)的數(shù)量和類型必須與SQL屬性中SQL語句的參數(shù)一致。
3) oepen方法和ExecSQL方法 
    這兩種方法通常用于執(zhí)行SQL屬性所指定的SQL命令,動態(tài)上基本上類似。但是open方法通常調(diào)用SELECT語句,只要返回記錄集,而ExecSQL方法執(zhí)行Insertv、Update或Delete等命令,不返回記錄集。無論是調(diào)用open方法還是ExecSQL方法,在執(zhí)行它們之前都必須調(diào)用close方法。

 

六、TADOStredProc組件

 


    如果一個客戶應用程序必須使用數(shù)據(jù)庫中的存儲過程,則可以使用TADOstoreProc組件,一個存儲過程是一組語句,提前建立好的保存在數(shù)據(jù)服務器上,可以反復被執(zhí)行,在服務器上完成與數(shù)據(jù)庫有關(guān)任務,并將結(jié)果傳遞給客戶。

? TADOStoredProc組件的主要屬性
    TADOStoredProc組件與其它ADO數(shù)據(jù)集有相似的屬性,經(jīng)常需要設(shè)置的屬性如下:
1) Active
    設(shè)置為True時,可以激活數(shù)據(jù)集;設(shè)置為False;則關(guān)閉數(shù)據(jù)集。
2) Connection
    如果應用程序中添加了TADOConnection組件,則可以通過選擇該組件來建立數(shù)據(jù)庫的連接。
3) Connectionstring
    如果設(shè)置Connection屬性,則可以在該屬性中設(shè)置一個連接到數(shù)據(jù)庫的字符串。
4) DataSource
    是另一個數(shù)據(jù)集對應的數(shù)據(jù)源,用于為當前數(shù)據(jù)集提供一些值,一般情況下,不要設(shè)置該屬性,更不能將其屬性設(shè)置為當前數(shù)據(jù)集使用的數(shù)據(jù)源。實際上如果這樣做,在設(shè)計階段Delphi就會報錯。
5) Filter
    設(shè)置篩選記錄的條件。
6) Filtered
    決定是否激活Filter中設(shè)置的篩選條件。
7) Parameters
    設(shè)置數(shù)據(jù)集使用的存儲過程的名字,可以從下拉框中選擇。

? TADOStoredProc組件主要的方法
1) Create
    該方法用于建立TADOStoredProc組件的一個實例。實際上,當使用ADO組件面板上的TADOStoredProc組件,在一個表單或數(shù)據(jù)模塊中插入該組件時,就自動建立了一個實例,也就相當于隱含地調(diào)用了Creat方法。所以一般很少直接調(diào)用該方法建立TADOStoredProc組件的實例。
2) close
    用于銷毀TADOStoredProc組件的一個實例。
3) DeleteRecords
    用于刪除一條或多條記錄。
4) Edit 
    設(shè)置數(shù)據(jù)集為編輯狀態(tài)。
5) Enable Controls
    使用數(shù)據(jù)感知控件重新顯示數(shù)據(jù)。
6) Disable Controls
    使數(shù)據(jù)感知控件不能顯示數(shù)據(jù)。
7) Firse
    導航到數(shù)據(jù)集的第一條記錄。
8) Last
    導航到數(shù)據(jù)集的最后一條記錄。
9) Prior
    導航到數(shù)據(jù)集的前一條記錄。
10) next
    導航到數(shù)據(jù)集的下一條記錄。
11) MoveBy
    向前或向后導航多條記錄。
12) GetFieldData
    將一個字段當前的值提取到緩沖區(qū)中。
13) IsEmpty
    判斷一個數(shù)據(jù)集是否為空。
14) open
    打開一個數(shù)據(jù)集。
15) Refresh
    重新從數(shù)據(jù)庫中提取數(shù)據(jù)來更新數(shù)據(jù)集的數(shù)據(jù)。

? TADOStoredProc組件的事件
    TADOStoredProc組件與TADOQuery組件的事件基本相同,所以可以參考TADOQuery組件事件的說明。

七、TRDSConnection組件


    TRDSConnection組件 用于實現(xiàn)一個RDSData Space對象。當一個Recordset(記錄集)對象從一個進程或機器傳遞到另一個進程或機器上時,RDSDataspace對象負責管理數(shù)據(jù)的匯集。當使用基于ADO的業(yè)務(business)對象(應用程序服務器)來建立多層的應用程序時,應該使用TRDSConnection對象。
    在建立應用程序時,使用TRDSConnection組件代替TADOConnection組件,建立與一個TADODataset數(shù)據(jù)集的關(guān)聯(lián)關(guān)系,并在TADODataset組件的RDSConnection屬性中選擇使用的TRDSConnection組件實例。
    默認情況下,TRDSConnection組件與RDS DataFactory對象一起使用。如果不需要專門的業(yè)務對象,可以使用DataFactory對象。

? TRDSConnection組件主要的屬性
1) Appserver
    用于訪問應用程序服務器的通信接口,如果訪問與Recordsets對象武官的業(yè)務對象的附加屬性或方法時,可以使用該屬性。
2) ComputerName
    指定一個業(yè)務對象的來源。如果該屬性為空,則從本地計算機裝載業(yè)務對象。HTTP、HTTPS和DCOM等協(xié)議,可以用于建立業(yè)務對象。如果使用HTTP和HTTPS協(xié)議建立業(yè)務對象,則Computername屬性是包含確定ⅡS·web服務器的URL的一個字符串,服務器的業(yè)務對象實例就在該服務器上建立;如果使用DCOM協(xié)議,則computerName屬性是計算機的名字。
3) DataSpaceObject
    提供對RDSDataspace對象接口的訪問。
4) Connected
    確定是否已經(jīng)建立了到遠程數(shù)據(jù)源的連接,設(shè)置為True,則表示建立連接。
5) InternetTimeout
    設(shè)置超出規(guī)定的請求次數(shù)以前使用時間的數(shù)量,以毫秒計算
6) Name
    設(shè)置TRDSConnection組件實例的名字。
7) ServerName
    指定業(yè)務對象,即需要初始化的業(yè)務對象的ProgID。默認值是在RDSServer DataFactory屬性中,這是RDSServer DataFactory對象的ProgID。

? TRDSConnection組件主要方法
1) GetRecordset
    用于從一個業(yè)務對象中提取一個記錄集,與RDS連接組件關(guān)聯(lián)的TADODataset會自動調(diào)用該方法,其方法如下:
function GetRecordest(Const CommandText:Widestring;connectionstring:widestring=’’):_recordset
2) Free
    銷毀組件的實例并釋放其占用的資源。
3) open
    打開TRDSConnection的連接。
4) Creat
    建立TRDSConnection組件的一個實例,當在表單或數(shù)據(jù)模塊添加一個TRDSConnection組件時,就會隱含調(diào)用該方法。
5) Destory
    用于銷毀TRDSConnection組件的一個實例,在應用程序中一般不要直接調(diào)用該方法。而應調(diào)用Free方法來銷毀組件的實例

TRDSConnection組件的事件
1) AfterConnect
    該事件在建立TRDSConnection組件的連接后觸發(fā)。
2) AfterDisConnect
    該事件在斷開TRDSConnection組件的連接后觸發(fā)。
3) ReforeConnect
    該事件在建立TRDSConnection組件的連接前觸發(fā)。
4) BeforeConnect
    該事件在斷開TRDSConnection組件的連接前觸發(fā)。
5) OnLogin
    該事件在正確進行了用戶注冊并打開了到服務器的通道后觸發(fā)。

 



ADODataSet、ADOTable、ADOQuery屬性通用屬性

 

屬 

說 

123

Active

 

指明一個數(shù)據(jù)集是否處于打開狀態(tài)

123

AutoCalcFields

決定OnCalcFields事件何時被觸發(fā):當字段發(fā)生改變時計算自定義字段

 

Bof

 

標志著記錄指針是否停留在數(shù)據(jù)集的第一個記錄上

123

CacheSize

標識數(shù)據(jù)庫緩存大小

 

CacheUpdates

表明一個數(shù)據(jù)集緩存的更新特性是否可用

 

CanModify

表明程序是否可以在表格里面插入﹑編輯﹑或刪除數(shù)據(jù)

 

CommandText1

指定和數(shù)據(jù)感知對象相聯(lián)系的數(shù)據(jù)集對象

123

CommandTimeout

確定執(zhí)行一個數(shù)據(jù)操作命令的時間

 

CommandType1

說明CommandText屬性中的操作命令類型

123

Connection

確定TADOStoredProc組件使用的ADO連接組件TADOConnection

123

ConnectionString

指明數(shù)據(jù)庫的連接信息

123

CursorLoction

確定用ADO對象連接數(shù)據(jù)庫時的游標位置

clUseClient: 本地機器游標(缺省)

clUseServer: 服務器游標

123

CursorType

標識數(shù)據(jù)集使用的游標類型。取值:

 ctDynamic: 動態(tài)游標(可以雙向滾動)

 ctKeyset: 集鍵游標(缺。

 ctOpenForwardOnly: 游標只能向前滾動

 ctStatic: 靜態(tài)游標(多用于報表)

 ctUnspecified: 沒有明確的游標位置被設(shè)置

 

DatabaseName

表明數(shù)據(jù)集聯(lián)系的數(shù)據(jù)庫名

1

DataSetField

顯示TdataSetField對象

13

DataSource

連接另一個數(shù)據(jù)源的數(shù)據(jù)集

 

DefaultIndex

表明一個打開表格中的數(shù)據(jù)是否按默認的索引排序

 

DBHandle

表明數(shù)據(jù)集所在數(shù)據(jù)庫BDE的句柄

13

EnableBCD

確定是否將數(shù)字字段作為浮點數(shù)或二進制形式的十進制數(shù)

 

Eof

標志著記錄指針是否停留在數(shù)據(jù)集的最后一個記錄上

 

Exclusive

允許用戶以專有的方式打開一個Paradox或dBASE表格

123

ExecuteOptions

確定執(zhí)行一個命令的性質(zhì)。取值:

eoAsyncExecute: 命令被異步執(zhí)行

eoAsyncFetch: 命令在初始化Cache屬性所標識的記錄數(shù)后,異步地提取剩下的記錄

eoAsyncFetchNonBlocking: 執(zhí)行任務時不阻止線程

eoExecuteNoRecords: 命令或存儲過程沒有返回值。如果命令或存儲過程有返回值,則返回值將被舍棄

 

FieldCount

確定數(shù)據(jù)集的字段數(shù)

1

FieldDefs

訪問數(shù)據(jù)集定義的字段列表

 

Fields

指向數(shù)據(jù)集的字段列表

123

Filter

表明當前數(shù)據(jù)集過濾的文本內(nèi)容

123

Filtered

表明一個數(shù)據(jù)集的過濾器是否被激活

 

FilterOption

設(shè)置過濾選項

 

Handle

允許程序直接調(diào)用API函數(shù)

12

IndexFieldNames

顯示數(shù)據(jù)庫表格所采用的索引排序的字段名

 

IndexFields

指出數(shù)據(jù)庫中的字段名列表

12

IndexName

標識當前激活的索引

123

LockType

在打開數(shù)據(jù)集時﹐LockType屬性用于標識鎖的類型。取值:

 ltBatchOptimistic: 樂觀批更新鎖定,以批處理更新方式打開記錄

 ltOptimistic:樂觀鎖定,調(diào)用Post方法時才鎖定記錄

 ltPessimistic: 悲觀鎖定,調(diào)用Edit方法時鎖定記錄

 ltReadOnly: 只讀,當前操作不能修改數(shù)據(jù)

 ltUnspecified: 鎖類型沒有確定

123

MarshalOptions

確定數(shù)據(jù)集中的哪些記錄被寫回到服務器中。取值:

 moMarshalAll

 moMarshalModifiedOnly

12

MasterFields

設(shè)置主表的字段

 

MasterSource

指定作為數(shù)據(jù)集主表的data source組件的名字

123

MaxRecords

確定從結(jié)果集返回的行數(shù)

 

Modified

標志著當前記錄是否已被修改

123

Name

該組件在被其它組件引用時的名字

 

ObjectView

指明字段在Fields porperty中是層次排列還是平鋪

13

ParamCheck

設(shè)置該屬性可指定是否使用在CommandText屬性中設(shè)置的SQL語句中的”: Param”格式的參數(shù)出始化Parameters屬性

13

Parameters

為存儲過程傳遞參數(shù)或存儲由存儲過程返回的數(shù)據(jù)

13

Prepared

確定ADO組件在執(zhí)行命令前是否保存一個編譯的版本

1

RDSConnection

 

 

RecNo

RecNo就是記錄在記錄集中的序號

 

RecordCount

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

2

ReadOnly

表明一個數(shù)據(jù)表格在此應用程序中是否只讀

 

SessionName

指定與數(shù)據(jù)集相連的Session的名字

3

SQL

調(diào)用ADO查詢對象的ExecSQL或Open方法時,使用該屬性為該查詢對象提供需要的SQL語句

 

State

數(shù)據(jù)集的狀態(tài)(運行時屬性)。取值:

dsInactive: 數(shù)據(jù)集已關(guān)閉,不能訪問數(shù)據(jù)﹔

dsBrowse: 數(shù)據(jù)集已打開,可以瀏覽數(shù)據(jù),但是不能進行修改﹔

dsEdit: 數(shù)據(jù)集處于編輯狀態(tài),可以修改數(shù)據(jù)﹔

dsInsert: 此時可以插入一條新的記錄﹔

dsSetKey: 可以設(shè)置范圍和鍵值,也可以調(diào)用GotoKey函數(shù),僅適用于TTable組件和TClientDataSet組件﹔

dsCalcFields: 正在處理OnCalcFields事件,不能修改非計算字段的值。

dsCurValue: 僅供系統(tǒng)內(nèi)部使用

dsNewValue: 僅供系統(tǒng)內(nèi)部使用

dsOldValue: 僅供系統(tǒng)內(nèi)部使用

dsInternalCalc: 僅供系統(tǒng)內(nèi)部使用

dsFilter: 正在進行數(shù)據(jù)過濾的操作

dsBlockRead: 當記錄集指針移動到下一個記錄時,數(shù)據(jù)感知組件不更新,事件不被觸發(fā)

dsOpening: 數(shù)據(jù)集正在打開,但沒有完成

1

StoreDefs

指出數(shù)據(jù)庫表格的字段和索引與數(shù)據(jù)模塊一致﹐還是與窗體一致

2

TableDirect

設(shè)置該屬性可指定是簡單地通過該數(shù)據(jù)表的名稱訪問該數(shù)據(jù)表(false,缺。是使用后臺SQL語句訪問數(shù)據(jù)表(ture)

2

TableName

使用該屬性可指定用于ADO數(shù)據(jù)表組件操作的基礎(chǔ)數(shù)據(jù)表,TADOTable對象用于從中獲得數(shù)據(jù)或修改其中的值。

 

TableStyle

指明該組件指向的數(shù)據(jù)表格的類型

123

Tag

本地窗體整形變量標識號

 

UpdateMode

決定BDE如何在SQL數(shù)據(jù)庫中查詢更新的記錄

 

UpdateObject

指出在允許緩存更新時﹐用來更新只讀記錄的update object組件

 

 

 

 

 

 

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

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

    支持( 0 ) 蓋樓(回復)

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

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