无法使用VBA代码从excel连接到Teradata - 通过网络无法连接到Teradata服务器
我一直在尝试使用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
如果你改变了Connection对象的Open方法:
conn.Open "DSN=dsnname;Databasename=dbname;Uid=Userid;Pwd=****;"
此连接的脚本为我工作。
“添加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!"
结束子
非常感谢Rob。代码现在可用。 – Vijayshankar 2015-02-09 13:20:00