共用方式為


更多可以在資料錄集中移動的方法

下列四種方法可用於在 Recordset 中移動或捲動:MoveFirst、MoveLast、MoveNext 和 MovePrevious。 (上述的部分方法不適用於順向資料指標。)

MoveFirst 會將目前記錄位置變更為 Recordset 中的第一筆記錄。 MoveLast 會將目前記錄位置變更為 Recordset 中的最後一筆記錄。 若要使用 MoveFirstMoveLastRecordset 物件必須支援書籤或逆向資料指標移動;否則,方法呼叫將產生錯誤。

MoveNext 會將目前記錄位置往前移動一個位置。 如果您在呼叫 MoveNext 時位於最後一筆記錄上,則 EOF 將設定為 TrueMovePrevious 會將目前記錄位置往後移動一個位置。 如果您在呼叫 MovePrevious 時位於第一筆記錄,則 BOF 將設定為 True。 當使用這些方法時,請務必檢查 EOFBOF 屬性,如果您在 Recordset 任一端中移出,請務必將資料指標移回有效的目前記錄位置,如下所示:

. . .  
oRs.MoveNext  
If oRs.EOF Then oRs.MoveLast  
. . .   

或者,若為 MovePrevious 方法:

. . .   
oRs.MovePrevious  
If oRs.BOF Then oRs.MoveFirst  
. . .  

如果已篩選或排序 Recordset 並變更目前記錄的資料,則位置也可能會變更。 在這類情況下,MoveNext 方法可正常運作,但請注意,位置會從新的位置向前移動一筆記錄,而不是舊位置。 例如,變更目前記錄中的資料,使記錄移至排序的 Recordset 尾端,這表示呼叫 MoveNext 會導致 ADO 將目前記錄設定為 Recordset 中最後一筆記錄之後的位置 (EOF = True)。

在某些程度上,Recordset 物件的各種 Move 方法行為取決於 Recordset 內的資料。 新增至 Recordset 的新紀錄初始會以特定順序新增,該順序由資料來源所定義,而且可能會隱含或明去相依於新記錄中的資料。 例如,如果在填入 Recordset 的查詢內完成排序或聯結,新紀錄將會插入至 Recordset 內的適當位置。 如果在建立 Recordset 時未明確指定順序,資料來源實作中的變更可能會導致傳回的資料列順序不當變更。 此外,Recordset 的排序、篩選和編輯函式可能會影響順序,以及在資料錄集中可顯示的資料列。

因此,MoveNextMovePreviousMoveFirstMoveLastMove 皆會受相同 Recordset 上執行的其他作業影響。 ADO 將一律嘗試維護您目前的位置,直到您明確移動為止,但有時候,中間變更會讓您難以理解後續移動的結果。 例如,如果您呼叫 MoveFirst 以定位於已排序 Recordset 的第一個資料列且您將排序從遞增排序變更為遞減排序,則您仍會位於相同的資料列,但現在該資料列為 Recordset 中的最後一個資料列。 MoveFirst 會將您移至不同資料列 (新的第一個資料列)。

另一個範例是,如果您位於 Recordset 的中間特定資料列且您呼叫 DeleteMoveNext,則您現在會位於緊接已刪除記錄後面的記錄。 但呼叫 MovePrevious 會使您刪除記錄的前一筆記錄成為目前記錄,因為刪除的記錄不再計入 Recordset 的使用中成員資格。

儘管可變更目前記錄中的資料,針對相對於目前記錄的方法 (MovePreviousMoveNextMove),仍會難以定義所有提供者的一致移動語意。 例如,如果您要使用排序、篩選的 Recordset 且變更目前記錄中的記錄,使其位於所有其他記錄之前,但您變更的資料也不再符合篩選條件,無法確認 MoveNext 將您移至的位置。 最安全的結論是在編輯、新增或刪除記錄同時變更資料時,Recordset 內的相對移動較絕對移動的風險高 (例如使用 MoveFirstMoveLast)。 排序和篩選應根據主索引鍵或識別碼,因為此類型的值不應變更。