需要这个方法返回TClientDataSet,总是执行到dataSet.open时就报missing data privoder or data packet.请问这段代码有什么问题.
刚接触delphi不久.谢谢!function Employee.GetAllEmp : TClientDataSet;
  const ALL_EMP = 'select a.id,a.name,a.gender,a.birthday,a.address from emp as a';
  var dataSet : TClientDataSet;
     dsProvider : TDataSetProvider;
begin
  _query := TADOQuery.Create(nil);
  _query.SQL.Add(ALL_EMP);
  _query.Connection := _connection;  dsProvider := TDataSetProvider.Create(nil);
  dsProvider.DataSet := _query;
  dsProvider.Name := 'demo';  dataSet := TClientDataSet.Create(nil);
  dataSet.Name := 'ds';
  dataSet.ProviderName := dsProvider.Name;  try
    _query.Open;
    dataSet.Open;
  finally
   _query.Close;
  end;
  GetAllEmp := dataSet;
end;

解决方案 »

  1.   

    没有那么麻烦:
    function Employee.GetAllEmp : TClientDataSet;
      const ALL_EMP = 'select a.id,a.name,a.gender,a.birthday,a.address from emp as a';
      var dataSet : TClientDataSet;
         dsProvider : TDataSetProvider;
    begin
      _query := TADOQuery.Create(nil);
      dsProvider := TDataSetProvider.Create(nil);
      try
        _query.SQL.Add(ALL_EMP);
        _query.Connection := _connection;
        _query.Open;    dsProvider.DataSet := _query;
        //dsProvider.Name := 'demo';    dataSet := TClientDataSet.Create(nil);
        //dataSet.Name := 'ds';
        dataSet.data := dsProvider.Data;///!!!!!
      finally
        dsProvider.Free;////一定要释放!!!
        _query.Free;
      end;
      
      {try
        _query.Open;
        dataSet.Open;
      finally
          _query.Close;
      end;}
      Result:= dataSet;
    end;