本函数的目的是将操作员表从服务器上取出并保存到本地,但现在遇到两个问题:
1、ClientDataSet和DataSetProvider在创建的时候出错;
2、如果传入参数中有ClientDataSet和DataSetProvider,但在设置ClientDataSet1.ProviderName := 'DataSetProvider1'后,ClientDataSet1.Active := True时会出现“missing Data Provider or Data Packet”的错误function CreateClientFile(poADOQuery:TADOQuery;psFileName:String;):Boolean;
var
  l_strSql : String;
  ClientDataSet1 : TClientDataSet;
  DataSetProvider1 : TDataSetProvider;
begin
  if Trim(psFileName) = EmptyStr then
  begin
    Result := False;
    exit;
  end;
  l_strSql := 'select * from Employees';
  poADOQuery.Close;
  poADOQuery.SQL.Clear;
  poADOQuery.SQL.Add(l_strSql);
  try
    poADOQuery.Active := True;
  except
    Result := False;
    exit;
  end;
  TClientDataSet.Create(ClientDataSet1);
  TDataSetProvider.Create(DataSetProvider1);
  DataSetProvider1.DataSet := poADOQuery;
  ClientDataSet1.ProviderName := 'DataSetProvider1';
  try
    ClientDataSet1.Active := True;
  except
    Result := False;
    Exit;
  end;
  try
    ClientDataSet1.SaveToFile(psFileName,dfBinary);
    Result := True;
    Exit;
  except
    Result := False;
    Exit;
  end;
end;请各位大侠帮忙,很急的!!

解决方案 »

  1.   

    TClientDataSet.Create(ClientDataSet1);
    TDataSetProvider.Create(DataSetProvider1);
    应改为
    ClientDataSet1:=TClientDataSet.Create(Self);
    DataSetProvider1:=TDataSetProvider.Create(Self);
      

  2.   

    To AustinLei
    我试过,但编译的时候语法通不过!
      

  3.   

    TClientDataSet.Create(ClientDataSet1);
    TDataSetProvider.Create(DataSetProvider1);
    DataSetProvider1.DataSet := poADOQuery;
    ClientDataSet1.ProviderName := 'DataSetProvider1';
    应改为
    ClientDataSet1:=TClientDataSet.Create(Self);
    DataSetProvider1:=TDataSetProvider.Create(Self);
    DataSetProvider1.DataSet := poADOQuery;
    ClientDataSet1.SetProvider(DataSetProvider1);
    另外函数名也需要定义成:
    private
      { Private declarations }
      function CreateClientFile(poADOQuery:TADOQuery;psFileName:String):Boolean;
    function TForm1.CreateClientFile(poADOQuery:TADOQuery;psFileName:String):Boolean;
    上一帖帖到一半就不小心按“发出”了,以这一帖为准。
    以上在D6+Win2KServer下运行成功。
      

  4.   

    完整代码:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB, DBClient, Provider;type
      TForm1 = class(TForm)
        Button1: TButton;
        ADOQuery1: TADOQuery;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        function CreateClientFile(poADOQuery:TADOQuery;psFileName:String):Boolean;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}function TForm1.CreateClientFile(poADOQuery:TADOQuery;psFileName:String):Boolean;
    var
      l_strSql : String;
      ClientDataSet1 : TClientDataSet;
      DataSetProvider1 : TDataSetProvider;
    begin
      if Trim(psFileName) = EmptyStr then
      begin
        Result := False;
        exit;
      end;
      l_strSql := 'select * from tb_poem';
      poADOQuery.Close;
      poADOQuery.SQL.Clear;
      poADOQuery.SQL.Add(l_strSql);
      try
        poADOQuery.Active := True;
      except
        Result := False;
        exit;
      end;
      ClientDataSet1:=TClientDataSet.Create(Self);
      DataSetProvider1:=TDataSetProvider.Create(Self);
      DataSetProvider1.DataSet := poADOQuery;
      ClientDataSet1.SetProvider(DataSetProvider1);
      try
        ClientDataSet1.Active := True;
      except
        Result := False;
        Exit;
      end;
      try
        ClientDataSet1.SaveToFile(psFileName,dfBinary);
        Result := True;
        Exit;
      except
        Result := False;
        Exit;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      str:String;
    begin
      str:='e:\1.txt';
      CreateClientFile(Self.ADOQuery1,str);
    end;end.
      

  5.   

    AustinLei,谢谢!我试过可以的!