qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          數據庫的命脈——記錄集

           數據庫編程中應用的最多、最復雜的對象就是記錄集,數據庫中的數據都是通過記錄集來輸送到用戶程序,也是通過記錄集將更新的數據返回數據庫。下面就來詳細說明一下記錄集:

            1、記錄集的屬性和方法

            (1)記錄集的常用屬性

            ● BOF屬性     當記錄集記錄指針指向第一條記錄時返回True

            ● EOF屬性     當記錄集記錄指針指向最后一條記錄時返回True

            ● AbsloutePosition屬性    返回當前記錄集記錄指針,第一條記錄為0,是只讀屬性。

            ● Bookmark屬性      返回或設置當前記錄集指針的書簽,是字符型可讀寫屬性。

            每一條記錄都有自己唯一的書簽,它與記錄在記錄集中的順序無關。將Bookmark屬性存放到變量中,后面可以通過將該變量賦值給Bookmark屬性,并返回到這個記錄。

            ● NoMatch屬性     當我們使用Find方法查詢時,如果未找到則返回True。

            ● Index屬性       在執行Seek操作時,需要給此屬性設置索引的名字,可以為了不同的需要隨時更換,如果沒有設置,Seek操作出錯。

            ● Filter屬性      過濾器,用于篩選符合指定條件的記錄。

            ● RecordCount屬性      返回記錄集中的記錄書。為了返回正確的記錄數,有時需要先移動到最后一個記錄,否則可能得不到正確的結果。

            ● Sort屬性      指定記錄集的排序方式

            (2)記錄集的常用方法(注:個別方法不能適用于每種類型的記錄集)

            1)移動記錄指針類方法

            ● MoveFirst,將記錄集指針移動到第一條記錄。

            ● MoveLast,將記錄集指針移動到最后一條記錄。

            ● MovePrevious,將記錄集指針移動到前一條記錄。

            ● MoveNext,將記錄集指針移動到下一條記錄。

            2)增加、刪除、修改類方法

            ● AddNew,想記錄及增加一條新紀錄

            ● Edit,對當前記錄進行編輯,修改完成后要用Update方法更新記錄。

            ● Update,如果增加或修改了記錄,必須用此方法更新。

            ● CancelUpdate,取消更新記錄,在使用了Edit或者AddNew方法后放棄修改。

            ● Delete,從記錄集中將當前記錄刪除。

            在刪除后常使用MoveNext方法移動指針,否則會出現無當前記錄的情況,比如:

          <SPAN style="FONT-SIZE: 18px">With Data1.Recordset
           .Delete
           .MoveNext
           If .EOF then .MoveLast
          End With</SPAN>

            3)查找類方法

            ● Seek,在記錄集中定位符合條件的特定記錄,只能對經過索引的字段進行此操作。

            它的語法如下:

            Recordset.Seekcomparison,key1,key2. . .key13

            其中的comparison可以是6中關系運算符中除了“<>”外的其他運算符,如果建立的是復合索引,用Seek方法的時候可以給出多個鍵值。例如,要查找學號為970222的記錄,可以采用下面操作:

          <SPAN style="FONT-SIZE: 18px">With rsStudent
           .Index=”XH”
           .Seek “=”,”970222”
           If .NoMatch Then MsgBox”數據未找到”
          End With
          </SPAN>

            ● FindFirst,在記錄集中查詢符合條件的第一條記錄

            ● FindLast,在記錄集中查詢符合條件的最后一條記錄

            ● FindPrevious,在記錄集中查詢符合條件的前一條記錄

            ● FindNext,在記錄集中查詢符合條件的下一條記錄

            例如,查找[XM]字段中第一個姓李的人的程序如下:

          <SPAN style="FONT-SIZE: 18px">Dim S As String
          With Data1.Recordset
           S=.Bookmark           ‘記錄當前位置
           .FindFirst “XM Like ‘李*’”   '查找姓李的人,用“XM=xx”可進行精確查找
           If .NoMatch then MsgBox “數據未找到”
                     .Bookmark=S           ‘如果沒找到,返回到原來的位置
           End If
          </SPAN><SPAN style="FONT-SIZE: 18px">End With
          </SPAN>

            4)其他方法

            ● Clone,克隆(建立一個復本)記錄集

            ● Close,關閉記錄集,不用的時候應該關閉,以釋放資源

            ● OpenRecordset,據本記錄集按指定條件生成一個新記錄集,如果要創建一個記錄集的子集,應該使用此方法。

            2、記錄集的使用舉例

            打開我們前面創建的數據庫,并寫一條記錄在里面,本例是直接給記錄賦值,完全可以設計一個界面,然后從上面的TextBox或者其他空間中取出值并賦值給記錄,因為界面設計不是本章的主題,所以從略,程序如下:

          <SPAN style="FONT-SIZE: 14px">            </SPAN><SPAN style="FONT-SIZE: 18px"> Dim db As Database  ‘數據庫對象
                       Dim rs As Recordset       ‘記錄集對象</SPAN>
          <SPAN style="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”
            End With
            rs.Update        ‘修改或者增加新紀錄后,必須更新數據庫才能保存
            rs.Close   ‘關閉記錄集
            db.Close   ‘關閉數據庫
          </SPAN>

            Recordset對象中所含的Fields集合包含了一個記錄的各個字段,Fields集合中沒有若干個Fields對象,Fields對象 的Value屬性代表了當前記錄的該字段的值,上例中并沒有寫成像Fields(“XH”).Value或者Fields(0).Value這種形式,是 因為Value屬性是對象的默認屬性,在編寫代碼時可以省略。對于基本類型的數據可以至今進行賦值,對于超長類型的數據,如歌曲、電影、圖片則需要用 Field對象的AppendChunk方法和GetChunk方法來進行處理。

            3、記錄集的種類

            Recordset對象有3中類型,即表(table)、動態集(dynaset)、快照(snapshot)。

            表類型的Recordset對象是指當前數據庫中的表在創建表類型的記錄集時數據庫引擎打開的表。后續的數據操作都是直接對表進行的。只能對單 個的表打開表類型的記錄集,而不能對連接或者聯合查詢打開表類型的記錄集。與其他類型的Recordset對象相比,表類型的搜索與排序速度最快。

            動態集類型的Recordset對象可以是本地的表,也可以使返回的行查詢結果。它實際上是對一個或者幾個表中的記錄的一些列引用。可用動態集 從多個表中提取和更新數據,其中包括連接的其他數據庫中的表。動態類型具有一種與眾不同的特點:不同數據庫的可更新連接。利用這種特性,可以對不同類型的 數據庫中的表進行可更新的連接查詢。動態集和他的基本表可以互相更新。如果動態集中的記錄發生改變,同樣的變化也將在基本表中反映出來。在打開記錄集的時 候,如果其他的用戶修改了基本表,那么動態集中也將反映出被修改過的記錄。動態集類型是最靈活的,也是功能最強的Recordset類型。

            快照類型的Recordset對象包含的數據是固定的,它反映了在產生快照的一瞬間數據庫的狀態。從Microsoft Jet數據源得到的快照是不可更新的,從開放數據庫互連(ODBC)數據源得到的某些快照是可以更新的,這取決于所有數據庫系統本身的能力。與動態集類型 和表類型的Recordset對象相比,快照的處理開銷較少。因此,它執行查詢和返回數據的速度更快,特別是在使用ODBC數據源時。快照類型保存了表中 所有記錄的完整復本,因此,如果記錄的個數很多,快照的性能將比動態集慢的多。

            使用什么記錄集,取決于需要完成的任務是要更改數據還是簡單地查看數據。例如,如果必須對數據進行排序或者使用索引,可以使用表。因為表類型的 Recordset對象是可以索引的,它定位數據的速度是最快的。如果希望能夠對查詢選定的一系列記錄進行更新,可以使用動態集。如果在特殊的情況下不能 使用表類型的記錄集,或者只需對記錄進行掃描,那么使用快照類型可能會快一些。




          posted on 2012-09-06 09:44 順其自然EVO 閱讀(369) 評論(0)  編輯  收藏 所屬分類: 數據庫

          <2012年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 武城县| 满城县| 炎陵县| 天柱县| 辰溪县| 丹东市| 汤阴县| 祁东县| 乌拉特后旗| 双峰县| 贵阳市| 南澳县| 焉耆| 徐闻县| 建水县| 大邑县| 连州市| 贺州市| 潍坊市| 铜陵市| 清徐县| 封丘县| 兰州市| 宝丰县| 兴隆县| 沅江市| 吉木萨尔县| 吴堡县| 广丰县| 赣榆县| 汕头市| 维西| 安图县| 高青县| 昆明市| 阿克苏市| 诸城市| 全州县| 沐川县| 洛宁县| 婺源县|