好吧,我有一個宏進入並檢查表以確定用戶設置的應用程序的格式。如果此格式設置爲歐洲格式,那麼它將運行一個函數,該函數將通過表格並將日期格式從MM/dd/yyyy切換到dd/MM/yyyy。一切似乎設置正確,當它在美國格式化宏正確運行(它應該考慮它跳過這一行,如果格式不設置爲歐洲。)但是,每當格式設置爲歐洲,我得到這個運行時錯誤彈出:超出文件共享鎖計數,運行時錯誤3052
Run-Time error '3052':
File sharing lock count exceeded. Increase MaxLocksPerFile registry entry.
現在,我始終持謹慎態度,每當我得到規定的解決方法是修改將註冊表一些錯誤。更不用說,我不希望客戶只是爲了讓應用程序正常工作。然而,我只是試圖通過遵循these步驟來確定是否確實解決了問題。雖然當我修改默認的MaxLocksPerFile從它的默認值(9500)到(30,000)並再次運行宏時,我仍然以稍大的計數得到相同的錯誤。
在運行約12,000行後,我會得到錯誤,在改變後它會出現大約15,0000行。
這使我相信,在每行被修改後,我錯誤地關閉了我的更新。
這是我下面的代碼:
Public Function UKDateFormat() As Variant
Dim varPieces As Variant
Dim strNew As String
Dim varReturn As Variant
Dim Strsql As String
Dim db As dao.Database
Dim rstAlarmdetDateMod As dao.Recordset
Dim i As Long
Set db = CurrentDb()
Strsql = "select AlarmDate From AlarmdetDateMods;"
Set rstAlarmdetDateMod = db.OpenRecordset(Strsql, dbOpenDynaset)
If (rstAlarmdetDateMod.RecordCount > 0) Then
rstAlarmdetDateMod.MoveFirst
i = 0
While (rstAlarmdetDateMod.EOF) = False
i = i + 1
rstAlarmdetDateMod.Edit
rstAlarmdetDateMod![alarmdate] = CDate(Format(rstAlarmdetDateMod![alarmdate], "dd/MM/yyyy"))
rstAlarmdetDateMod.Update
rstAlarmdetDateMod.MoveNext
Wend
End If
rstAlarmdetDateMod.Close
db.Close
End Function
這是我的更新查詢:
UPDATE DISTINCTROW AlarmdetDateMods SET AlarmdetDateMods.AlarmDate = CDate(Format([AlarmDate],"dd/mm/yyyy"));
我想知道的是:正是我做錯了我的功能,它會導致這個錯誤來了,我怎樣才能糾正它,讓我不必進入和修改註冊表以獲得此功能的工作?
任何幫助或建議,非常感謝。 謝謝。
AlarmDate字段的數據類型是日期/時間還是文本? – HansUp
這是一個文本,我應該將其更改爲日期/時間? – James213
取決於你如何使用它我想。日期/時間值實際上是一種數字數據類型...無論您如何將其格式化以用於顯示,存儲的值都是相同的。我的直覺是爲日期/時間值使用日期/時間類型,因爲這樣可以更方便地進行日期操作。通過在窗體上設置綁定數據控件的格式屬性或在查詢中使用Format()函數,可以將值設置爲用於顯示目的的格式。您更改表中每個存儲的AlarmDate字符串的方法會嚇到我! – HansUp