資料庫程式設計中應用的最多、最複雜的物件就是記錄集,資料庫中的資料都是通過記錄集來輸送到使用者程式,也是通過記錄集將更新的資料返回資料庫。下面就來詳細說明一下記錄集:
1、記錄集的屬性和方法
(1)記錄集的常用屬性
每一條記錄都有自己唯一的書籤,它與記錄在記錄集中的順序無關。將bookmark屬性存放到變數中,後面可以通過將該變數賦值給bookmark屬性,並返回到這個記錄。
如果沒有設定,seek操作出錯。
否則可能得不到正確的結果。
(2)記錄集的常用方法(注:個別方法不能適用於每種型別的記錄集)
1)移動記錄指標類方法
2)增加、刪除、修改類方法
在刪除後常使用movenext方法移動指標,否則會出現無當前記錄的情況,比如:
[vb]view plain
copy
print?
"font-size: 18px">with data1.recordset
.delete
.movenext
if .eof then .movelast
endwith
with data1.recordset
.delete
.movenext
if .eof then .movelast
end with
3)查詢類方法
它的語法如下:
recordset.seekcomparison,key1,key2. . .key13
其中的comparison可以是6中關係運算子中除了「<>」外的其他運算子,如果建立的是復合索引,用seek方法的時候可以給出多個鍵值。例如,要查詢學號為970222的記錄,可以採用下面操作:
[vb]view plain
copy
print?
"font-size: 18px">with rsstudent
.index=」xh」
.seek 「=」,」970222」
if .nomatch then msgbox」資料未找到」
endwith
with rsstudent
.index=」xh」
.seek 「=」,」970222」
if .nomatch then msgbox」資料未找到」
end with
例如,查詢[xm]欄位中第乙個姓李的人的程式如下:
[vb]view plain
copy
print?
"font-size: 18px">dim s as
string
with data1.recordset
s=.bookmark 『記錄當前位置
.findfirst 「xm like 『李*』」 '查詢姓李的人,用「xm=xx」可進行精確查詢
if .nomatch then msgbox 「資料未找到」
.bookmark=s 『如果沒找到,返回到原來的位置
endif
"font-size: 18px">end
with
dim s as string
with data1.recordset
s=.bookmark 『記錄當前位置
.findfirst 「xm like 『李*』」 '查詢姓李的人,用「xm=xx」可進行精確查詢
if .nomatch then msgbox 「資料未找到」
.bookmark=s 『如果沒找到,返回到原來的位置
end if
end with
4)其他方法
2、記錄集的使用舉例
開啟我們前面建立的資料庫,並寫一條記錄在裡面,本例是直接給記錄賦值,完全可以設計乙個介面,然後從上面的textbox或者其他空間中取出值並賦值給記錄,因為介面設計不是本章的主題,所以從略,程式如下:
[vb]view plain
copy
print?
"font-size: 14px">
"font-size: 18px"> dim db as database 『資料庫物件
dim rs as recordset 『記錄集物件
dim db as database 『資料庫物件
dim rs as recordset 『記錄集物件
[vb]view plain
copy
print?
"font-size: 18px"> set db=dbengine.workspaces(0).opendatabase(「students.mdb」)
set rs=db.openrecordset(「students」,dbopentable) 『表的名字也叫students
rs.addnew 『增加一條新記錄,如果是修改原有記錄,則使用edit方法
with rs
.fields(「xh」)=clng(970111)
.fields(「xm」)=」張思強」
.fields(「xb」)=」男」
.fields(「born」)=」河北石家莊」
.fields(「birth」)=」1980-1-1」
endwith
rs.update 『修改或者增加新紀錄後,必須更新資料庫才能儲存
rs.close 『關閉記錄集
db.close 『關閉資料庫
set db=dbengine.workspaces(0).opendatabase(「students.mdb」)
set rs=db.openrecordset(「students」,dbopentable) 『表的名字也叫students
rs.addnew 『增加一條新記錄,如果是修改原有記錄,則使用edit方法
with rs
.fields(「xh」)=clng(970111)
.fields(「xm」)=」張思強」
.fields(「xb」)=」男」
.fields(「born」)=」河北石家莊」
.fields(「birth」)=」1980-1-1」
end with
rs.update 『修改或者增加新紀錄後,必須更新資料庫才能儲存
rs.close 『關閉記錄集
db.close 『關閉資料庫
3、 記錄集的種類
recordset物件有3中型別,即表(table)、動態集(dynaset)、快照(snapshot)。
表型別的recordset物件是指當前資料庫中的表在建立表型別的記錄集時資料庫引擎開啟的表。後續的資料操作都是直接對錶進行的。只能對單個的表開啟表型別的記錄集,而不能對連線或者聯合查詢開啟表型別的記錄集。與其他型別的recordset物件相比,表型別的搜尋與排序速度最快。
動態集型別的recordset物件可以是本地的表,也可以使返回的行查詢結果。它實際上是對乙個或者幾個表中的記錄的一些列引用。可用動態集從多個表中提取和更新資料,其中包括連線的其他資料庫中的表。動態型別具有一種與眾不同的特點:不同資料庫的可更新連線。利用這種特性,可以對不同型別的資料庫中的表進行可更新的連線查詢。動態集和他的基本表可以互相更新。如果動態集中的記錄發生改變,同樣的變化也將在基本表中反映出來。在開啟記錄集的時候,如果其他的使用者修改了基本表,那麼動態集中也將反映出被修改過的記錄。動態集型別是最靈活的,也是功能最強的recordset型別。
快照型別的recordset物件包含的資料是固定的,它反映了在產生快照的一瞬間資料庫的狀態。從microsoft jet資料來源得到的快照是不可更新的,從開放資料庫互連(odbc)資料來源得到的某些快照是可以更新的,這取決於所有資料庫系統本身的能力。與動態集型別和表型別的recordset物件相比,快照的處理開銷較少。因此,它執行查詢和返回資料的速度更快,特別是在使用odbc資料來源時。快照型別儲存了表中所有記錄的完整複本,因此,如果記錄的個數很多,快照的效能將比動態集慢的多。
使用什麼記錄集,取決於需要完成的任務是要更改資料還是簡單地檢視資料。例如,如果必須對資料進行排序或者使用索引,可以使用表。因為表型別的recordset物件是可以索引的,它定位資料的速度是最快的。如果希望能夠對查詢選定的一系列記錄進行更新,可以使用動態集。如果在特殊的情況下不能使用表型別的記錄集,或者只需對記錄進行掃瞄,那麼使用快照型別可能會快一些。
開啟資料庫 開啟資料庫,把記錄集的資料裝入陣列
今日例項 在資料庫中有如下的資料 我們要開啟這個資料庫,然後把內容先存到乙個陣列中,最後在工作表中體現出來。下面看我給出的 sub mynzupdaterecords 42 第42將 將資料記錄存入陣列的方案 dim cnado,rsado as object,fdsarr,arr dim strp...
VB資料庫記錄集查詢四種方法
在vb中進行資料庫記錄的查詢操作,必需根據開啟資料庫的方式來確定。以vb6 0為例,資料集物件有table dynaset snapshot三種,下面四種查詢方法分別適用於以上面不同的物件方式開啟的資料庫。1 用seek方法查詢。這種方法只使用於以opentable方式開啟的table型別的資料表,...
VB資料庫記錄集查詢四種方法
在vb中進行資料庫記錄的查詢操作,必需根據開啟資料庫的方式來確定。以vb6 0為例,資料集物件有table dynaset snapshot三種,下面四種查詢方法分別適用於以上面不同的物件方式開啟的資料庫。1 用seek方法查詢。這種方法只使用於以opentable方式開啟的table型別的資料表,...