动态创建子窗体:
Form1.Create(Application);
Form1.showModal;Form1中有一个ClientDataSet1,取到的数据中有一个字段为StyleNo.关闭Form1:
TForm1.FormCloseQuery
  CanClose := true;TForm1.FormClose
  Action := CaFree;
  Self   := nil;再用同样的方法创建一个Form2在Form2中也有一个ClientDataSet1,取到的数据中没有StyleNo字段.ClientDataSet1我是这样取数据的:
  if ClientDataSet1.Active then ClientDataSet1.EmptyDataSet;  //No.1
  ClientDataSet1.Close;
  ClientDataSet1.Data := ....这样问题就出来了,打开Form1后再打开Form2取数据的时候,就提示错误:
ClientDataSet1:Field 'StyleNo' not found.
如果不打开Form1,先打开Form2就没有问题.
先打开Form2,再打开Form1也没有问题.哪位高手知道问题出在哪了,100分相送.谢谢!!!

解决方案 »

  1.   

    1.ClientDataSet1.CommandText有没有重新赋值,是不是写死了
    2.ClientDataSet1有没有固化字段
      

  2.   

    ClientDataSet1.CommandText为空的,数据是通过中间层传递过来的.什么叫固化字段?我没有去设置ClientDataSet1的字段,直接取过来的.
      

  3.   

    3.是不是使用了filter,里面涉及到那个字段
    4.是不是有其它数据控件和ClientDataSet1相连,使用了StyleNo字段
    5.是不是ClientDataSet1的某些事件中使用了StyleNo字段
      

  4.   

    ClientDataSet1我是这样取数据的: 
      if ClientDataSet1.Active then ClientDataSet1.EmptyDataSet;  //No.1 
      ClientDataSet1.Close; 
    ClientDataSet1.FieldDefs.Clear; // 加上這二句試下,可能是這個原因吧。
    ClientDataSet1.Fields.Clear;  //
      ClientDataSet1.Data := .... 
    你應該是 
      

  5.   

    能否将你的form2的关闭代码(OnClose和OnCloseQuery)帖出来看下呢?
    我怀疑这里有问题:
    TForm1.FormClose
      Action := CaFree;
      Self  := nil; 
    建议将Self  := nil; 这句去掉
    if ClientDataSet1.Active then ClientDataSet1.EmptyDataSet;  //No.1 
    以上这句也没有必要,建议去掉
      

  6.   

    应该是ClientDataSet1的问题,参考华仔的代码吧。
      

  7.   

    非常感谢bdmh , 是Filter没有关闭.再次感谢!!!