在VBA中更改DSN

时间:2016-08-05 03:25:05

标签: vba

我正在尝试更改excel从JDE到SQL Server 2014的连接。如何/我应该做什么/更改以便连接到我的ODBC中的另一个DSN。

这是我的cnnStr代码:

uid = Range("P_Uid")
pwd = Range("P_Pwd")
dsn = Range("P_Dsn")
cnnstr = "ODBC;DSN=" + dsn + ";UID=" + uid + ";PWD=" + pwd

这是VBA的原始代码:

Dim strCnn As String
Dim i As Long
Dim y As Long
Dim j As Long
Dim z As Double
Dim w As Double
Dim Wks As DAO.Workspace
Dim Cnn As DAO.Connection
Dim Qdf As DAO.QueryDef
Dim Rec As DAO.Recordset
Dim date1, date2 As String
Dim x As Long
Dim w_price As Double
Dim w_amt As Double
Dim w_qty As Long
Dim Xref_Name(10) As Variant

Set Rec = Nothing
Set Wks = CreateWorkspace("WKSTmp", "", "", dbUseODBC)
Set Cnn = Wks.OpenConnection("", dbDriverNoPrompt, True, cnnstr)
Cnn.QueryTimeout = 1800
Set Rec = Cnn.OpenRecordset(SQL)
avarow = Worksheets("Ava").UsedRange.Rows.Count

每当我鼠标移动到cnnstr时,我都会看到这段代码:

cnnstr = "ODBC;DSN=JDE;UID=abc;PWD=abc" 

即使我尝试更改上面的连接和cnnStr,DSN仍然是JDE。 cnnstr的详细信息取自excel文件中的控制表。对控制单进行的更改证明是徒劳的。

请告知我如何更改dsn,以便从SQL Server 2014获取数据。

2 个答案:

答案 0 :(得分:0)

这是我用来连接SQL Server 2014的方法,

代码,

Sub ConnectSQLServer()

    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sConnString As String


    sConnString = "PROVIDER=SQLOLEDB;" & _
                               "Data Source=xxx.xxx.x.xxx,1433;" & _
                               "Initial Catalog=Staff_Manager;" & _
                               "User Id=sa;" & _
                               "Password=myPassword;"

                                Set conn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    conn.Open sConnString
    Set rs.ActiveConnection = conn
    Set rs.ActiveConnection = conn

            strSQL = "SELECT Your SQL Statement "
            rs.Open strSQL

如果这是你想要实现的目标,那么这将有效。

答案 1 :(得分:0)

假设您没有从原始代码中遗漏任何重要内容,cnnstr既不是本地声明的变量,也不是在该例程中分配的变量。您很可能拥有cnnstr()函数,或者是在CreateWorkspace()函数中设置的全局变量。

查找代码仍在何处将旧的连接字符串分配给cnnstr的最简单方法是使用“查找”在当前项目中搜索“ cnnstr =“。 (减去引号。)确保您正在搜索“当前项目”,以防分配在其他模块中进行。