3

任务:连接到 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();

先感谢您!

4

0 回答 0