我沒有看到的一件事是ytdRS.Open命令。這可能是(問題的一部分)?
編輯:一些其他的東西:
- 你沒有使用相同的名字記錄在本塊(ytdRS),所以我不知道你的意圖是使用兩個不同的記錄(我假設它不是)
- 我不確定「值」是否打算作爲記錄集中字段的值(即
ytdRS!FieldName.Value
)或變量名稱。在這種情況下,它是一個變量名稱。
- 無論哪種方式,你幾乎低保你要通過具有
if
語句中的MoveNext的打一個死循環,因爲你的記錄不會移動到除非Value
下一個記錄等於1
- 我不得不改變CursorType和LockType來讓你的例子在測試表上工作。我不認爲adOpenStatic會允許你刪除記錄(我相信它會給你一個靜態的或不可更改的光標)。當您遇到更新數據的問題時,通常似乎是一種方法。您用於鎖定的adLockBatchOptimistic假定您以批處理模式運行;通常adLockOptimistic正常工作。如果需要,請參閱here以獲取關於刪除方法和批處理操作的更多信息。
下面的代碼適用於我;您將不得不爲您的特定應用程序進行編輯。尤其是,您需要編輯ytdRS.Source
,Open()
方法中的ActiveConnection:=
和ytdRs![Order ID].Value = 36
行,以符合您發佈的代碼塊中的「Value」語句。
希望這會有所幫助!
如果您有任何問題,請讓我知道。
Sub testme()
Dim ytdRs As ADODB.Recordset
Set ytdRs = New ADODB.Recordset
ytdRs.Source = "SELECT * FROM [Order Summary 2]"
ytdRs.CursorType = adOpenKeyset
ytdRs.LockType = adLockOptimistic
ytdRs.Open ActiveConnection:=CurrentProject.Connection
ytdRs.MoveFirst
Do Until ytdRs.EOF
If (ytdRs![Order ID].Value = 36) Then
ytdRs.Delete
End If
ytdRs.MoveNext
Loop
End Sub
如果您需要使用批處理模式...從Microsoft文檔:「如果您處於批量更新模式,記錄被標記爲從緩存中刪除,並且實際刪除發生在您調用UpdateBatch方法。「_因此,在刪除所有需要的記錄後,您需要調用ytdRs.UpdateBatch。同樣,如果您需要處於批處理模式,則僅爲_only_。 – transistor1