【问题标题】:ADODB connection to .mdb file from excel 2013从 excel 2013 到 .mdb 文件的 ADODB 连接
【发布时间】: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。所以这不是问题。我通过添加另一条记录再次尝试,除非再次打开和关闭数据库,否则它肯定不起作用。完全看不出是什么问题。

标签: excel ms-access adodb vba


【解决方案1】:

错误的驱动程序:假设引用了 activex 数据对象...

dim conn as  adodb.connection    'module level variable
const DBNAME = "your name here"
const DBLOC = "Your dir here"

 Sub UpdateDb()

dim sql as string
openconnectionroutine
sql = "INSERT INTO tbl1LinkAuths (DateTimeAdded, DateEntered, AddedBy, "
'etc
'if you want to check it worked : otherwise ditch numrecs
 dim numrecs as long
conn.execute sql, numrecs
msgbox "You added " & numrecs & " records",vbokonly,"Done"

end sub

sub Openconnectionroutine() 
if conn is nothing then set conn = new adodb.connection
if conn.connectionstring = "" then
    conn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};" & _
                 "Dbq=" & DBNAME & ";" & _
                 "DefaultDir=" & DBLOC & ";" & _
                 "Uid=Admin;Pwd=;"
 end if
 if conn.state = adstateopen then
 else                
   conn.Open
 end if

End sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多