2015-02-07 94 views
2

我一直在嘗試使用vba代碼從Excel連接到Teradata,但出現下面提到的錯誤: Teradata Server can不能通過網絡傳播。我已經能夠成功連接Teradata SQL助手,並且還成功連接了Teradata服務器(我在我的筆記本電腦上運行的Teradata快速版)。我還成功地從Excel數據連接嚮導和Microsoft查詢連接到Teradata。我也關掉了防火牆,並檢查瞭如果我能夠連接但仍然沒有運氣連接。請讓我知道我出錯的地方。無法使用VBA代碼從excel連接到Teradata - 通過網絡無法連接到Teradata服務器

請找到下面的代碼:

Private Sub CommandButton1_Click() 
Dim conn As ADODB.Connection 
Dim rec1 As ADODB.Recordset 
Dim thisSql As String 

Set conn = New ADODB.Connection 

conn.Open "Driver=Teradata;DBCName=dsnname;Databasename=dbname;Uid=Userid;Pwd=****;" 

thisSql = "sel * from customer_db.customer" 

Set rec1 = New ADODB.Recordset 
rec1.Open thisSql, conn 

With Sheet1.QueryTables.Add(Connection:=rec1, Destination:=Sheet2.Range("A1")) 
    .Name = "data" 
    .FieldNames = True 
    .Refresh BackgroundQuery:=False 
End With 
End Sub 

回答

2

如果你改變了Connection對象的Open方法:

conn.Open "DSN=dsnname;Databasename=dbname;Uid=Userid;Pwd=****;"

+0

非常感謝Rob。代碼現在可用。 – Vijayshankar 2015-02-09 13:20:00

1

此連接的腳本爲我工作。

「添加Microsoft ActiveX數據對象的引用, 2.8庫」當安裝Teradata的SQL助理,包括爲Teradata ODBC驅動程序將安裝TDOLEDB提供商 '這個例子連接到Teradata數據,刪除MyTable的&插入第7行的內容 - 8從有源電子表格

功能OpenConn()作爲對象 集OpenConn =新ADODB.Connection 昏暗myConnectionString作爲字符串 myConnectionString =「提供者= TDOLEDB;數據源= MyTeradataServerName;持續安全信息= TRUE;用戶ID = MyTeradataUserID; Password = MyTeradataPass; Session Mode = ANSI; Defau ltDatabase = GRP_BCE_FINANCE_IM; MaxResponseSize = 65477;」 OpenConn.Open myConnectionString 端功能

子CloseConn(康涅狄格州作爲對象) conn.Close 設置參數conn =無 結束子

子PushCCHier()

Dim TeraObjCmd As New ADODB.Command 
Dim TeraObjRs As ADODB.Recordset 
Dim TeraObjRs2 As ADODB.Recordset 

Dim TeraCnxn As Object 
Set TeraCnxn = OpenConn() 

TeraObjCmd.ActiveConnection = TeraCnxn 

'Clear Previous Data 
TeraObjCmd.ActiveConnection = TeraCnxn 
TeraObjCmd.CommandText = "delete from MyTable" 
TeraObjCmd.Execute 

'Load New Data 
Set TeraObjRs2 = New ADODB.Recordset 
TeraObjRs2.Open "SELECT * FROM MyTable where 1 = 2 ", TeraCnxn, adOpenStatic, adLockOptimistic 
With TeraObjRs2 
    For irow = 7 To 8 'loading results from rows in my spredsheet 
     If Len(Trim(Range("B" & irow).Value)) <> 0 Then 'Avoid blank rows 
      .AddNew 
      .Fields(0) = Range("B" & irow).Value 
     End If 
    Next 
    .UpdateBatch 
    .Close 
End With 

' clean up objects 
Set objCmd = Nothing 
Call CloseConn(TeraCnxn) 
MsgBox "Update Complete!" 

結束子