有两个Oracle表A,B,A的字段为(a1,a2),B的字段为(b1,b2);
A:  a1  a2     B:  b1  b2
    2   70         2   3
    3   56         4   5
    6   40         6   7
  我想将A.a1=B.b1的纪录查询出来,并按照A.a2排序,即
Query1.SQL.add('select A.a2,B.b2 from A,B ');
Query1.SQL.add('where A.a1=B.b1 ');
Query1.SQL.add('order by A.a2');
会得到以下表:
    a2  b2
    40  7
    70  3
但我想在DBGrid里显示这个表时,第一列再加一个字段,字段名为“顺序”,即
    顺序  a2   b2
     1    40   7
     2    70   3
怎样才能达到这种结果呢?

解决方案 »

  1.   

    增加一个计算字段如:num
    在OnCalcFields事件中加入
    DataSet.fieldbyname('num').asinteger:=abs(DataSet.RecNO);
    就可以了
      

  2.   

    双击TQuery,
    右键,
    先:add all fields,
    再右键
    选:new field
    进得相关设置
      

  3.   

    我在Query中添加计算字段num后,运行时Query查询就不会生成所查表中默认的字段了,我要查询的是Oracle数据库上的表,不是本地表,所以没法为Query增加all fields啊。请赐教!
    !哪位朋友给多写几行详细代码吧。谢谢
      

  4.   

    Query1.SQL.add('select A.a2,B.b2 ,num=Rec.cont from A,B ');
    Query1.SQL.add('where A.a1=B.b1 ');
    Query1.SQL.add('order by A.a2,B.b2,Rec.cont');
    B.b2t Rec.cont 必须写!不然会出错!
      

  5.   

    Query1.SQL.add('select A.a2,B.b2 ,num=Rec.cont from A,B ');
    Query1.SQL.add('where A.a1=B.b1 ');
    Query1.SQL.add('order by A.a2,B.b2,Rec.cont');
    B.b2t Rec.cont 必须写!不然会出错!
      

  6.   

    你要自己新增加的,把它设置为计算类型的,
    不过会影响速度的。
    你在query中自己增加的,然后在query 的计算事件中写就可以了。
      

  7.   

    谢谢以上各位。关键是我在Query中设置了新字段后,原来表中的字段就Select不出来了。为什么啊?
      

  8.   

    如果要查询的表是数据库中实际存在的,那么可以为Query1组件添加all fields,并设置新的计算字段num,但在Query1的OnCalcFields事件中加入
    Query.1fieldbyname('num').asinteger:=abs(Query1.RecNO);,并不能得到我帖子中所提的排序效果,num中的值都为1,而不是1,2,3……。
    如果查询的表在数据库中不存在,而是从其他Query中调用Batchmove方法得到的,就不能为Query1组件添加all fields,有会做的朋友可以给我发个E-mail:[email protected],定以高分相送!谢谢!