記錄集遊標和鎖定類型
你可以用四種類型的遊標打開一個記錄集。遊標決定了你可以對一個記錄集進行什麼操作。遊標還決定了其他用戶可以對一個記錄集進行什麼樣的改變。下面列出了遊標的不同類型和限制:
■ adOpenFowardOnly。使用前向遊標,你只能在記錄集中向前移動。
■ adOpenKeyset。使用Keyset遊標,你可以在記錄集中向前或向後移動。如果另一個用戶刪除或改變了一條記錄,記錄集中將反映這個變化。但是,如果另一個用戶添加了一條新記錄,新記錄不會出現在記錄集中。
■ adOpenDynamic。使用動態遊標,你可以在記錄集中向前或向後移動。其他用戶造成的記錄的任何變化都將在記錄集中有所反映。
■ adOpenStatic。使用靜態遊標,你可以在記錄集中向前或向後移動。但是,靜態遊標不會對其他用戶造成的記錄變化有所反映。
在缺省情況下,當你打開一個記錄集時,將用前向遊標打開它。這意味着你只能用MoveNext方法在記錄集中向前移動。對記錄集的其它操作將不受支持。
前向遊標的好處是它比較快。無論何時,如果前向遊標可以實現你的要求,你就應該使用前向遊標。但是,如果你需要用功能更強的遊標打開記錄集,你可以使用如下的腳本:
<!--#INCLUDE VIRTUAL=”ADOVBS.inc”-->
<%
Set MyConn=Sever.CreateObject(“ADODB.Connection”)
Set RS=Sever.CreateObject(“ADODB.RecordSet”)
MyConn.Open “FILEDSN=d:/Program Files/
Common Files/ODBC/Data Sources/MyData.dsn
RS.Open “SELECT * FROM Mytable”,MyConn,adOpenDynamic
RS.Close
MyConn.Close
%>
要用一種特定的遊標打開記錄集,你必須顯式地創建這個記錄集。然後用該遊標類型打開它。要做到這一點,你首先要創建記錄集對象的一個實例。接下來,你要用Open方法,通過一個連接和一種遊標類型,打開這個記錄集。在這段腳本中,用連接對象MyConn和一個動態遊標打開了記錄集RS。
打開記錄集時,你也可以指定鎖定類型。鎖定類型決定了當不止一個用戶同時試圖改變一個記錄時,數據庫應如何處理。你可以指定下面的四種鎖定類型:
■ adLockReadOnly。指定你不能修改記錄集中的記錄。
■ adLockPessimistic。指定在編輯一個記錄時,立即鎖定它。
■ adLockOptimstic。指定只有調用記錄集的Update方法時,才鎖定記錄。
■ adLockBatchOptimstic。指定記錄只能成批地更新。
在缺省情況下,記錄集使用只讀鎖定。要指定不同的鎖定類型,你可以在打開記錄集時包含這些鎖定常量之一。這裏有一個例子:
<!--#INCLUDE VIRTUAL=”ADOVBS.inc”-->
<%
Set MyConn=Sever.CreateObject(“ADODB.Connection”)
Set RS=Sever.CreateObject(“ADODB.RecordSet”)
MyConn.Open “FILEDSN=d:/Program Files/
Common Files/ODBC/Data Sources/MyData.dsn
RS.Open “SELECT * FROM Mytable”,MyConn,adOpenDynamic,adLockPessimistic
RS.Close
MyConn.Close
%>
這個腳本與上一個基本相同,只是增加了鎖定類型。當打開記錄集RS時,將使用adLockPessimistic鎖定。這意味着這個記錄集中的記錄可以被修改。(下一集中將討論如何修改)
最後,打開一個記錄集時,你可以指定一個Options參數。Options參數標明用來打開記錄集的命令字符串的類型。告訴ADO被執行的字符串內容的有關信息有助於高效地執行該命令字符串。
你可以使用下面的常量作爲Options參數:
■ adCMDTable。被執行的字符串包含一個表的名字。
■ adCMDText。被執行的字符串包含一個命令文本。
■ adCMDStoredProc。被執行的字符串包含一個存儲過程名。
■ adCMDUnknown。不指定字符串的內容。(這是缺省值。)
在下面的腳本中,Options參數用來告訴ADO,命令字符串的內容是命令文本:
<!--#INCLUDE VIRTUAL=”ADOVBS.inc”-->
<%
Set MyConn=Sever.CreateObject(“ADODB.Connection”)
Set RS=Sever.CreateObject(“ADODB.RecordSet”)
MyConn.Open “FILEDSN=d:/Program Files/
Common Files/ODBC/Data Sources/MyData.dsn
RS.Open “SELECT * FROM Mytable”,MyConn,adOpenDynamic,adCMDText
RS.Close
MyConn.Close
%>
======================================================================
RS.OPEN SQL,CONN,A,B
參數A爲設定遊標的類型,其取值爲:
0 僅向前遊標,只能向前瀏覽記錄,不支持分頁、Recordset、BookMark
1 鍵集遊標,其他用戶對記錄說做的修改將反映到記錄集中,但其他用戶增加或刪除記錄不會反映到記錄集中。支持分頁、Recordset、BookMark
2 動態遊標功能最強,但耗資源也最多。用戶對記錄說做的修改,增加或刪除記錄都將反映到記錄集中。支持全功能瀏覽。
3 靜態遊標,只是數據的一個快照,用戶對記錄說做的修改,增加或刪除記錄都不會反映到記錄集中。支持向前或向後移動
參數B爲記錄集的鎖定類型,其取值爲:
1 鎖定類型,默認的,只讀,不能作任何修改
2 當編輯時立即鎖定記錄,最安全的方式
3 只有在調用Update方法時才鎖定記錄集,而在此前的其他操作仍可對當前記錄進行更改、插入和刪除等
4 當編輯時記錄不會被鎖定,而更改、插入和刪除是在批處理方式下完成的