TClientDataSet错误:"缺少数据提供程序或数据包"

Ste*_*e F 1 delphi tclientdataset

我正在Delphi中的代码中创建一个TClientDataSet和TDataSetProvider,并从TUniQuery(Devart UniDAC)加载数据.在设置数据集提供程序和clientdataset的属性后,我尝试打开clientdataset并获取运行时异常:"缺少数据提供程序或数据包".

我不确定为什么会这样,如果有人能指出究竟是什么问题,我会很高兴.

这是我的代码:

//uq is a TUniQuery correctly set to an active TUniConnection

cdsFirstNames := TClientDataSet.Create(nil);
dspFirstNames := TDataSetProvider.Create(nil);
try
  uq.SQL.Text := 'SELECT * FROM firstnames;';
  uq.Prepared := True;
  // uq.Open;
  dspFirstNames.Name := 'dspFirstNames';
  dspFirstNames.DataSet := uq;
  cdsFirstNames.ProviderName := 'dspFirstNames';
  cdsFirstNames.Open;  // <--- Exception occurs here!
  uq.Close;
  showmessage(IntToStr(cdsFirstNames.RecordCount));
Run Code Online (Sandbox Code Playgroud)

Val*_*nov 5

如果DatasetProvider没有所有者,则ClientDataSet无法获取对提供者的引用.

所以使用

...Create(Self); 
Run Code Online (Sandbox Code Playgroud)

代替

...Create(nil);
Run Code Online (Sandbox Code Playgroud)