如何通过 VBA 连接到 Netezza(PureData System for Analytics)

How to connect to Netezza (PureData System for Analytics) via VBA

我正在尝试使用 VBA 连接到 Netezza。我启用了以下功能:

这是我的代码:

Sub NZConn()

Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
Dim x As Variant

Set cmd = New ADODB.Command
Set RS = New ADODB.Recordset

cmd.ActiveConnection = "Driver={Netezza " & _
"ODBC};servername=servername;port=####;database=database;" & _
"username=username;password=password;"

cmd.ActiveConnection.CursorLocation = adUseClient
cmd.CommandTimeout = 120
cmd.CommandType = adCmdText

x = "Write Query here"
cmd.CommandText = x

Set rs = cmd.Execute
Sheet1.Range("A1").CopyFromRecordset rs

cmd.ActiveConnection.Close

End Sub

我可以将代码获取到 运行 而不会返回错误,但是没有从记录集中粘贴任何内容,这让我相信这可能与结构有关连接字符串。

我有服务器、用户名、密码、数据库、端口和驱动程序。

我需要先建立/打开 ActiveConnection 吗?

我认为你的连接字符串没问题,是的,你应该先打开一个连接。

像这样:

AccessConnect = "Driver={Netezza " & _
"ODBC};servername=servername;port=####;database=database;" & _
"username=username;password=password;"

Dim Conn1 As New adodb.Connection
Conn1.ConnectionString = AccessConnect
Conn1.Open

那就是

Set RS = Conn1.Execute(x) 'where x is your query

我能够自己解决问题。我发现在 Aginity 的 'Tools' 选项卡中有一个命令行构建器,它帮助指定了连接到 Netezza 所需的确切连接字符串。获得此连接字符串后,我收到 'architecture mismatch' 错误。下载适用于 Netezza 的 32 位 ODBC 驱动程序后,该方法非常有效。下面是更新后的代码:

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset        
Dim iCols As Integer             
Dim DB As String, User As String, PW As String, ConnectionString As String
Dim Server As String, Query As String
Dim SQLTable As Worksheet

Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set SQLTable = Sheet1

Server = SQLTable.Cells(2,3).Value
User = SQLTable.Cells(2,4).Value
PW = SQLTable.Cells(2,5).Value
DB = SQLTable.Cells(2,6).Value
Query = SQLTable.Cells(2,7).Value

ConnectionString = "Driver={NetezzaSQL};" & _
                   "server=" & Server & ";" & _
                   "UserName=" & User & ";" & _
                   "Password=" & PW & ";" & _
                   "Database=" & DB & ";" & _
                   "Query Timeout=120"

cn.Open (ConnectionString)
rs.Open (Query), cn

For iCols = 0 To RS.Fields.count - 1
    Worksheets("Sheet2").Cells(1, iCols + 1).Value = rs.Fields(iCols).Name
Next
Worksheets("Sheet2").Cells(2, "A").CopyFromRecordset rs

rs.Close
cn.Close

注意:

  • "IBM NETEZZA ODBC DRIVER – 32 BIT"是我下载的
  • "ODBC-DRIVER-FOR-NETEZZA-7-X86" 是出现在我的软件中心要安装的东西
  • "Name: NetezzaSQL ; Version: 7.00.04.41188 ; Company: www.ibm.com ; File: NSQLODBC.DLL" 就是现在我的 32 位显示 'ODBC Data Source Administrator' window