ADOQuery2.Close;
  ADOQuery2.SQL.Add('select NJCLYYNAME from Xt_njclyywh');
  ADOQuery2.Open;  i := 4;
 while not ADOQuery2.Eof do
    begin
     ClientDataSet1.Close;
      e_Field := TStringField.Create(ClientDataSet1);
      e_Field.FieldName := 'b' + IntToStr(i);
      e_Field.FieldKind := fklookup;
      e_Field.Size := 100;
      e_Field.LookupDataSet := ClientDataSet1;
      e_Field.Name := 'ClientDataSet1b' + IntToStr(i);
      e_Field.KeyFields := 'ClientDataSet1b' + IntToStr(i);
      e_Field.Calculated := true;      e_Field.DataSet := ClientDataSet1;           ClientDataSet1.FieldDefs.Add('B' + IntToStr(i),ftString,60);
      ClientDataSet1.FieldDefs.Update;
      ClientDataSet1.Fields.Add(e_Field);
      ClientDataSet1.Close;
       ClientDataSet1.CreateDataSet;
      DBGridEh1.Columns.Add;
      DBGridEh1.Columns[i].FieldName := 'b' + IntToStr(i);
      DBGridEh1.Columns[i].Title.Caption := '处理原因' + IntToStr(i-3);
      DBGridEh1.Columns[i].Width := 100;
      DBGridEh1.Columns[i].Title.Alignment := taCenter;
      i := i + 1;
      ADOQuery2.Next;
    end;
然后我在用ClientDataSet1.Fields[i].AsString := 'abc';
得到的值是空,为什么?

解决方案 »

  1.   

    然后我在用ClientDataSet1.FieldByName('b4').AsString := 'abc'; 
    得到的值也是空,为什么? 
      

  2.   

    我赋值时是正常的,是
    ClientDataSet1.edit;
    ClientDataSet1.Append;
    ClientDataSet1.FieldByName( "b4 ").AsString   :=   "abc ";   
    ClientDataSet1.Post;
      

  3.   

    ClientDataSet1.Append; 
    这句话不要
      

  4.   

    去掉ClientDataSet1.Append; 赋值得到的还是空
      

  5.   

    ClientDataSet1.edit; 
    ClientDataSet1.Append; 
    怎么Edit后又appen了
      

  6.   

    你在最后再加一句ADOQuery2.Refresh;试试
      

  7.   

    上面写错了,应该是ClientDataSet1.refresh;
      

  8.   

    ClientDataSet1.FieldDefs.Add( "B "   +   IntToStr(i),ftString,60); 
    把"B "改成"b "试试
      

  9.   

    出现 'ClientDataSet1:Missing data provide or data packet'字样错误