【发布时间】:2012-02-13 02:11:16
【问题描述】:
好的,所以我有一个宏进入并检查表以确定用户设置的应用程序的格式。如果将此格式设置为欧洲格式,则它会运行一个函数,该函数将遍历一个表并将日期格式从 MM/dd/yyyy 交换为 dd/MM/yyyy。一切似乎都设置正确,当它在美国格式化时,宏运行正确(如果格式未设置为欧洲,它应该考虑跳过这一行。)但是,每当格式设置为欧洲时,我都会得到这个弹出的运行时错误:
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字段的数据类型是日期/时间还是文本?
-
这是一个文本,我应该把它改成日期/时间吗?
-
我想这取决于你如何使用它。日期/时间值实际上是一种数字数据类型......无论您出于显示目的如何格式化它,存储的值都是相同的。我的直觉是对日期/时间值使用日期/时间类型,因为这样更方便日期操作。通过在窗体上设置绑定数据控件的格式属性或在查询中使用 Format() 函数,可以对值进行格式化以用于显示目的。您更改表中每个存储的 AlarmDate 字符串的方法让我害怕!
-
你会建议怎么做?
-
在 FROM 子句中没有 JOIN,DISTINCTROW 没有任何用途(与 SELECT 本身相反)。