2015-02-07 99 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!" 

结束子