连接字符串在创建表时不记得密码

时间:2018-01-23 18:18:09

标签: sql excel excel-vba database-connection vba

我有一个允许用户运行报告的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

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

1 个答案:

答案 0 :(得分:0)

发生的事情是您正在运行连接两次。首先是这段代码

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来处理数据操作。