我使用的MS Access 2010,在分裂前端/後端;網絡驅動器(WAN)與用戶(1.3百萬)這主要用於用戶信息,而不是插入重鏈和其他一些表中的一個表16+表,該表將接收高達2000+上插入每日。增加女士訪問插入性能
我已經能夠最優化讀/ SELECT查詢。儘管我的代碼的一部分如下所示。這可以用於每日最多2000次迭代。
Do Until rec.EOF
Dim vSomeId As Integer
vSomeId = rec!SomeId
'StrSQL = StrSQL & "INSERT INTO TransportationDetails (TransportationId, SomeId)" & _
'"VALUES(" & vTransportationId & ", " & vSomeId & ");"
StrSQL = "INSERT INTO TransportationDetails (TransportationId, SomeId)" & _
"VALUES(" & vTransportationId & ", " & vSomeId & ");"
DoCmd.SetWarnings False
DoCmd.RunSQL (StrSQL)
DoCmd.SetWarnings True
rec.Edit
rec!SomeBoolean = rec!SomeOtherBoolean
rec.Update
rec.MoveNext
Loop
我在這裏的目的,是要減少呼叫的數量的分貝插入所有的值。和MS ACCESS不支持在聲明中有超過1個查詢,因爲我在代碼的註釋部分嘗試過。我也認爲recordset upate方法耗費大量時間,並且如果任何人都可以提出更好的方法來更新記錄集。
是有什麼辦法可以欺騙訪問插入&更新在少命中通過SQL查詢,或任何其他訪問功能,DB。無論如何,或者優化,一段時間可能需要長達30分鐘。減少到至少2 - 5分鐘將是適當的。
P.S. 我不能切換到SQL Server,這是是不可能的。我知道它可以通過更好的方式完成通過SQL Server和Access不應該用於廣域網,但我沒有這個選項。
解決方案: 我與安德烈的和Jorge的解決方案去了。時間減少了17倍。儘管Albert的答案也是正確的,我發現我的主要問題是循環中的sql語句。將記錄集中的編輯更改爲sql並不會影響時間因素。
您應該使用插入選擇查詢。在你的'REC'查詢中加入你的插入查詢,比如'INSERT INTO TransportationDetails(TransportationId,SomeId),選擇「&vTransportationId&」,someId from rectable where ....'你可以稱這個插入爲一次 –
我有訪問查詢是「rec」記錄集的記錄集。我可以運行這個查詢的select語句嗎,或者我將不得不重寫這個sql語句中的查詢? –
如果你在另一個地方使用它,你將不得不爲插入創建一個新的插入,但如果它只存在於這個插入,你只需要一個作爲下面給出的答案根據我的消化。 –