今天來說一下Recordset物件的一些方法。
1.AddNew 方法建立可更新Recordset 物件的新記錄。
recordset.AddNew FieldList, Values
FieldList 可選。新記錄中欄位的單一名稱、一組名稱或序號位置。
Values 可選。新記錄中欄位的單一或一組值。如果Fields 是數組,那麼Values 也必須是具有相同成員數的數組,否則會發生錯誤。欄位名稱的次序必須與每個陣列中的欄位值的次序相符。
我們一般是
rs.addnew
rs("xx")=xx
rs("xx")=xx
rs.update
需要注意的是在立即更新模式(呼叫Update 方法時提供者會立即將變更寫入基本資料來源)下,呼叫不帶參數的AddNew 方法可將EditMode 屬性設為adEditAdd。提供者將任何欄位值的變更快取在本機。呼叫Update 方法可將新記錄傳遞到資料庫並將EditMode 屬性重設為adEditNone。如果傳送了Fields 和Values 參數,ADO 則立即將新記錄傳遞到資料庫(無須呼叫Update),且EditMode 屬性值沒有改變(adEditNone)。
或許大家會問在ASP使用ADO的AddNew方法和直接使用「Insert into...」語句有和不同?那種方式比較好?答:ADO的AddNew方法只是將「Insert into 」語句封裝了起來,所以,當對大量資料進行操作的時候,直接使用SQL語句將會大大加快存取資料的速度,因為他減少了ADO的「翻譯”時間。
2、Delete 方法刪除目前記錄或記錄群組。
recordset.Delete AffectRecords
AffectRecords AffectEnum 值,確定Delete 方法所影響的記錄數目,該值可以是下列常數之一。
AdAffectCurrent 預設。僅刪除目前記錄。
AdAffectGroup 刪除滿足目前Filter 屬性設定的記錄。若要使用該選項,必須將Filter 屬性設為有效的預定義常數之一。
adAffectAll 刪除所有記錄。
adAffectAllChapters 刪除所有子集記錄。
使用立即更新模式將在資料庫中立即刪除,否則記錄將標記為從快取刪除,實際的刪除將在呼叫Update 方法時進行。
3、Update 方法保存對Recordset 物件的目前記錄所做的所有更改
recordset.Update Fields, Values
Fields 可選。變體型,代表單一名稱;或變體型數組,代表需要修改的欄位(一個或多個)名稱及序號位置。
Values 可選。變體型,代表單一值;或變體型數組,代表新記錄中字段(單一或多個)值。
如果希望取消對目前記錄所做的任何變更或放棄新新增的記錄,則必須呼叫CancelUpdate 方法。
4、CancelUpdate 方法
recordset.CancelUpdate
使用CancelUpdate 方法可取消目前記錄所做的任何變更或放棄新新增的記錄。在呼叫Update 方法後將無法撤銷目前記錄或新記錄所做的更改,如果在呼叫CancelUpdate 方法時新增記錄,則呼叫AddNew 之前的目前記錄將再次成為目前記錄。如果尚未變更目前記錄或新增記錄,呼叫CancelUpdate 方法將產生錯誤。
5.Find 方法搜尋Recordset 中符合指定標準的記錄。如果符合標準,則記錄集位置設定在找到的記錄上,否則位置將設定在記錄集的末端。
Find (criteria, SkipRows, searchDirection, start)
criteria 字串,包含指定用於搜尋的列名、比較運算子和值的語句。
SkipRows 可選,長整數值,其預設值為零,它指定目前行或start 書籤的位移以開始搜尋。
searchDirection 可選的SearchDirectionEnum 值,指定搜尋應從目前行或下一個有效行開始。其值可為adSearchForward 或
adSearchBackward。搜尋是在記錄集的開始還是末尾結束由searchDirection 值決定。
start 可選,變體型書籤,用作搜尋的開始位置。
criteria 「比較運算子」可以是「>」(大於)、「<」(小於)、「=」(等於)、「>=」(大於或等於)、「<=」(小於或等於)、「 <>”
(不等於)或“like”(模式匹配)。 criteria 中的值可以是字串、浮點數或日期。字串值以單引號分界(如“state = 'WA'”)。
日期值以「#」(數字記號)分界(如「start_date > #7/22/97#」)。
需要注意的是find是不支援多字段。但是可以用filter實作。 "name='abc'"AND "city='sh'" 是不允許的
6、Move 方法移動Recordset 物件中目前記錄的位置
recordset.Move NumRecords, Start
NumRecords 帶符號長整數表達式,指定目前記錄位置移動的記錄數。
Start 可選,字串或變體型,用於計算書籤。也可為下列數值之一:
AdBookmarkCurrent 預設。從目前記錄開始。
AdBookmarkFirst 從首紀錄開始。
AdBookmarkLast 從尾記錄開始。
需要注意的是:
(1)如果NumRecords 參數大於零,則目前記錄位置將向前移動(向記錄集的末尾)。如果NumRecords 小於零,則目前記錄位置向後移動(向記錄集的開始)。
(2)從空的Recordset 物件呼叫Move 方法將產生錯誤。
(3)如果Move 呼叫將目前記錄位置移至首記錄之前,則ADO 將目前記錄放置在記錄集(BOF 為True)的首記錄之前。在BOF 屬性已經為True 時試圖向後移動將產生錯誤;如果Move 呼叫將當前記錄位置移至尾記錄之後,則ADO 將當前記錄放置在記錄集(EOF 為True)的尾記錄之後。在EOF 屬性已經為True 時試圖向前移動將產生錯誤。
7、MoveFirst、MoveLast、MoveNext 和MovePrevious 方法在指定Recordset 物件中移動到第一個、最後一個、下一個或前一個記錄並使該記錄成為目前記錄。
recordset.{MoveFirst | MoveLast | MoveNext | MovePrevious}
需要注意的是:
(1)使用MoveNext 方法將目前記錄向前移動一個記錄(向Recordset 的底部)。如果最後一個記錄是目前記錄並且呼叫MoveNext 方法,則ADO 將目前記錄設定到Recordset (EOF 為True)的尾記錄之後。當EOF 屬性已經為True 時試圖向前移動將產生錯誤。
(2)使用MovePrevious 方法將目前記錄位置向後移動一個記錄(向記錄集的頂部)。 Recordset 物件必須支援向後遊標移動;否則方法呼叫將產生錯誤。如果首記錄是目前記錄並且呼叫MovePrevious 方法,則ADO 將目前記錄設定在Recordset (BOF 為True)的首記錄之前。而BOF 屬性為True 時向後移動將產生誤差。
8.Clone 方法建立與現有Recordset 物件相同的複製Recordset 物件。可選擇指定該副本為唯讀。
Set rstDuplicate = rstOriginal.Clone
rstDuplicate 物件變量,標識正在建立的複製Recordset 物件。
rstOriginal 物件變量,標識要被複製的Recordset 物件。
使用Clone 方法可建立多個Recordset 物件副本,這對於希望在給定的記錄組中保留多個目前記錄十分有用。使用Clone 方法比使用與初始定義相同的定義來建立和開啟新Recordset 物件要有效得多。
也就是說
rs.open exec,conn,1,1
rs2.open exec,conn,1,1
應該這麼改寫
rs.open exec,conn,1,1
rs2=rs.clone
要注意的是:
(1)新建立副本的目前記錄將設定為首記錄。
(2)關閉原始Recordset 時並不關閉它的副本,而關閉某個副本也將不關閉原始Recordset 或任何其他副本。
9、Close 方法關閉開啟的物件及任何相關物件。
object.Close
需要注意的是:
(1)使用Close 方法可關閉Recordset 物件以便釋放所有關聯的系統資源。關閉物件並非將它從記憶體中刪除,可以更改它的屬性設定並且在之後
再次開啟。若要將物件從記憶體中完全刪除,可將物件變數設為Nothing。
(2)如果正在立即更新模式下進行編輯,呼叫Close 方法將產生錯誤,應先呼叫Update 或CancelUpdate 方法。
10、Open 方法,為什麼最後要說這個,因為前面的各項屬性方法沒有弄清楚,我們是不會理解CursorType參數的
recordset.Open Source, ActiveConnection, CursorType, LockType, Options
Recordset物件可以透過Source屬性來連接Command物件。 Source參數可以是一個Command物件名稱、一段SQL指令、一個指定的資料表名稱或一個Stored Procedure。若要省略這個參數,系統則採用Recordset物件的Source屬性。 ActiveConnection
Recordset物件可以透過ActiveConnection屬性來連接Connection物件。這裡的ActiveConnection可以是一個Connection物件或是一串包含
資料庫
連線資訊(ConnectionString)的字串參數。CursorType
Recordset物件Open方法的CursorType參數表示將以什麼樣的遊標類型啟動數據,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及ad
OpenStatic,分述如下:
----------------- --------------------------------------------
常數常數值說明
- -------------------------------------------------- ----------
adOpenForwardOnly 0 預設值,啟動一個只能向前移動的遊標(Forward Only)。
adOpenKeyset 1 啟動一個Keyset類型的遊標。
adOpenDynamic 2 啟動一個Dynamic類型的遊標。
adOpenStatic 3 啟動一個Static類型的遊標。
-------------------------------------------------- -----------
以上幾個遊標類型將直接影響Recordset物件所有的屬性和方法,以下列表說明他們之間的差異。
Recordset屬性adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic
AbsolutePage 不支援不支援可讀寫可讀寫
AbsolutePosition 不支援不支援可讀寫可讀寫
BOF 只讀只讀唯讀只讀
CursorType 可讀寫可讀寫可讀寫EOF 只讀只讀唯讀只讀可讀寫可讀寫可讀寫可讀寫
EOF 只讀只讀可
讀寫讀只讀
Filter 可讀寫可讀寫可讀寫可讀寫
LockType 可讀寫可讀寫可讀寫可讀寫可讀寫可讀只讀可讀寫可讀寫
可讀寫可讀寫
可讀
寫
RecordCount 不支援不支援只讀只讀
AddNew 支援支援支援支援
CancelBatch 支援支援支援
CancelUpdate 支援支援支援
支援Close 支援支援支援
Delete 支援支援支援
Move 不支援支援支援
MoveFirst 支援支援支援
MoveLast 不支援支援支援支援
MoveNext 支援支援支援支援
MovePrevious 不支援支援支援支援
Open 支援支援支援
Update 支援支援支援
UpdateBatch 支援支援支援
---------------------- ----------------------------------------
Recordset物件Open方法的LockType參數表示要採用的Lock類型,如果忽略這個參數,那麼系統會以Recordset物件的LockType屬性為預設值。 LockType參數包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:
常數常數值說明
------------------------------ --------------------------------
adLockReadOnly 1 預設值,Recordset物件以唯讀方式啟動,無法運作AddNew、 Update及Delete等方法
adLockPrssimistic 2 當資料來源正在更新時,系統會暫時鎖定其他使用者的動作,以保持資料一致性。
adLockOptimistic 3 當資料來源正在更新時,系統並不會鎖住其他使用者的動作,其他使用者可以對資料進行增、刪、改的操作。
adLockBatchOptimistic 4 當資料來源正在更新時,其他使用者必須將CursorLocation屬性改為adUdeClientBatch才能對資料進行增、刪、改的操作。
需要注意的是:
如果資料來源沒有傳回記錄,那麼提供者將BOF 和EOF 屬性同時設定為True,並且不定義目前記錄位置。如果遊標類型允許,仍然可以將新資料新增至該空Recordset 物件。