客户端 cds  通过sql 查询返回 data 并显示 在 dbgrideh 里 我点击列头 实现了排序  更改sql 再次赋值cds.data 报异常 function TBasicDm.GetDataSet(Asql: String): OleVariant;
begin
  //Result :='' ;
  with  adoq1  do
  begin
    Close ;
    SQL.Text :=Asql;
    Open ;
    Result :=dsp1.Data ;
  end;
end;
......
//sql:='select *  from  tb1';//sql:='select *  from  tb2';  从不同表获取记录集  报异常cds1.Data :=basedm.GetDataSet(sql);

解决方案 »

  1.   

    我的目的是 设计一个通用的 查询结果显示表格(dbgrideh)  必然 要  执行 不同的 sql   
    那 cds  这里 为什么 会报错  我想解决这个问题 
      

  2.   

    是不是你的dbgrideh定义的一些字段(DataField)在tb2里面没有~~~~~~~~
      

  3.   

    是提示  cds  没有找到字段  而不是 dbgrideh  因为表格没有定义字段cds  是不是 要清空下  包括字段 因为 我动态创建的 cds 可以多次赋值data 
      

  4.   

    你的cds是跟dbgrideh一块用的吧?因为你的dbgrideh定义了tb1的字段,因此你在使用跟dbgrideh相连的dataset时,你的dataset就应该有这些字段,否则就会提示你的dataset没有找到字段,在这里你可以试一下把dbgrideh的字段定义成那些tb1和tb2都有的字段,应该就不会提示 field 'XXX' not found了
      

  5.   

    你可以看一下你的数据库的表tb2,里面应该是没有 field 'XXX' not found里的XXX字段的
      

  6.   

    tb1   tb2  肯定是 两个 完全不相关的表   字段肯定不一样 我这样的用法 不对嘛 ?
      

  7.   

    问题 是  只要 dbgrideh 排序了   再 赋值 cds.data 就报错  不排序 是没有问题的 再赋值 之前  如何  清空  cds 数据集 及字段头大
      

  8.   

    肯定是有问题的,你的表格的字段是根据tb1的字段设置的,当你用tb2的字段去赋值的时候,那些tb1有而tb2没有的字段去哪取值啊?
    可以尝试以下的解决方法:
    一、只在表格上定义那些tb1和tb2都有的字段;造成结果就是显示的信息不完全。
    二、往表tb2添加那些XXX的字段;造成的结果就是数据冗余。
    三、修改你的Select语句,给那些XXX的字段赋个值。如:‘Select '' as XXX, ....... From tb2’
    四、不要预先定义表格的字段,而是根据你的cds1.Data来使用代码来构造你的表格。比较麻烦
    五、等高手。
      

  9.   

    问题是  当grideh  不排序时  可随意 赋值cds.data  不报错  问题 出在 排序后 再赋值 就报错 
      

  10.   

    还是自己解决了 当一个 cds 有索引时 是不能被另一个 cds 赋值的 cds1.data:=cds2.data;否则 是可以的 删除索引即可 解决。
      

  11.   

    代碼沒有問題,檢查確認一下是不是表A和表B的字段是否正確;如果正確,就是你設置了聚合索引,這時你相互賦值時會出現“XX”字段not found;如果排除這兩點,應該是沒有問題的,你試著將索引DEL再試一試...