【发布时间】:2015-10-26 10:36:26
【问题描述】:
我希望有人可以提供帮助。 我开发了一个 excel 包,它通过连接字符串“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\”更新 .mdb 访问数据库 数据库是共享的。 我有一个 Mitel 电话系统,它每 10 秒左右检查一次数据库以检查新条目。 数据库更新为
Dim q As New ADODB.Command
Dim cn As New ADODB.Connection
Dim SQL As String
SQL = "INSERT INTO tbl1LinkAuths (DateTimeAdded, DateEntered, AddedBy, REG, OrderNo,AccountNumber, CentreNumber, EmailAddress, Callback, "
SQL = SQL & "MakeText, "...............
cn.Open cnDB
q.ActiveConnection = cn
q.CommandText = SQL
'Excecute the above SQL to insert the new job record
q.Execute
Set rs = Nothing
Set cn = Nothing
Dim db As Access.Application
Set db = New Access.Application
db.Application.Visible = False
db.OpenCurrentDatabase "\\kffcis02\VWM Share\TelephonyDB.mdb", False
db.CloseCurrentDatabase
INSERT 语句可以正常更新数据库,但我发现我必须打开和关闭数据库才能使其及时更新。
这个包一次被大约 5 人大量使用,每分钟大约 2 个条目。
它出现错误“文件已在使用中”,尤其是在使用 excel 2013 时,很多时候。我认为这是因为我每次更新时都必须打开/关闭数据库。
有人知道我可以更快地更新数据库的不同方法吗? 我已经获得了每秒更新 ADODB 的实际数据库设置,并且数据库是共享的。
我现在很绝望,因为这个包已经上线了。我在测试期间没有遇到任何问题,因为使用它的人并不多,而且他们都没有使用 Office 2013。
【问题讨论】:
-
您不必打开和关闭数据库。但是,您应该确保关闭您打开的连接:
cn.close -
非常感谢。非常感激。我真的希望这很容易。Set cn = Nothing
-
我的意思是说,不会设置 cn-nothing 做同样的事情。我在没有打开/关闭数据库的情况下尝试过,但数据库更新速度不够快,当电话尝试读取新记录时,它看不到一条。
-
不,不会。从这里:msdn.microsoft.com/en-us/library/…“即使您使用的语言具有有效且可靠的垃圾收集,超出范围的打开 ADO 连接或 Recordset 对象的实例并不等同于隐式调用该对象的 Close 方法。您必须明确地关闭它。”
-
抱歉,经过仔细检查,我在代码中使用了 cn.close。所以这不是问题。我通过添加另一条记录再次尝试,除非再次打开和关闭数据库,否则它肯定不起作用。完全看不出是什么问题。