ADO是一種程序對象,用於表示用戶數據庫中的數據結構和所包含的數據。
ADO (ActiveX Data Objects,ActiveX數據對象)是Microsoft提出的應用程序接口(API)用以實現訪問關系或非關系數據庫中的數據。例如,如果您希望編寫應用程序從DB2或Oracle數據庫中向網頁提供數據,可以將ADO程序包括在作為活動服務器頁(ASP)的HTML文件中。當用戶從網站請求網頁時,返回的網頁也包括了數據中的相應數據,這些是由於使用了ADO代碼的結果。
在Delphi 5.0 以上的版本都可以很好的支持ADO技術。
Delphi 中 ADO 主要有
1、ADOConnection 用於鏈接數據庫
2、ADOCommand ADODataSet 用來查詢或執行SQL語名;
3、DataSource 數據中間存儲組件;
4、DBGrid 數據顯示出來;
其實主要是用ADO連接,而ADO也是最常用的連接技術之一。
以下幾個控件在連接數據庫時是用得比較多的,並且通常的的連接架構是
————————————————————
數據庫
↑
ADOConnection
↑ ↑
ADOCommand ADODataSet
↑
DataSource
↑
DBGrid
————————————————————
或者
————————————————————
數 據 庫
↑ ↑
ADOCommand ADODataSet
↑
DataSource
↑
DBGrid
————————————————————
也就是說,ADOCommand和ADODataSet既可以通過ADOConnection連接數據庫,也可以不用,分別直接連接數據庫,因為這三個控件都有一個共同的ConnectionString屬性。
一、 TADOConnection組件
該組件用於建立數據庫的連接。ADO的數據源組件和命令組件可以通過該組件運行命令及數據庫中提取數據等。
該組件用於建立數據庫的連接,該連接可被多個數據集所共享,但是並不是應用程序中必須的,因為ADO數據集及命令組件通過設置其ConnectionString屬性,可以直接連接到數據庫。但是如果多個數據集使用相同的數據庫連接時,則使用TADOConnection就有一定的優勢,因為不必為每個數據集都單獨建立數據庫的連接,同時也減少了資源的消耗,並且可以建立跨越多個數據集的事務。一個事務(transaction)是數據庫操作的一個階段,用戶對數據庫的修改都保存在本地計算機的內存中,只有提交一個事務后,才能將修改的內容提交到數據庫中。如果選擇了回滾事務,則所有的修改將被取消,而不會提交到數據庫中。
? TADOConnection組件提供如下功能:
v 控件數據庫的連接
v 控制服務器的注冊
v 管理事務
v 為關聯的數據集提供數據庫連接
v 將SQL命令發送到數據庫中
v 獲得數據庫的原數據(metadata)
TADOConnection的常用屬性
1) Attributes
此屬性用於設置連接的數據庫的自動處理的行為,它是TxactAttributes
類型的集合,包括兩個集合元素:
I. XaCommitRetaining:提交一個事務后自動開始一個新的事務。
II. XaAbortRetaining: 回退一個事務的同時將開始一個新的事務。
2) CommandTimeout
連接超時屬性,用於設置一個命令執行時所能等待的最大時間值。以秒為計量單位。缺省值為30秒,即連接命令等待了30秒之后還沒有被執行,系統就放棄這個命令。
3) Connected
標識和數據庫的連接是否處於激活狀態。
用戶可以查詢Connected屬性的值來判斷數據庫的連接狀態。如果該屬性為true,則表明數據庫處於連接狀態;為false,則當前數據庫連接關閉。
4) ConnectionString
連字符串用於指定數據庫的連接信息。連字符串的標准調用方為:ADOConnection1.ConnectionString:='Provider=ProviderRet;Remote Server=ServerRet';
其中,連接串支持的常用參數如下:
數據庫連接參數及說明
參數 說明
Provider 數據提供者名稱,例如MSDASQL.1
Password 登錄數據庫的口令
參數 說明
Persist Security 支持安全登錄
User ID 登錄數據庫用戶
DataSource 數據源名稱、數據源的設置需要額外的操作
設置成功之后,用戶就可以將屬性Connected設置為True,如果沒有任何提示信息,說明數據庫已經成功連接,此時,屬性DefaultPatabase就被賦值為連接所指定的數據庫的路徑。
5) ConnectOptions
指定數據庫連接是按照同步方式還是異步方式。類型Tconnectoption包含兩個值:
v coConnectUnspecified:數據庫連接采用同步方式連接。
v coAsyncConnect:異步方式連接數據庫。當服務器負載很重的時候,這種連接方式很有用。引用這種連接方式,在第一次建立連接的時候,應用程序不能獲得全部的數據。
6) CursorLocation
指定數據庫指針是指向客戶端還是服務器端。類型TcursorLocation包含兩個值:
v cluseServer:使用服務器端的數據庫指針,適用於數據量大的數據集。
v cluseClient:使用客戶端的數據指針的時候,數據將被下載到本地計算機上,並在本地進行操作。
7) DefaultDatabase
表明數據源成功連接后,這是由數據源自動賦值的。
8) IsoLationLevel
指定不同事務之間的相互獨立的級別,事務實際上是對數據庫的一系列操作的集合。事務具有整體性,如果事務中的某一個步驟不能正確執行,則整個事務都不會執行。由於數據庫服務器可以同時支持多個連接,來自不同連接的事務有可能在同一時刻對同一個數據進行操作,這就有可能造成數據不一致性。為防止這種情況出現,ADO引入了事務獨立級來確定不同事務之間的相互關系。設定事務獨立級之后並調用BeginTrans方法后,新的事務獨立級別將生效。
TISolationLevel共包含9種常量值:如下:
TISolationLevel常量及說明
常量參數 說明
ilUnspecified 使用默認的獨立級別,沒有其它的獨立級別
ilChaos 來自更高獨立級別的事務對數據的改變不能被當前的事務覆蓋
ilReadUncommitled 當前事務可以讀取其他事務未提交的數據
ilBrowse 當前事務可以讀取其他事務未提交的數據
ilcursorStability 事務提交后數據才能被讀取
ilReadCommitled 事務提交后數據才能被讀取
ilRepeatableRead 不能讀取其它事務的數據,執行Requery操作可以獲得這些數據
ilSerializable 從其他事務中獲取事務的獨立級別
ilIsolated 從其他事務中獲取事務的獨立級別
這些常量的定義在Microsoft Data Access SDK中有詳盡的說明,需要進一步了解可以查詢微軟的SDK文檔。
9) KeepConnection
指定如果在沒有打開數據集的情況下是否仍然保持數據的連接。
瀕繁地打開和關閉數據庫的操作將會影響系統的性能,特別在網絡上,會在一定程度上增加網絡的負載。這個屬性設置數據源始終處於連接狀態,可以顯著提高程序的性能。
10) LoginPrompt
指定在每次建立連接時是否彈出登錄對話框提示用戶登錄。如果設為False,則必須在ConnectionString中指定登錄數據庫的用戶和密碼。
11) Mode
指定連接對數據庫的操作權限,這種連接模式的值如下:
連接模式參數及說明
參數 說明
cmUnknown 未指定數據庫操作權限或無法確定
cmRead 對數據庫只能讀操作
cmWrite 對數據庫只能寫操作
cmReadWrite 對數據庫可讀寫操作
cmShareDenyRead 禁止其他用戶對數據庫讀操作
cmShareDenyWrite 禁止其他用戶對數據庫寫操作
cmShareExclusive 禁止其他用戶對打開數據連接
cmShareDengNone 禁止其他用戶對數據庫任何操作
ADOConnection的主要方法:
1) BeginTrans
開始啟動一個新的事務,必須保證數據連接處於激活狀態。
2) Cancel
關閉於數據庫的連接。
3) CommitTrans
向數據庫提交一個事務。提交成功后,再事務中對數據庫所作的修改則寫入數據庫中,同時一個事務也結束。
4) Execute(constCommandText:Widestring;VarRecordsAffected;Executeoptions:TexcuteOptions=[eoExecuteNoRecords]);
執行一個CommandText類型的SQL命令,其中,CommandText是指定的SQL命令;ReardsAffected指定該命令設計的記錄數目;ExecuteOptions指定命令特征如下:
ExecuteOption的值及說明
參數 說明
eoAsyncExecute 異步執行命令
eoAsyncFetch 給定了Cache屬性的值后,在異步地去數據
eoAsyncFetchNonBlocking 非阻塞式線程執行
eoExecuteNoRecords 沒有返回記錄
5) GetProcedureNames(List:Tstring);
獲取數據庫服務器上的存儲過程名稱,獲取的存儲過程名稱在List參數中。
6) GetTableNames(List:Tstring;SystemTables:Boolean=False);
獲取數據庫中的數據表,獲取的表名存放在List參數中SystemTables參數指示是否獲取數據庫系統表的名稱。數據庫系統表是指在數據庫中關於數據庫數據類型定義和用戶信息的數據表,這種系統表是數據庫本身自動生成的。
7) Open(const UserID:widestring;constPassword:widestring)
打開一個連接,參數UserID是數據庫用戶的用戶名。Password是用戶登錄數據庫的密碼。
8) RollbackTrams
撤回一個沒有全部執行的事務。事務撤回之后,事務中所作的任何修改都不會寫入數據庫。
ADOConnection的主要事件
事件 說明
AfterConnect 發生在一個連接建立之后
AfterDisconnect 發生在斷開連接之后
BeforeConnect 發生在連接建立前
BeforeDisconnect 發生在斷開連接前
OnBeginTranscomplete 發生在開始一個事務時
OnCommitTranscomplete 發生在提交事務成功時
OnConnectComplete 發生在連接完成時
OnDisconnect 發生在斷開時
OnExecuteComplete 發生在一個命令執行后
OnInfoMessage 發生在收到數據庫的消息
OnLogin 發生在用戶登錄數據庫的時候
OnRollbackTransComplite 發生在一個事務撤回之后
OnWillConnect 發生在發出一個連接數據請求的時候
OnWillExecute 發生在數據庫收到一個SQL命令並將要執行之前
二、ADOCommand組件
ADOCommand向數據庫發送SQL指令並返回請求的數據集。
ADOCommand組件主要用於運行一些數據定義語言(DDL)的SQL命令或者運行一個沒有返回結果的存儲過程。對於返回結果集的SQL語句,則最好使用TADODataset、TADOQuer或TADOStoredProc組件。盡管ADOCommand組件的Exexute方法可以返回一個結果集,但卻是通過另一個ADO數據集組件來使用該記錄集。
TADOCommand組件與ADOCommand對象相似,所以ADOCommand組件中的屬性和方法在ADOCommand對象中都能找到相同的餓名字,並且具有相同的作用。如果使用ASP開發過動態網頁,對此一定會有深刻的認識。
TADOCommand代表了ADOCommand(ADO命令)對象,它通過一個ADO提供者訪問數據庫。TADOCommand組件執行的是其CommandText屬性中設置的命令,通過調用Execute方法執行該命令。如果該命令中需要使用參數,則通過Parameters屬性設置,該屬性與BDE數據集Tquery組件的Params屬性的作用及設置方法相同。
? ADOCommand的主要屬性
1) CommandText
指定要執行的SQL命令,可以手工編寫,也可以利用CommandText編輯器對話框來設置這個屬性。
CommandText編輯器是專門用來為ADO組件來編寫SQL命令的。Table列表框用來列出數據庫中所有的表,選中一個表,單擊”Add Table to SQL”按鈕,CommandText編輯器就會自動把表名插入SQL命令的相應位置。在選中某個表的同時,這個表中的所有字段都會自動地列在Fields列表框里。同樣,選中Fields列表框中的一個字段,單擊”Add Fields to SQL”,字段就會插入到SQL命令中。
2) CommandType
指定要執行的命令的種類:
CommandType的參數及說明
參數 說明
cmdUnknown 未知的命令類型
cmdText 文本類型
cmdTable 命令中指定的是一個表的名稱
cmdStoredProc 命令中指定的是一個存儲過程的名稱
cmdFile 命令中指定的是保存數據集的文件名
cmdTableDirect 命令中指定的是表的名稱,並返回所有的列
3) Connection
指定所使用的數據源連接組件的名稱,即ADOConnection組件的名稱,通過這個屬性使得ADOCommand能與數據庫連接起來。
4) Paramcheck
指定在SQL命令動態改變的時候,是否需要重置參數列表。
5) Parameters
執行SQL命令時要用到的參數,在參數查詢中,即在SQL命令中或在存儲過程中需要傳遞參數的時候才需要設置這個值,並且在命令類型CmmandType指定為cmdText或cmdStoredProc時,參數才有效。
? ADOCommand主要方法:
1) Cancel
中止一個正在執行的命令
2) Assign(source:TPersistent)
把另一個ADOCommand組件的所有屬性復制到當前的ADOCommand組件中。調用的時候,按名存取組件對象。
3) Execute
執行ADOCommand組件所包含的命令,返回結果是一個數據記錄集,可以被其他ADO組件的Recordset記錄集屬性調用。
三、 ADODataset組件
ADODataset是ADO組件中最通用的一個組件,它能獲取並代表任何其他ADO組件從數據庫返回的數據集合。數據集是通過SQL命令返回的一個表或者多個表數據。
要使ADODataset數據集組件能夠正常地發揮作用,則應首先設置其Connection或Connection String屬性來建立起到數據庫的連接。如果要使用一個RDSDataSpace對象將該數據集連接到基於ADO的應用程序服務器,則需要RDSConnection屬性設置為一個TRDSConnection對象。
由於ADODataset組件必須返回一個結果集,所以其CommandText屬性中如果使用語句,則只能使用SELECT語句,而不能使用一引起數據操作語言(DML),比如DELETE、INSERT和UPDATE語句。
同時由於該數據集可以使用SQL 語句。所以可以從一個或多個基表中查詢數據。
? ADODataset的常用屬性
1) Active
指示當前的記錄集是否處於打開狀態,調用open方法,打開數據庫,Active值為True;調用close方法,數據庫關閉,則Active為False;
只有Active的值為False時,應用程序才能對數據庫進行讀寫操作。需要將Active變為True的情況是:
v 數據庫的狀態設為dsBrowse(瀏覽模式、查看、掃描數據)。
v 如果程序中加載了BeforeOpen事件,在該事件被觸發時。
v 如果程序加載了AfterOpen事件,在該事件被觸發時。
v 通過記錄集打開一個數據指針時。
在更改數據集屬性,且這些屬性影響到數據庫的狀態或數據顯示組件的狀態時,要提前將數據集的Active屬性設置為False;
2) AutoCalcFields
設為True,則允許應用程序觸發OnCalcFileds事件。計算字段依賴於當前記錄的一個或多個字段。通過已有的字段數據統計計算。該值為True,在記錄數據被修改或者編輯時,就觸發OnCalcFields事件。應用程序自動更新計算字段的值,以保證數據的一致性 。能觸發OnCalcFileds事件的條件是:
v 數據集組件的狀態變為dsEdit。
v 記錄已經被修改。
v 應用程序從數據庫中重新獲得一條記錄。
可以看出,上述的情況並不都需要更新計算字段。如果用戶需要頻繁地修改數據,則OnCalcFields事件就會不斷地調用。頻繁地調用在一定程度影響了應用程序的性能。在這種情況下,可以將屬性AutoCalcFields設為False。
3) Cachesize
指定數據集的緩沖區大小。數據集首先把數據從數據庫中取出,然后保存在內存的一塊域中。這塊內存區域就是所謂的緩沖區。如果設置CacheSize為20,則表示數據集將一次從數據集將一次從數據庫中提取20條記錄並將這20條記錄保存到緩沖區中。缺省值為1,也是最小值。
4) CommandText
指定數據集合中包含的命令,可以是SQL語句,一個表名或者一個存儲過程名。常用的調用形式為:
with ADODataset1 do
begin
commandType:=cmdText;
command Text:=’Select * From customerTable’;
open;
end;
5) Filer
數據集的過濾器,通過使用過濾器可以把那些不需要的數據過濾掉。設置Filter屬性的典型方法為:
with ADODataset1 do begin
Filterd:=False;
Filter:=’State=’+Quotedstr(‘CA’)+’OR’+”State=’+Quotedstr(‘CA’);
Filterd:=True;
End;
如果用戶修改了帶有過濾數據集的數據,修改的結果如果不滿足過濾器的條件,則修改的數據就自動從當前的數據庫中消失。
6) MaxRecord
最大 返回數據集記錄數,默認值為0 返回所有數據。
7) RecordCount
顯示與數據集相連的記錄的總數
詳細的屬性大家可以看最后一頁
ADODataset的常用方法
1) GetIndexNames(List:Tstring)
查詢表中的全部索引,返回值將保存在參數List中,調用方法為:
ADODataset1.GetIndexNames(ListBox1.Items);
2) DeleteRecords(AffectRecords:TaffectRecords=arAll)
刪除記錄集的記錄,參數AffectRecords用於指定要刪除的具體記錄。它的取值可為如下:
AffectRecords的參數及說明
參數值 說明
arCurrent 僅刪除當前記錄
arFiltered 刪除滿足過濾器過濾條件的數據
arAll 刪除記錄的所有記錄
arAllChapters 刪除ADO連接數據部分的全部記錄
缺省值為arAll,刪除當前記錄集中的所有記錄。
3) Locate(const KeyFields:String;constKeyValues:Variant;Options:TLocateOptions)
定位一條記錄並把這條記錄作為當前記錄。其中KeyFields是索引的字段名;KeyValues是要查找的值;Options是定位數據選項,他的值可以是:
v IoCaseInsensitive:定位數據不區分大小寫。
v IoPartialkey:部分匹配定位查找數據。
4) Requery(options:TexecuteOption=[])
刷新數據集中的數據,它是通過重新執行原來的命令或SQL語句來重新生成記錄集。
5) SaveToFile(constFileName:String=’’;Format:TpersisFormat=PftAdTg)
把當前數據集中的數據按照指定的格式保存到指定的文件中。FileName為指定的文件名:Format為保存的文件格式,它可以選取下列值:
v PfAdTG:按照ADTG(Advanced Data Tablegram)格式生成文件。
v PfXML:按照XML格式保存文件。
6) seek(constKeyValues:Variant;seekOption:Tseekoption=SoFirstEQ)
搜索記錄並移動數據集的指針。搜索動作是以當前數據集中的索引為搜索依據。其中KeyValues為被搜索的值。
Success:=ADODataSet1.seek(‘Jones’,SoFirstEQ);
如果搜索到復合索引的值,則返回True,反之為False,也可以同時搜索多個值:
ADODataSet1.seek(VarArrayof([90030,90020]),soFirstEQ);
這就需要利用函數VarArrayof()構造一個參數傳遞給KeyValues。
Seek的第二個參數seekoption限定了搜索行為的動作。
可以取的值如下:
Seekoption的取值及說明
參數值 說明
SoFirstEQ Rexord 數據庫指針定位在第一條匹配的記錄處,如果沒有任何匹配記錄則指向數據庫的未記錄
SoLastEQ Record 數據庫指針定位在最后一條匹配的記錄處,如果沒有任何匹配記錄則指向數據庫的未記錄
SoAfterEQ Record 如果搜索到匹配記錄,在指向匹配記錄的下一條,如果沒有找到則指向最近似匹配記錄上
SoAfter 指向匹配記錄的下一條
SoBeforeEQ 如果搜索到匹配記錄,在指向匹配記錄的前一條,如果沒有找到則指向最近似匹配記錄上
SoBefore 指向匹配記錄的前一條
四、ADOTable組件
ADODataset組件、ADOTable組件、 ADOQuery組件和ADOstreProc組件都是繼承自父類TcustomADODataset ,所以在屬性、事件及方法上有許多共同的地方。
TADOTable組件只能通過ADO訪問數據庫中單個基表的數據,它即可以訪問 一個基表中的所有數據及字段,也可以訪問部分記錄,即通過在Filter屬性設置篩選條件實現。
由於TADOTable組件與其他組件不同的是,它專門針對數據庫中表進行操作。
? TADOTable特有的一些屬性方法:
1) MaterSource屬性和MasterFields屬性
MaterSource屬性是用於建立主從關系的數據源,當前的ADQTable中的數據將根據MaterSource屬性所指定的數據源變化而變化。在一個數據庫匯總,某些表之間可能存在互相關聯的,一種常見的情況是兩個表之間存在共同的字段。通過這些共同的字段,可以建立主從關系的關聯。可以通過訪問一個表而得到另一個表的數據,這種主從關系建立以后,如果用戶在主表記錄選中一條記錄,則從表中相應的記錄自動獲得。
MasterFields屬性指定用於建立主從關系的關聯字段,指定的字段是將主表和從表賴以存在的紐帶,這個字段必須是主從表中共有的字段。
2) Readonly
指定ADOTable中數據是否處於只讀狀態。
3) TableDirect
指定是通過表名來訪問數據庫還是在后台運行SQL命令訪問數據庫,部分的數據提供者不支持通過表名對數據庫的訪問,這時的ADOTable就只能通過后台運行SQL的SELECT語句來訪問數據庫。如果設置為True,則ADOTable組件在后台運行SQL命令訪問數據表,為False按表名訪問數據庫,缺省值為Flase。
4) TableName
指定ADOTable要操作的表名。
只有當設置了正確的connection或者connectionstring,Active屬性為True的時候,才能設置TableName屬性,表名的列表才會在ObjectInspector中顯示。
5) Append方法和AppendRecord(constValues:arrayofconst)
使用Append方法在增加一條新記錄的同時,並為新記錄賦值。賦值是通過一個數組作為參數傳遞進去的。但是必須保證數組的維數和字段數一致且順序一致。
6) Post方法
執行Post方法,是將已經修改完畢的記錄寫入數據庫中。通常是每執行完一個修改記錄的操作,執行一次Post操作,以完成對數據庫的更新。
五、ADOQuery組件
ADOQuery組件借助於SQL語言的強大功能訪問多個數據表,可以實現數據瀏覽、修改和刪除等操作,並且,ADOQuery組件可以實現參數查詢。所謂參數在使用上可以理解為變量。在執行SQL之前,就被賦值。運用參數化查詢,不需要修改SQL語句,給定不同的參數值,就可以獲得不同得到的查詢結果。通常情況下,使用ADOQuery是為了從數據集中查詢一部分字段或記錄,也可以使用INSERTV、DELETE、UPDATE、ALTER TABLE等SQL命令實現數據的更新、插入和刪除記錄的操作。如果數據集只包含一個基表,則可以使用ADOQuery,也可以使用TADOTable數據集。
? ADOQuery的主要屬性和方法
1) SQL屬性
SQL屬性是Tstring類型的變量,包含了ADOQuery組件要執行的SQL命令,它是ADOQuery的最為重要的屬性之一。在應用程序中,可以調用open方法或ExecSQL方法來執行SQL屬性中指定的SQL語句。在代碼編寫階段,可以利用屬性編輯器編寫,在應用程序執行過程中也可以動態的修改。
2) Parameters
Parameters屬性中保存了SQL屬性中的SQL命令中執行所需的參數 ,這些參數可以在程序設計階段添加,這時可以在ObjectInspector設定參數的值,並且,參數的數量和類型必須與SQL屬性中SQL語句的參數一致。
3) oepen方法和ExecSQL方法
這兩種方法通常用於執行SQL屬性所指定的SQL命令,動態上基本上類似。但是open方法通常調用SELECT語句,只要返回記錄集,而ExecSQL方法執行Insertv、Update或Delete等命令,不返回記錄集。無論是調用open方法還是ExecSQL方法,在執行它們之前都必須調用close方法。
六、TADOStredProc組件
如果一個客戶應用程序必須使用數據庫中的存儲過程,則可以使用TADOstoreProc組件,一個存儲過程是一組語句,提前建立好的保存在數據服務器上,可以反復被執行,在服務器上完成與數據庫有關任務,並將結果傳遞給客戶。
? TADOStoredProc組件的主要屬性
TADOStoredProc組件與其它ADO數據集有相似的屬性,經常需要設置的屬性如下:
1) Active
設置為True時,可以激活數據集;設置為False;則關閉數據集。
2) Connection
如果應用程序中添加了TADOConnection組件,則可以通過選擇該組件來建立數據庫的連接。
3) Connectionstring
如果設置Connection屬性,則可以在該屬性中設置一個連接到數據庫的字符串。
4) DataSource
是另一個數據集對應的數據源,用於為當前數據集提供一些值,一般情況下,不要設置該屬性,更不能將其屬性設置為當前數據集使用的數據源。實際上如果這樣做,在設計階段Delphi就會報錯。
5) Filter
設置篩選記錄的條件。
6) Filtered
決定是否激活Filter中設置的篩選條件。
7) Parameters
設置數據集使用的存儲過程的名字,可以從下拉框中選擇。
? TADOStoredProc組件主要的方法
1) Create
該方法用於建立TADOStoredProc組件的一個實例。實際上,當使用ADO組件面板上的TADOStoredProc組件,在一個表單或數據模塊中插入該組件時,就自動建立了一個實例,也就相當於隱含地調用了Creat方法。所以一般很少直接調用該方法建立TADOStoredProc組件的實例。
2) close
用於銷毀TADOStoredProc組件的一個實例。
3) DeleteRecords
用於刪除一條或多條記錄。
4) Edit
設置數據集為編輯狀態。
5) Enable Controls
使用數據感知控件重新顯示數據。
6) Disable Controls
使數據感知控件不能顯示數據。
7) Firse
導航到數據集的第一條記錄。
8) Last
導航到數據集的最后一條記錄。
9) Prior
導航到數據集的前一條記錄。
10) next
導航到數據集的下一條記錄。
11) MoveBy
向前或向后導航多條記錄。
12) GetFieldData
將一個字段當前的值提取到緩沖區中。
13) IsEmpty
判斷一個數據集是否為空。
14) open
打開一個數據集。
15) Refresh
重新從數據庫中提取數據來更新數據集的數據。
? TADOStoredProc組件的事件
TADOStoredProc組件與TADOQuery組件的事件基本相同,所以可以參考TADOQuery組件事件的說明。
七、TRDSConnection組件
TRDSConnection組件 用於實現一個RDSData Space對象。當一個Recordset(記錄集)對象從一個進程或機器傳遞到另一個進程或機器上時,RDSDataspace對象負責管理數據的匯集。當使用基於ADO的業務(business)對象(應用程序服務器)來建立多層的應用程序時,應該使用TRDSConnection對象。
在建立應用程序時,使用TRDSConnection組件代替TADOConnection組件,建立與一個TADODataset數據集的關聯關系,並在TADODataset組件的RDSConnection屬性中選擇使用的TRDSConnection組件實例。
默認情況下,TRDSConnection組件與RDS DataFactory對象一起使用。如果不需要專門的業務對象,可以使用DataFactory對象。
? TRDSConnection組件主要的屬性
1) Appserver
用於訪問應用程序服務器的通信接口,如果訪問與Recordsets對象武官的業務對象的附加屬性或方法時,可以使用該屬性。
2) ComputerName
指定一個業務對象的來源。如果該屬性為空,則從本地計算機裝載業務對象。HTTP、HTTPS和DCOM等協議,可以用於建立業務對象。如果使用HTTP和HTTPS協議建立業務對象,則Computername屬性是包含確定ⅡS·web服務器的URL的一個字符串,服務器的業務對象實例就在該服務器上建立;如果使用DCOM協議,則computerName屬性是計算機的名字。
3) DataSpaceObject
提供對RDSDataspace對象接口的訪問。
4) Connected
確定是否已經建立了到遠程數據源的連接,設置為True,則表示建立連接。
5) InternetTimeout
設置超出規定的請求次數以前使用時間的數量,以毫秒計算
6) Name
設置TRDSConnection組件實例的名字。
7) ServerName
指定業務對象,即需要初始化的業務對象的ProgID。默認值是在RDSServer DataFactory屬性中,這是RDSServer DataFactory對象的ProgID。
? TRDSConnection組件主要方法
1) GetRecordset
用於從一個業務對象中提取一個記錄集,與RDS連接組件關聯的TADODataset會自動調用該方法,其方法如下:
function GetRecordest(Const CommandText:Widestring;connectionstring:widestring=’’):_recordset
2) Free
銷毀組件的實例並釋放其占用的資源。
3) open
打開TRDSConnection的連接。
4) Creat
建立TRDSConnection組件的一個實例,當在表單或數據模塊添加一個TRDSConnection組件時,就會隱含調用該方法。
5) Destory
用於銷毀TRDSConnection組件的一個實例,在應用程序中一般不要直接調用該方法。而應調用Free方法來銷毀組件的實例
TRDSConnection組件的事件
1) AfterConnect
該事件在建立TRDSConnection組件的連接后觸發。
2) AfterDisConnect
該事件在斷開TRDSConnection組件的連接后觸發。
3) ReforeConnect
該事件在建立TRDSConnection組件的連接前觸發。
4) BeforeConnect
該事件在斷開TRDSConnection組件的連接前觸發。
5) OnLogin
該事件在正確進行了用戶注冊並打開了到服務器的通道后觸發。
ADODataSet、ADOTable、ADOQuery屬性通用屬性
|
屬 性 |
說 明 |
123 |
Active
|
指明一個數據集是否處於打開狀態 |
123 |
AutoCalcFields |
決定OnCalcFields事件何時被觸發:當字段發生改變時計算自定義字段 |
|
Bof
|
標志着記錄指針是否停留在數據集的第一個記錄上 |
123 |
CacheSize |
標識數據庫緩存大小 |
|
CacheUpdates |
表明一個數據集緩存的更新特性是否可用 |
|
CanModify |
表明程序是否可以在表格里面插入﹑編輯﹑或刪除數據 |
|
CommandText1 |
指定和數據感知對象相聯系的數據集對象 |
123 |
CommandTimeout |
確定執行一個數據操作命令的時間 |
|
CommandType1 |
說明CommandText屬性中的操作命令類型 |
123 |
Connection |
確定TADOStoredProc組件使用的ADO連接組件TADOConnection |
123 |
ConnectionString |
指明數據庫的連接信息 |
123 |
CursorLoction |
確定用ADO對象連接數據庫時的游標位置 clUseClient: 本地機器游標(缺省) clUseServer: 服務器游標 |
123 |
CursorType |
標識數據集使用的游標類型。取值: ctDynamic: 動態游標(可以雙向滾動) ctKeyset: 集鍵游標(缺省) ctOpenForwardOnly: 游標只能向前滾動 ctStatic: 靜態游標(多用於報表) ctUnspecified: 沒有明確的游標位置被設置 |
|
DatabaseName |
表明數據集聯系的數據庫名 |
1 |
DataSetField |
顯示TdataSetField對象 |
13 |
DataSource |
連接另一個數據源的數據集 |
|
DefaultIndex |
表明一個打開表格中的數據是否按默認的索引排序 |
|
DBHandle |
表明數據集所在數據庫BDE的句柄 |
13 |
EnableBCD |
確定是否將數字字段作為浮點數或二進制形式的十進制數 |
|
Eof |
標志着記錄指針是否停留在數據集的最后一個記錄上 |
|
Exclusive |
允許用戶以專有的方式打開一個Paradox或dBASE表格 |
123 |
ExecuteOptions |
確定執行一個命令的性質。取值: eoAsyncExecute: 命令被異步執行 eoAsyncFetch: 命令在初始化Cache屬性所標識的記錄數后,異步地提取剩下的記錄 eoAsyncFetchNonBlocking: 執行任務時不阻止線程 eoExecuteNoRecords: 命令或存儲過程沒有返回值。如果命令或存儲過程有返回值,則返回值將被舍棄 |
|
FieldCount |
確定數據集的字段數 |
1 |
FieldDefs |
訪問數據集定義的字段列表 |
|
Fields |
指向數據集的字段列表 |
123 |
Filter |
表明當前數據集過濾的文本內容 |
123 |
Filtered |
表明一個數據集的過濾器是否被激活 |
|
FilterOption |
設置過濾選項 |
|
Handle |
允許程序直接調用API函數 |
12 |
IndexFieldNames |
顯示數據庫表格所采用的索引排序的字段名 |
|
IndexFields |
指出數據庫中的字段名列表 |
12 |
IndexName |
標識當前激活的索引 |
123 |
LockType |
在打開數據集時﹐LockType屬性用於標識鎖的類型。取值: ltBatchOptimistic: 樂觀批更新鎖定,以批處理更新方式打開記錄 ltOptimistic:樂觀鎖定,調用Post方法時才鎖定記錄 ltPessimistic: 悲觀鎖定,調用Edit方法時鎖定記錄 ltReadOnly: 只讀,當前操作不能修改數據 ltUnspecified: 鎖類型沒有確定 |
123 |
MarshalOptions |
確定數據集中的哪些記錄被寫回到服務器中。取值: moMarshalAll moMarshalModifiedOnly |
12 |
MasterFields |
設置主表的字段 |
|
MasterSource |
指定作為數據集主表的data source組件的名字 |
123 |
MaxRecords |
確定從結果集返回的行數 |
|
Modified |
標志着當前記錄是否已被修改 |
123 |
Name |
該組件在被其它組件引用時的名字 |
|
ObjectView |
指明字段在Fields porperty中是層次排列還是平鋪 |
13 |
ParamCheck |
設置該屬性可指定是否使用在CommandText屬性中設置的SQL語句中的”: Param”格式的參數出始化Parameters屬性 |
13 |
Parameters |
為存儲過程傳遞參數或存儲由存儲過程返回的數據 |
13 |
Prepared |
確定ADO組件在執行命令前是否保存一個編譯的版本 |
1 |
RDSConnection |
|
|
RecNo |
RecNo就是記錄在記錄集中的序號 |
|
RecordCount |
顯示與數據集相連的記錄的總數 |
2 |
ReadOnly |
表明一個數據表格在此應用程序中是否只讀 |
|
SessionName |
指定與數據集相連的Session的名字 |
3 |
SQL |
調用ADO查詢對象的ExecSQL或Open方法時,使用該屬性為該查詢對象提供需要的SQL語句 |
|
State |
數據集的狀態(運行時屬性)。取值: dsInactive: 數據集已關閉,不能訪問數據﹔ dsBrowse: 數據集已打開,可以瀏覽數據,但是不能進行修改﹔ dsEdit: 數據集處於編輯狀態,可以修改數據﹔ dsInsert: 此時可以插入一條新的記錄﹔ dsSetKey: 可以設置范圍和鍵值,也可以調用GotoKey函數,僅適用於TTable組件和TClientDataSet組件﹔ dsCalcFields: 正在處理OnCalcFields事件,不能修改非計算字段的值。 dsCurValue: 僅供系統內部使用 dsNewValue: 僅供系統內部使用 dsOldValue: 僅供系統內部使用 dsInternalCalc: 僅供系統內部使用 dsFilter: 正在進行數據過濾的操作 dsBlockRead: 當記錄集指針移動到下一個記錄時,數據感知組件不更新,事件不被觸發 dsOpening: 數據集正在打開,但沒有完成 |
1 |
StoreDefs |
指出數據庫表格的字段和索引與數據模塊一致﹐還是與窗體一致 |
2 |
TableDirect |
設置該屬性可指定是簡單地通過該數據表的名稱訪問該數據表(false,缺省),還是使用后台SQL語句訪問數據表(ture) |
2 |
TableName |
使用該屬性可指定用於ADO數據表組件操作的基礎數據表,TADOTable對象用於從中獲得數據或修改其中的值。 |
|
TableStyle |
指明該組件指向的數據表格的類型 |
123 |
Tag |
本地窗體整形變量標識號 |
|
UpdateMode |
決定BDE如何在SQL數據庫中查詢更新的記錄 |
|
UpdateObject |
指出在允許緩存更新時﹐用來更新只讀記錄的update object組件 |
|
|
|
|
|
|