2011-06-15 72 views
2

我需要通過移動到記錄集中的下一條記錄來遍歷表單。訪問:移動到下一個記錄,直到EOF

我正在使用Form_Current事件循環。 我已經使用了幾個陳述,並有不同的結果。

這個有時會崩潰,並給出錯誤消息:「你不能去指定的記錄。」

DoCmd.GoToRecord , , acNext 

這一個只能達到72記錄和停止。

DoCmd.RunCommand acCmdRecordsGoToNext 

這一個只能達到129記錄和停止。

Me.Recordset.MoveNext 

試圖找到一條將轉到下一條記錄的指令,直到達到文件結尾。 我使用Access 2010(Access 2002 -2003文件格式mdb)作爲前端。 recordsource是一個SQL Server 2008鏈接的View。

+0

我正在使用窗體上的ActiveX控件並需要分別處理每條記錄。 – Rick 2011-06-15 16:01:59

回答

7

從當前記錄循環到最後:

While Me.CurrentRecord < Me.Recordset.RecordCount 
    ' ... do something to current record 
    ' ... 

    DoCmd.GoToRecord Record:=acNext 
Wend 

要檢查是否有可能要到下一條記錄:

If Me.CurrentRecord < Me.Recordset.RecordCount Then 
    ' ... 
End If 
3
If (Not IsNull(Me.id.Value)) Then 
DoCmd.GoToRecord , , acNext 
End If 

嗨,你 需要把這個形式啓動,並有一個ID字段名爲id ...

這種方式傳遞,直到它到達一個沒有ID(AKA新建一個)。 ..

2
Set rs = me.RecordsetClone 
rs.Bookmark = me.Bookmark 
Do 
    rs.movenext 
Loop until rs.eof 
+0

@David:我在那裏設置書籤,讓循環從當前記錄開始。他最初說他需要循環記錄,這並不意味着要移動表格本身。 – 2011-06-16 05:45:54

+0

嗯。關於RecordsetClone和表單的編輯/顯示緩衝區之間的區別的好點 - 也就是說,記錄集克隆書籤獨立於表單的記錄指針導航RecordsetClone。您可能想要在不更改顯示緩衝區的情況下進行編輯。所以,我刪除了我的評論。但是,如果需要ActiveX控件來編輯記錄,那肯定必須在表單的編輯/顯示緩衝區中完成,而不僅僅是在RecordsetClone中,因爲ActiveX控件只能在窗體的編輯緩衝區上運行(即顯示內容)。 – 2011-06-17 17:46:09

3

我在過去做到了這一點,並一直使用這樣的:

With Me.RecordsetClone 
    .MoveFirst 
    Do Until .EOF 
     If Me.Dirty Then 
     Me.Dirty = False 
     End If 
     .MoveNext 
     Me.Bookmark = .Bookmark 
    Loop 
    End With 

有些人會使用窗體的記錄,不需要設置書籤(即導航表單的Recordset自動導航窗體的編輯緩衝區,以便用戶立即看到移動),但我更喜歡RecordsetClone的間接方式。

-1

在窗體關閉事件中添加此代碼無論您添加新記錄還是刪除,它都會重新創建主鍵從1到最後一個記錄。此代碼不會干擾表的其他列。

Sub updatePrimaryKeysOnFormClose() 
    Dim i, rcount As Integer 
    'Declare some object variables 
    Dim dbLib As Database 
    Dim rsTable1 As Recordset 
    'Set dbLib to the current database (i.e. LIBRARY) 
    Set dbLib = CurrentDb 
    'Open a recordset object for the Table1 table 
    Set rsTable1 = dbLib.OpenRecordset("Table1") 
    rcount = rsTable1.RecordCount 
    '== Add New Record ============================ 
     For i = 1 To rcount 
       With rsTable1 
         rsTable1.Edit 
         rsTable1.Fields(0) = i 
         rsTable1.Update 
         '-- Go to Next Record --- 
         rsTable1.MoveNext 
      End With 
     Next 
     Set rsTable1 = rsTable1 
End Sub 
相關問題