任务:连接到 IBM Netezza 并获取 Recordset。
我在 Delphi 中有下一个代码:
procedure TForm1.Button1Click(Sender: TObject);
var
LADOQuery: TADOQuery;
LRecordSet: _Recordset;
LRecCount : Integer;
begin
LADOQuery := TADOQuery.Create(nil);
try
LADOQuery.Prepared := True;
LADOQuery.ConnectionString :=
'Provider=NZOLEDB;Password=password;User ID=admin;Data Source=10.25.11.103;Initial Catalog=test;' +
'Persist Security Info=True;Port=5480;Logging Level=1;';
// LADOQuery.ConnectionString :=
// 'Driver={NetezzaSQL};servername=10.25.11.103;port=5480;database=test;username=admin;password=password;';
LADOQuery.SQL.Text := 'Select * from table_1;';
LADOQuery.Open; { !------- Error under OLEDB -------! }
LRecordSet := LADOQuery.Recordset;
if Assigned(LRecordSet) and (LRecordSet.State = adStateOpen) then
begin
LRecCount := LRecordSet.RecordCount;
ShowMessage(IntToStr(LRecCount));
end;
LADOQuery.Close;
finally
FreeAndNIl(LADOQuery);
end;
end;
我的系统中已经有 Netezza DB 的驱动程序:
- OLEDB(32x 和 64x 版本) - 产品版本 7.0.0.4
- ODBC(32x 和 64x 版本)- 产品版本 7.0.0.4
当我尝试在 OLEDB (NZOLEDB) 下使用连接设置时,我得到“EOleException 错误...”,否则当我使用 ODBC (NetezzaSQL) 下的设置时,我成功连接并获得正确的结果。
问题: OLEDB Delphi XE(也在XE4下尝试过)下出错的原因是什么?
---------------------------
Debugger Exception Notification
---------------------------
Project Test.exe raised exception class EOleException with message 'Unspecified error'.
---------------------------
Break Continue Help
---------------------------
PS。有趣的事实:我可以连接到 Netezza DB 并通过 OLEDB 驱动程序在 .NET 程序下使用相同的连接字符串获得结果:
String sConnectionString = "Provider=NZOLEDB;Password=password;User ID=admin;Data Source=10.25.11.103;Initial Catalog=test;";
System.Data.OleDb.OleDbConnection nzconn = new System.Data.OleDb.OleDbConnection(sConnectionString);
System.Data.OleDb.OleDbCommand nzcomm = new System.Data.OleDb.OleDbCommand();
先感谢您!