【问题标题】:How to connect to Netezza (PureData System for Analytics) via VBA如何通过 VBA 连接到 Netezza(PureData System for Analytics)
【发布时间】:2017-09-24 11:55:58
【问题描述】:

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

  • Microsoft Excel 15.0 对象库
  • Microsoft Office 15.0 对象库
  • Microsoft ActiveX 数据对象 6.1 库
  • Visual Basic 应用程序

这是我的代码:

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

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

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

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

【问题讨论】:

  • 试试servername=servername,portnumber
  • 从声明中减去NewDim cmd As ADODB.CommandDim rs As ADODB.Recordset。并确保 rs 小写为Set rs = New ADODB.Recordset
  • 驱动程序={NetezzaSQL};服务器名称=myServerAddress;端口=myPortNumber;数据库=我的数据库;用户名=我的用户名;密码=我的密码
  • 上面的注释似乎是 Netezza ODBC 的正确连接字符串,所以我被引导相信这是关于我如何定义维度的问题。当我现在运行此代码时,我收到一条错误消息:“[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified”

标签: sql vba excel odbc netezza


【解决方案1】:

我能够自己解决问题。我发现 Aginity 的“工具”选项卡中有一个命令行构建器,它有助于指定连接到 Netezza 所需的确切连接字符串。一旦我有了这个连接字符串,我就会收到“架构不匹配”错误。下载 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”出现在我的软件中心安装
  • “名称:NetezzaSQL;版本:7.00.04.41188;公司:www.ibm.com;文件:NSQLODBC.DLL”现在显示在我的 32 位“ODBC 数据源管理器”窗口中

【讨论】:

    【解决方案2】:

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

    像这样:

    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
    

    【讨论】:

    • 我一直在继续处理这个问题,但还没有找到像 Oracle 和 Microsoft SQL Server 这样的工作产品。
    猜你喜欢
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多