procedure TFrmZHSPQKZB.get_xjczfpm(ACZFPM: string);
var
  vstr:String;
  vpoint:pointer;
  vflag:boolean;
  i:integer;
begin
  cds2.Create(nil);
  cds2.FieldDefs.Add('czfpm',ftString, 30, False);
  cds2.FieldDefs.Add('s_dwjc',ftInteger);
  cds2.CreateDataSet;
  cds2.Open;
  cds2.EmptyDataSet;
  with AdoQuery3 do
  begin
    Close;
    SQL.Clear;
    SQL.Text:='select * from xt_ysdw where  (s_sjczfpm=:fpm)  order by s_czfpm';
    parameters.ParamByName('fpm').Value:=ACZFPM;
    Open;
  end;
  cds2.Append;
  cds2.FieldByName('czfpm').AsString:='wf';
  cds2.FieldByName('s_dwjc').AsString:='2';
  cds2.Post;
  AdoQuery3.First;
  while not AdoQuery3.Eof do
  begin
    cds2.Append;
    cds2.FieldByName('czfpm').AsString:=AdoQuery3.fieldbyname('s_czfpm').AsString;
    cds2.FieldByName('s_dwjc').AsString:=AdoQuery3.fieldbyname('s_dwjc').AsString;
    cds2.Post;
    AdoQuery3.Next;
  end;  cds2.First;
  while not cds2.Eof do
  begin
    with AdoQuery3 do
    begin
      Close;
      SQL.Clear;
      SQL.Text:='select * from xt_ysdw where  (s_sjczfpm=:fpm)  order by s_czfpm';
      parameters.ParamByName('fpm').Value:=cds2.fieldbyname('czfpm').AsString;
      Open;
    end;
      AdoQuery3.First;
      vSTR:=cds2.FieldByName('czfpm').AsString;
      while not AdoQuery3.Eof do
      begin
          cds2.Append;
          cds2.FieldByName('czfpm').AsString:=AdoQuery3.fieldbyname('s_czfpm').AsString;
          cds2.FieldByName('s_dwjc').AsString:=AdoQuery3.fieldbyname('s_dwjc').AsString;
          cds2.Post;
          AdoQuery3.Next;
      end;
    cds2.Locate('czfpm', VarArrayOf([vstr]), [loPartialKey]);
    cds2.Next;
  end;
  cds2.Append;
  cds2.FieldByName('czfpm').AsString:=ACZFPM;
  cds2.FieldByName('s_dwjc').AsString:='1';
  cds2.Post;
end;
代码如上,cds2为一TClientDataSet,为什么在多次调用这一过程后,cds2循环不了????

解决方案 »

  1.   

    vSTR:=cds2.FieldByName('czfpm').AsString;
          while not AdoQuery3.Eof do
          begin
              cds2.Append;
              cds2.FieldByName('czfpm').AsString:=AdoQuery3.fieldbyname('s_czfpm').AsString;
              cds2.FieldByName('s_dwjc').AsString:=AdoQuery3.fieldbyname('s_dwjc').AsString;
              cds2.Post;
              AdoQuery3.Next;...
        cds2.Locate('czfpm', VarArrayOf([vstr]), [loPartialKey]);
        cds2.Next;循环中你每次定位都到'czfpm' ([vstr])了 
      

  2.   

    wangfeng0215 (浪子)  项目还没完事呢??
      

  3.   

    TClientDataSet如果一直循环而没有释放会造成记录追加不进去, 建议每次动态创建ClientDataSet