有数据集adsPrice,字段有:ID, price1
现在我想在程序运行时动态的添加查询字段price2,price2:=price1*1.2
首先说明下为什么要这样做,因为要添加的查询字段个数不确定,我用动态数组来创建一个
         Price:array of TFloatField这样的动态数组.而且每个添加的查询字段的计算方法不一样,我该怎么写呢?
       请高手给个例子,或者代码示例.
我.cn

解决方案 »

  1.   

    var
      fieldname: string; //新增字段名称
      formula: string;  //计算公式
    begin
      fieldname := 'field2';
      formula := ' field1 * 2 ';with adsPrice do
    begin
      close;
      sql.clear;
      sql.text := format(' alter table Tablename add %s as %s ',[fieldName,formula]);
      execsql;
    end;
    end;
      

  2.   

    查查 计算字段 , 设置在 dataset 上,当然也可动态添加到 dataset,
    不用保存到后台数据库,找下相关的资料,不难
      

  3.   

    FieldArray : array of string; //储存字段名称的动态数组;
    priceArray : array of string; //储存公式内容的动态数组;
    以上应是同样长度的数组.如动态增加这样的计算公式: price2:=price1*1.2 可用动态查询来实现:var
     sqls : string;
     i, fieldCounts: integer;
    begin
     sqls:='select id, price';
     for i:=Low(FieldArray) to High(FieldArray) do begin
       for j:=Low(priceArray) to High(priceArray) do begin
         sqls:=sqls+','+FieldArray[i]+'='+priceArray[j]
       end;
     end;
     sqls:=sqls+' from 表1';
     with adsPrice do
     begin
       close;
       sql.clear;
       sql.text := sqls;
       open;
     end;
     
    随手写写, 去试一下
      

  4.   

    发得太快了, 来个补丁吧:
    var
     sqls : string;
    // i, fieldCounts: integer;  
     i,j: integer;
    begin
    .......
      

  5.   

    楼上的办法非常好,速度也比较快,还可以嵌入复杂的列间计算,还可以用数据库内置的一些函数用来参加计算,其速度将比在客户端用Delphi操作数据有效率得多!我就是这样做的!当然从可行性上来说其它方法也可以,只是我觉得综合性能楼上的办法是最好的!
      

  6.   

    楼上的方法可以在查询中使用,请问如果我要想实现修改price1,查询字段price2跟着变呢,上面的方法就要close再open数据集,感谢各位讨论,帮忙解决下!
      

  7.   

    同意用计算字段,查询时用Sql语句
      

  8.   

    网络上运行的程序,close,open一次很花销时间效率,如何做到象设计时静态添加的计算字段可以实时的变化
      

  9.   

    再明确一些:
          id     price1   price2    price3  ....
           1       1        50        100   .... 
           2       2        100       200   ....  
           3       3        150       300   ....
            ..... 
    数据可能很多,price2,price3都是计算字段,还可能有price4,price5.....,先在我改变price1,希望price2,或者其他添加的price....都跟着变,数据量可能很多,在一个dbgrid中修改price1,难道我修改一条记录要close,再open一次吗?
                                        大家都来讨论下