在没有 DSN 的情况下从 Teradata 在 Access 中创建链接 table?

Create a linked table in Access from Teradata without DSN?

连接到 Teradata

'Requires reference to ADO and ADOX  
Public adoCn As ADODB.Connection
Public adoCat As New ADOX.Catalog
Public adoTbl As New ADOX.Table

Function TD_Make_Linked_Table()

Dim varServer As String
Dim varDatabase As String
Dim varUser As String
Dim varPassword As String

varServer = "Test"
varDatabase = "Test_Test"
varUser = "Test_User"
varPassword = "Test_Password"

Set adoCn = New ADODB.Connection

'I have tried multiple connection strings

adoCn.ConnectionString = "PROVIDER=MSDASQL;DRIVER={Teradata};" & _
                         "DBCName=" & varServer & ";" & _
                         "DefaultDatabase=" & varDatabase & ";" & _
                         "UID=" & varUser & ";" & _
                         "PWD=" & varPassword & ";"

adoCn.Open

Set adoCat = New ADOX.Catalog
Set adoCat.ActiveConnection = adoCn
Set adoTbl = New ADOX.Table

adoTbl.ParentCatalog = adoCat
adoTbl.Name = "Test"

'I have tried multiple property combinations
'Causes error 3265 Item not found
'adoTbl.Properties("?") = adoCn
'adoTbl.Properties("Jet OLEDB:Link Datasource") = "Test"
'adoTbl.Properties("Jet OLEDB:Link Provider String") = 
'adoTbl.Properties("Jet OLEDB:Remote Table Name") = "LinkDatabaseTable"
'adoTbl.Properties("Jet OLEDB:Create Link") = True

'Causes 3251 provider is not capable of performing operation
'adoCat.Tables.Append adoTbl

adoCn.Close

   Set adoTbl = Nothing
   Set adoCat = Nothing
   Set adoCn = Nothing

End Function

我已验证连接正常。我可以通过打开连接并执行 SQL 来查询数据。

我无法在 Access 中使用 visual basic 为具有已创建连接的应用程序以编程方式创建链接 table。

有没有人能够从 Access 到 Teradata 成功创建链接的无 dsn table?

如果您有有效的 ODBC 连接字符串,那么您应该能够使用 DoCmd.TransferDatabase 创建链接 table。我手边没有 Teradata 服务器,但这适用于 SQL Server:

Dim connStr As String
connStr = _
        "DRIVER=ODBC Driver 11 for SQL Server;" & _
        "SERVER=(local)\SQLEXPRESS;" & _
        "DATABASE=myDb;" & _
        "Trusted_Connection=yes"
DoCmd.TransferDatabase _
        TransferType:=acLink, _
        DatabaseType:="ODBC Database", _
        DatabaseName:="ODBC;" & connStr, _
        ObjectType:=acTable, _
        Source:="dbo.projects", _
        Destination:="dbo_projects"

我终于找到了一个有效的连接字符串! :)

    Function adoTera()

        Dim oConn As ADODB.Connection
        Dim rs As ADODB.Recordset

        Set oConn = New ADODB.Connection
        Set rs = New ADODB.Recordset

        oConn.ConnectionString = "PROVIDER=MSDASQL;" & _
             "DRIVER={Teradata};" & _
             "DBCName=yourDBCName;" & _
             "DefaultDatabase=yourDBName;" & _
             "UID=yourUserName;" & _
             "PWD=yourPassword;"

        oConn.Open
        rs.Open "SELECT * FROM yourTable", oConn

        ThisWorkbook.Worksheets("Sheet1").Range("A:A").CopyFromRecordset rs
        rs.Close
        oConn.Close

        Set rs = Nothing
        Set con = Nothing

    End Function