【问题标题】:submit data from excel userform to password protected access database将数据从 excel 用户表单提交到受密码保护的访问数据库
【发布时间】:2017-03-21 20:33:32
【问题描述】:

我正在尝试将用户表单数据从 excel (2013) 提交到访问数据库。

没有密码,这段代码可以正常工作。

Private Sub Addoer_Click()
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim dbPath

dbPath = Sheet16.Range("K18").Value

Set cnn = New ADODB.Connection
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & dbPath

现在我正在尝试使用相同的方法将数据从 excel 发送到受密码保护的数据库(每个用户都有不同的密码)。在excel文件中,用户ID在Sheet16.Range("K17"),密码在Sheet16.Range("K19")

userid = Sheet16.Range("K17").Value
pw = Sheet16.Range("K19").Value

我将 cnn.open 行更改为关注

cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data source=" & dbPath, userid, pw, -1

我收到此错误:

错误 -2147217843(无法启动您的应用程序。工作组信息文件丢失或由其他用户独占打开。)

我把 cnn.open 行改成了这个

cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & dbPath, """ & userid & """, """ & pw & """, -1

我得到了这个错误

错误 -2147217843(不是有效的帐户名或密码)。

有没有人可以帮忙指出我哪里做错了?

【问题讨论】:

    标签: vba ms-access-2010 adodb


    【解决方案1】:

    您的第二次尝试不起作用,因为您将用户名作为"user" 传递,而用户名实际上是user

    关于您的第一次尝试,我在connectionstrings.com 找到了这个注释:

    注意! 报告称使用 Access 2010 - 2013 默认加密方案加密的数据库不适用于此连接字符串。在访问中;尝试选项并选择 2007 加密方法。那应该可以正常工作。

    另外,数据库是否由另一个连接/程序独占打开?如果您在 Access 中打开了数据库并且您可以设计表/查询,IIRC 这意味着您对数据库具有独占访问权限,并且没有其他连接可以连接到它。您是否在 Access 数据库所在的文件夹中看到了 .laccdb(或 .ldb)文件?

    参考资料:

    【讨论】:

    • adodb 连接语法要求用户 id 和密码以字符串形式写入。如果我将它定义为像上面那样的某个单元格的值,我不必在它周围加上'"'?
    • 是的,我可以在access数据库中设计表和查询。这是否意味着为了使代码有效,我必须将数据库设置为非独占打开?
    • @KZMN 不确定,但我想正如您所说,当它们是常规连接字符串的一部分时,您只需要用户名和密码周围的双引号;如果您将它们作为参数传递给conn.Open,那么您可能不需要它们。
    • @KZMN 为了使代码工作 -- 测试它。如果数据库当前未在 Access 中打开,代码是否有效?如果是这样,那就是问题所在。
    • 我已经检查了数据库的设置(文件>选项>客户端设置>高级>默认打开模式:共享。)但我仍然可以访问设计表/查询。此外,同一文件夹中没有 .laccdb(或 .ldb)文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多