Dim objRs as new RecordSet和Dim objRs as RecordSet的比較

來源:互聯網
上載者:User

     敲執行個體4遇到問題的思考,多一個new大有學問。

在記憶體中分配空間的時間和執行個體化的時間不同:

      對於Dim objRs as new RecordSet,當第一次使用objRs的時候,才在記憶體中分配空間和執行個體化。

    對於Dim objRs as RecordSet,聲明objRs為RecordSet類類型變數,和聲明普通變數一樣,此時已經在記憶體中分配儲存空間了。當使用Set objRs=new RecordSet時,才被執行個體化。

雖然這兩種定義方式,在分配空間和執行個體化的時間上不同,但是有時卻不影響結果;然而有時也會相差甚遠。

    結果相同的情況:

    通常在表單的通用聲明段Dim objRs as new RecordSet,這和在表單的通用聲明段用Dim objRs as RecordSet,並且在Form_Load事件中用Set objRs=new RecordSet,得到的記錄集以及之後對記錄集做相應的處理,結果都是相同的。

Dim objRs As New Recordset, objCn As New Connection, intPage As Integer

    

Dim objRs As Recordset
 
 
Private Sub Form_Load()'在表單事件中執行個體化objRsSet objRs=New Recordset


 

    當在Click事件中,操作objRs,結果都是相同的(假設objRs是已經開啟的遊標)

'使目前記錄的位置為下一條記錄的位置Private Sub cmdNext_Click()    objRs.MoveNext  If objRs.EOF Then objRs.MoveLastEnd Sub

結果不同的情況:

當Set objRs=new RecordSet這條語句放在允許被重複調用的過程中時,結果就會相差甚遠。

 Dim objDataSource As New Recordset

定義在表單各事件程序中使用的公用變數

 

Set objRs=new RecordSet出現在下面這個過程中,這個過程作用是把objRs(假設objRs是開啟的記錄集)的當前頁寫入objDataSource這個對象中,以便在DataGrid中顯示。

Public Sub ShowData(ByVal intPage As Integer)    '實現分頁顯示記錄功能    Dim intPageCount As Integer, intRecord As Integer    Dim objDataSource As New Recordset    '建立一個局部Recordset對象儲存objRs目前記錄頁資料    For intRecord = 0 To objRs.Fields.Count - 1        objDataSource.Fields.Append objRs.Fields(intRecord).Name, _                                    adVarChar, _                                    objRs.Fields(intRecord).DefinedSize    Next    objDataSource.Open                  '開啟局部Recordset對象    objRs.PageSize = Val(txtPageSize)   '重新設定objRs每頁顯示的記錄條數    objRs.AbsolutePage = intPage        '重新設定objRs的目前記錄頁    For intRecord = 1 To objRs.PageSize '將objRs目前記錄頁中資料寫入objDataSource        objDataSource.AddNew        objDataSource!使用者名稱 = objRs!使用者名稱        objDataSource!口令 = objRs!口令        objDataSource!身份 = objRs!身份        objRs.MoveNext        If objRs.EOF Then Exit For    Next    Set DataGrid1.DataSource = objDataSource '將objDataSource設定為資料格的資料來源    txtPageMsg = intPage & "/" & objRs.PageCount '重新整理目前記錄頁資訊End Sub

 

 每執行一次這個過程,Set objRs=new RecordSet就產生一個對象,當再次執行這個過程時,又會新產生一個對象,並且把原有的對象覆蓋掉。如果把這條語句換成在表單通用聲明段的Dim objRs as new RecordSet,則第二次調用這個過程時,就出錯,因為始終用的是一個對象。

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.