當我單擊表單上的按鈕時,我想遍歷查詢中的每條記錄。表單的記錄源是查詢。我見過典型的記錄集回圈,但有什么理由使用我!和 DoCmd.GoToRecord 這樣的語法是不好的做法嗎?
Private Sub cmdRefresh_Click()
Dim RecordCount
DoCmd.GoToRecord , , acLast
RecordCount = Me.CurrentRecord
If RecordCount Then
DoCmd.GoToRecord , , acFirst
Do Until Me.CurrentRecord >= RecordCount
tbRefresh = "Searching for new RMDs... " & Int((Me.CurrentRecord / RecordCount) * 100) & "%"
Me![RMD_Met] = RMDCalculate
DoCmd.GoToRecord , , acNext
DoEvents
Loop
End If
Me.Requery
tbRefresh = "Last Update: " & Date
End Sub
uj5u.com熱心網友回復:
Access 中一如既往地有幾種實作任務的方法。
但是,資料處理的概念意味著您可以撰寫代碼,并讓它對資料進行操作。
那么,如果您花費時間和金錢來構建一些復雜的更新程式?如果您現在想以另一種形式使用該代碼,會發生什么?如果你四處移動表格,你就不能。
另外,如果您有幾條記錄 - 5-10,那么您當然可以為表單撰寫代碼以移動到下一條記錄。但這非常慢,因為必須伴隨表單顯示和更新。
那么,代替一個漂亮干凈且運行速度非常快的代碼?您的更新速度現在受限于您的螢屏更新速度!
更糟糕的是,當您移動到下一個記錄時,您通常可能在表單中具有一些特殊的邏輯 -(尤其是當前事件)。所以現在,您嘗試運行兩組代碼(運行您的簡單更新代碼),以及更多可能觸發的其他表單事件等。即使他們不這樣做,為什么要讓一個表單來完成所有這些緩慢的更新?
因此,您還注意到您經常看到代碼使用 recordSetClone。
例如這個:
Dim rstData as DAO.RecordSet
set rstData = me.RecordSetClone
rstData.MoveFirst
do while rstData.EOF = False
' process records
rstData.MoveNext
loop
所以,在上面,記錄集克隆很棒,因為您當前所在和查看的記錄不會改變。因此,recordSetClone 是相同的資料,但它允許您回圈、處理、移動和處理資料,但表單顯示不會改變也不會關心。
但是,如果您這樣做:
dim rstData as DAO.RecordSet
set rstData = me.RecordSet
如果您現在在上面使用 movenext 等?然后表格顯示將跟隨移動。
如前所述,這會慢 10,000 倍!!!
我的意思是,如果我想處理一些資料,不需要拖著一個巨大的表單沙袋來處理這樣的資料。
如前所述,您在大多數情況下也會獲得靈活性。
此類更新例程可以獨立于表單運行。
那么,有一些例行程式來處理發票或工資單之類的嗎?您甚至不需要打開特定的表單。所以這里的想法是撰寫獨立于表單的例程和代碼(當這樣做有意義時)。
因此,表單是供用戶使用并與用戶互動的。
記錄集處理是針對計算機代碼和您需要運行的程序,這種逐條記錄處理與某種形式的資料錄入幾乎沒有關系。所以不需要使用一些資料輸入表單來處理一堆記錄。
因此,如果用戶不會與每個記錄進行互動,那么您幾乎不想在記錄上使用表單移動。
我的意思是,你能想象你的銀行機器在處理你的交易時在螢屏上閃爍嗎?
用戶界面的事情是由表單完成的。
許多記錄的資料處理和行處理,甚至只是少數記錄不需要一個表單來“移動”,隨著時間的推移,這種設計往往真的開始崩潰,因為現在對這種更新例程的小代碼更改也有處理龐大的復雜表單事件模型。
所以,這樣的設計不是一個壞主意,它們真的很糟糕。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/326521.html
