美好的一天。我有一个问题,我似乎无法解决。我正在研究一个excel程序,它从MS Access 2010数据库中检索数据并更新它。我使用ADODB.Connection连接数据库,文件(access.accdb)驻留在文件服务器中。当应用程序首次启动时,它使用form1从用户获取登录详细信息,并检查db中是否存在用户ID。此功能驻留在一个模块内,工作正常。当我尝试从另一个用户表单(form2)中的sub打开同一个文件时,我一直收到一个错误,指出找不到该文件。我使用与模块中使用的完全相同的路径字符串,这次只是在用户表单中使用它。以下是Module2中的代码:
Dim con As Object
Dim rs As Object
Dim path As String
path = "path.accdb"
Set con = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
with con
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source = " & path & "; Jet OLEDB:Database Password = pwd"
.Open
这很好用。 我只在用户表单中使用相同的内容而没有记录集对象。我不是从表单中检索数据,而是更新数据库。该表单仅用于数据捕获。
任何帮助将不胜感激。感谢。
这是我在form1中使用的代码:
Dim conn As Object
Dim strPath As String
strPath = "path.accdb" 'same as the path I used from within Module2
Set conn = CreateObject("ADODB.Connection")
with conn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source = " & strPath & "; Jet OLEDB:Database Password = pwd"
.Open 'this is where I get the error.
'Rest of code
错误讯息: 运行时错误'-2147467259(80004005)': 找不到文件'path.accdb'
我检查了路径并且它是正确的。我检查过遗失的参考文献。我还必须提到数据库文件位于我有权访问的公司文件夹上的文件夹中。
答案 0 :(得分:0)
简单的语法问题:
您声明strPath
:
Dim strPath As String
strPath = "path.accdb" 'same as the path I used from within Module2
然后你改为呼叫Path
:
.ConnectionString = "Data Source = " & path & "; Jet OLEDB:Database Password = pwd"
当我们切换变量的拼写时,我们所有人都会遇到这种情况:)
** 编辑 **
好的......让我们试试不同的东西......
为什么不将数据库只打开一次到全局变量中?
也许在子表单中第二次打开它会与您与数据库的初始连接发生冲突。
特别是因为您没有向我们展示关闭连接的代码。
您的真实代码中有很多线索,您没有向我们展示。如果制作全局变量不起作用,您可能需要向我们展示您的真实代码,只更改敏感信息。