Sql 如何通过VBA连接到Netezza(用于分析的PureData系统)
我正在尝试使用VBA连接到Netezza。我已启用以下功能: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
- 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那样的工作产品。