【问题标题】:Connection String not remembering Password when creating a table创建表时连接字符串不记得密码
【发布时间】:2018-07-02 15:56:43
【问题描述】:

我有一个允许用户运行报告的 Excel 电子表格。打开电子表格后,会运行一个宏,提示用户输入用户名和密码以创建连接字符串。 (此信息仅存储在该 Excel 实例中,并在文件关闭时丢失)

以下代码允许用户使用打开电子表格时创建的信息运行报表。这可以在不提示输入用户名或密码的情况下反复使用。

With ActiveWorkbook.Connections("Custom_Query").ODBCConnection
    .BackgroundQuery = True
     Debug.Print strsql
    .CommandText = SplitMeUp(strsql)

    End With

    ActiveWorkbook.Connections("Custom_Query").Refresh

但是,我想创建一个表。当我修改代码以创建表格时,系统会提示用户再次输入密码,即使他们在打开电子表格时已经输入了密码。另外我必须在下面的代码中使用ActiveWorkbook.Connections("Custom_Query").ODBCConnection.Connection。如果我使用原始代码中的ActiveWorkbook.Connections("Custom_Query").ODBCConnection,VBA 会出错。

With ActiveSheet.QueryTables.Add(Connection:=ActiveWorkbook.Connections("Custom_Query").ODBCConnection.Connection, _
        Destination:=Range("a9"), Sql:=SplitMeUp(strsql))
        .Refresh

如何引用打开文件时创建的连接字符串,以免提示用户再次重新输入密码?

【问题讨论】:

  • 当我使用 VBA 创建表时出现,它正在创建一个新连接,而不是使用以前建立的连接,这是它应该做的。

标签: sql excel database-connection vba


【解决方案1】:

发生的情况是您正在运行连接两次。这段代码中的第一个

With ActiveWorkbook.Connections("Custom_Query").ODBCConnection
    .BackgroundQuery = True
    Debug.Print strsql
    .CommandText = SplitMeUp(strsql)

End With

ActiveWorkbook.Connections("Custom_Query").Refresh

然后你通过调用该方法再次运行它

With ActiveSheet.QueryTables.Add(Connection:=ActiveWorkbook.Connections("Custom_Query").ODBCConnection.Connection, _
    Destination:=Range("a9"), Sql:=SplitMeUp(strsql))
    .Refresh

您要做的是将连接分配给全局对象。没有看到您的所有代码,我最好的猜测是执行以下操作:

在模块顶部声明一个连接对象Public dbConnection as ADODB.Connection。在您的启动例程中,您需要初始化它Set dbConnection = new ADODB.Connection,然后打开它

With dbConnection
    .Provider = "Microsoft.Jet.OLEDB.4.0"  'You'll need to use the correct Provider
    ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;Extended Properties=Excel 8.0;" 'See the link for more info on connection string
   .Open
End With

这是一个Connection String link,因为我不记得它们了。

然后您可以运行引用 dbConnection 的命令,而不是重新运行连接方法,即 ActiveWorkbook.Connections("Custom_Query").ODBCConnection

就个人而言,我创建了一个 DAL 模块来处理所有数据库交互或一个 dbClass 来处理数据操作。

【讨论】:

  • 谢谢,我会试试的。另外,我并不是说我运行了两次代码。我的意思是我交换了我共享的第一个代码并放在创建表的修改后的代码中,所以我只运行一次。
猜你喜欢
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多