Sql 如何通过VBA连接到Netezza(用于分析的PureData系统)

Sql 如何通过VBA连接到Netezza(用于分析的PureData系统),sql,vba,excel,odbc,netezza,Sql,Vba,Excel,Odbc,Netezza,我正在尝试使用VBA连接到Netezza。我已启用以下功能: Microsoft Excel 15.0对象库 Microsoft Office 15.0对象库 Microsoft ActiveX数据对象6.1库 Visual Basic for Applications 这是我的密码: Sub NZConn() Dim cmd As New ADODB.Command Dim rs As New ADODB.Recordset Dim x As Variant Set cmd = New

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

  • Microsoft Excel 15.0对象库
  • Microsoft Office 15.0对象库
  • Microsoft ActiveX数据对象6.1库
  • Visual Basic for Applications
这是我的密码:

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吗?

我认为您的连接字符串没有问题,是的,您需要先打开连接

像这样:

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

我认为您的连接字符串是正常的,是的,您应该首先打开一个连接

像这样:

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中的“工具”选项卡中有一个命令行生成器,它帮助指定连接到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驱动程序–32位”是我下载的
  • “ODBC-DRIVER-FOR-NETEZZA-7-X86”是我的软件中心中显示的要安装的内容
  • “名称:NetezzaSQL;版本:7.00.04.41188;公司:www.ibm.com;文件:nsqlobc.DLL”是现在在我的32位“ODBC数据源管理员”窗口中显示的内容

    • 我能够自己解决这个问题。我发现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驱动程序–32位”是我下载的
      • “ODBC-DRIVER-FOR-NETEZZA-7-X86”是我的软件中心中显示的要安装的内容
      • “名称:NetezzaSQL;版本:7.00.04.41188;公司:www.ibm.com;文件:nsqlobc.DLL”是现在在我的32位“ODBC数据源管理员”窗口中显示的内容

      尝试
      servername=servername,portnumber
      从声明中减去
      New
      ,声明为
      Dim cmd作为ADODB.Command
      Dim rs作为ADODB.Recordset
      。并确保rs的大小写为
      setrs=newadodb.Recordset
      .Driver={NetezzaSQL};servername=myServerAddress;端口=我的端口号;数据库=myDataBase;用户名=我的用户名;password=mypassword上述注释似乎是Netezza ODBC的正确连接字符串,因此我相信这与我如何定义维度有关。当我现在运行这段代码时,我得到一个错误,该错误表示:“[Microsoft][ODBC驱动程序管理器]未找到数据源名称且未指定默认驱动程序”请尝试
      servername=servername,portnumber
      从声明中减去
      New
      ,声明为
      Dim cmd as ADODB.Command
      Dim rs as ADODB.Recordset
      。并确保rs的大小写为
      setrs=newadodb.Recordset
      .Driver={NetezzaSQL};servername=myServerAddress;端口=我的端口号;数据库=myDataBase;用户名=我的用户名;password=mypassword上述注释似乎是Netezza ODBC的正确连接字符串,因此我相信这与我如何定义维度有关。当我现在运行这段代码时,我得到一个错误,它表明:“[Microsoft][ODBC驱动程序管理器]未找到数据源名称,并且未指定默认驱动程序”我一直在继续讨论这个问题,还没有找到像Oracle和Microsoft SQL Server这样的工作产品。我一直在讨论这个问题,还没有找到像Oracle和Microsoft SQL Server那样的工作产品。