三天學好ADO之第二天

來源:互聯網
上載者:User
ado 今天說一下Recordset 對象的屬性
1、CursorType 屬性
AdOpenForwardOnly: 僅向前遊標,預設值。除了只能在記錄中向前滾動外,與靜態資料指標相同。當只需要在記錄集中單向移動時,使用它可提高效能。(顧名思義,這種遊標只能向前移動。然而,由於這種遊標功能有限,將它用於系統資源時是非常有效。)
AdOpenKeyset: 鍵集遊標。儘管從您的記錄集不能訪問其他使用者刪除的記錄,但除無法查看其他使用者添加的記錄外,鍵集遊標與動態資料指標相似。仍然可以看見其他使用者更改的資料。(KeySet遊標允許你看見自它建立起其他使用者所做的修改,然而你卻不能看到其他使用者增加或刪除的記錄。)
AdOpenDynamic :動態資料指標。可以看見其他使用者所作的添加、更改和刪除。允許在記錄集中進行所有類型的移動,但不包括提供者不支援的書籤操作。(此類型的遊標功能強大同時也是耗費系統資源最多的遊標。Dynamic遊標可以看到他們儲存記錄集合的所有變化。使用Dynamic遊標的使用者可以看到其他使用者所做的編輯、增加、刪除。如果資料提供者允許這種類型的遊標,那麼它是通過每隔一段時間從資料來源重取資料來支援這種可視性的。毫無疑問這會需要很多的資源。 )
AdOpenStatic:靜態資料指標。可以用來尋找資料或產生報告的記錄集合的靜態副本。另外,對其他使用者所作的添加、更改或刪除不可見。(Static類遊標只是資料的一幅快照。這就是說,它無法看到自它建立以後其他使用者對RecordSet所做的修改。採用這類遊標你可以向前和向後航行。由於其功能簡單,資源的需求比Dynamic要小! )
需要注意的是:一旦開啟RecordSet,你就無法改變CursorType屬性。但是,如果你首先關閉RecordSet,改變CursorType屬性,然後重新開啟RecordSet,那麼你仍可以有效地改變遊標的類型!

2、LockType 屬性
在任何同時可被多使用者修改的資料庫應用程式中,你必須處理可能發生的多個使用者同時對同一條記錄進行操作時的情況。當這種情況出現時,資料的完整性就會受到威脅,這是因為一個使用者可能會在不自覺地在儲存自己所做的修改時覆蓋他人的修改。到時候你會覺得自己好象是沒有做事。為了處理這種情況。ADO允許你在對RecordSet對象進行更新時決定並發事件控制的類型,當一個使用者編輯時,如何由他對記錄進行鎖定。這就是由LockType屬性所決定的。這個屬性有四個值:
adLockReadonly:預設值,唯讀。無法更改資料。(這是RecodSet的預設值,如果你把鎖定的方式設為該值,那麼你將不能更新 Recordset。)
adLockPessimistic:保守式記錄鎖定(逐條)。提供者執行必要的操作確保成功編輯記錄,通常採用編輯時立即鎖定資料來源的記錄的方式。(如果設定為此類鎖定,記錄被鎖定,且只有在編輯開始到將記錄更新的提交給資料提供者這段時間內進行編輯的使用者才可以訪問! )
adLockOptimistic:開放式記錄鎖定(逐條)。提供者使用開放式鎖定,只在調用 Update 方法時鎖定記錄。(只有在將資料提交給資料提供者的那一瞬間才把記錄鎖定。)
adlockBatchOptimistic:開放式批更新。用於與立即更新模式相反的批更新模式。(設定為這種類型的鎖定製式將被稱為批次更新模式的RecordSet。 可以加快更新RecordSet修改資料的速度,但因為同時更新多個記錄,它也會惡化與並發訪問相關的問題! )

3、AbsolutePage 屬性
AbsolutePage屬性設定目前記錄的位置是位於哪一頁的頁數編號;使用PageSize屬性將Recordset對象分割為邏輯上的頁數,每一頁的記錄數為PageSize(除了最後一頁可能會有少於PageSize的記錄數)。這裡必須注意並不是所有的資料提供者都支援此項屬性,因此使用時要小心。
與AbsolutePosition屬性相同,AbsolutePage屬性是以1為起始的,若目前記錄為Recordset的第一行記錄,AbsolutePage為1。可以設定AbsolutePage屬性,以移動到一個指定頁的第一行記錄位置。
4、AbsolutePosition屬性
若您需要確定目前指標在RecordSet中的位置,您可以用AbsolutePosition屬性。
AbsolutePosition屬性的數值為目前指標相對於第一筆的位置,由1算起,即第一筆的AbsolutePosition為1。
注意,在存取RecordSet時,無法保證RecordSet每次都以同樣的順序出現。
若要啟用AbsolutePosition,必須先設定為使用使用者端cursor(指標):rs.CursorLocation=3

5、PageCount屬性
使用PageCount屬性,決定Recordset對象包括多少“頁”的資料。這裡的“頁”是資料記錄的集合,大小等於PageSize屬性的設定,即使最後一頁的記錄數比PageSize的值少,最後一頁也算是PageCount的一頁。必須注意也並不是所有的資料提供者都支援此項屬性。

6、PageSize屬性
PageSize屬性是決定ADO存取資料庫時如何分頁顯示的關鍵,使用它就可以決定多少記錄組成一個邏輯上的“一頁”。設定並建立一個頁的大小,從而允許使用AbsolutePage屬性移到其它邏輯頁的第一條記錄。PageSize屬效能隨時被設定。

7、RecordCount屬性
這也是一個非常常用和重要的屬性,我們常用RecordCount屬性來找出一個Recordset對象包括多少條記錄。使用 RecordCount 屬性可確定Recordset 對象中記錄的數目。ADO 無法確定記錄數時,或者如果提供者或遊標類型不支援 RecordCount,則該屬性返回 –1。讀已關閉的 Recordset 上的 RecordCount 屬性將產生錯誤。Recordset 對象的遊標類型會影響是否能夠確定記錄的數目。對僅向前遊標,RecordCount 屬性將返回 -1,對靜態或鍵集遊標返回實際計數,對動態資料指標取決於資料來源返回 -1 或實際計數。

8、BOF與EOF屬性
通常我們在ASP程式中編寫代碼來檢驗BOF與EOF屬性,從而得知目前指標所指向的RecordSet的位置,使用BOF與EOF屬性,可以得知一個Recordset對象是否包含有記錄或者得知移動記錄行是否已經超出該Recordset對象的範圍。
若目前記錄的位置是在一個Recordset對象第一行記錄之前時,BOF屬性返回true,反之則返回false。
若目前記錄的位置是在一個Recordset對象最後一行記錄之後時,EOF屬性返回true,反之則返回false。
(BOF與EOF都為True表示在RecordSet裡沒有任何記錄。)

9、Filter 屬性
為 Recordset 中的資料指定篩選條件,使用 Filter 屬性可選擇性地屏蔽 Recordset 對象中的記錄,已篩選的 Recordset 將成為當前遊標。

這將影響基於當前遊標傳回值的其他屬性,如 AbsolutePosition、AbsolutePage、RecordCount 和 PageCount,因為將 Filter 屬性設定為特

定值可將目前記錄移動到滿足新值的第一個記錄。
這屬性我認為相當有用處,有的時候我們開啟了Recordset進行了某些判斷以後我們還想過濾記錄也就是重新調整 sql 語句,難道我們關閉Recordset再用新的SQL語句開啟?不是,我們用Filter屬性進行過濾,比如說
rs.open exec,conn,1,1
if .... then rs.filter="name='xxx'"
而不是
rs.open exec,conn,1,1
if ... then
rs.close
exec=exec&" where name='xxx'"
rs.open exec,conn,1,1
end if
實際上再很多地方不得不用到Filter,在以後的ASP技巧中會說到,大家也可以想一下。
明天繼續說Recordset對象的方法。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。