-------------------------------------------------------
SELECT TB.SL,TB.DJ,TB.JE,TB.SE FROM (SELECT 100000000.000*0.000 AS SL,10000.000 AS DJ,100000000.00*0.00 AS JE,10000000.00*0.00 AS SE) AS TB;
这是没有实际表的数据集,用ClientDataset打开此SQL得到字段:数量(SL),单价(DJ),金额(JE),税额(SE),输入下列值,税率是0.17,计算金额,税额结果:
数量(SL),单价(DJ),金额(JE),税额(SE)
10       2.545    
20       3.989
--------------------------------------------------------
不可用TClientDataset.CreateDataset;

解决方案 »

  1.   

    问题是这样产生的字段不可以修改编辑。
    Procedure Button1Click(Sender:TObject);
    begin
      with ClientDataset1 do
      begin
        Close;
        CommandText:='SELECT TB.SL,TB.DJ,TB.JE,TB.SE FROM (SELECT 100000000.000*0.000 AS SL,10000.000*0.0 AS DJ,100000000.00*0.00 AS JE,10000000.00*0.00 AS SE) AS TB';
        Open;
        Edit;
        FieldValues['SL']:=10;
        FieldValues['DJ']:=2.545;
        FieldValues['JE']:=2.545*10;
        FieldValues['SE']:=FieldByName('JE').AsFloat*1.17;
      
        Post;//这里会出错,    //一直不用ApplyUpdates(0); 因为不是物理字段。
        //do something other ...    Close;
      end;
    end;
      

  2.   

    修改要编辑的字段的Readonly属性:
    Procedure Button1Click(Sender:TObject);
    begin
      with ClientDataset1 do
      var I:Integer;
      begin
        Close;
        CommandText:='SELECT TB.SL,TB.DJ,TB.JE,TB.SE FROM (SELECT 100000000.000*0.000 AS SL,10000.000*0.0 AS DJ,100000000.00*0.00 AS JE,10000000.00*0.00 AS SE) AS TB';
        Open;
        for I:=0 to fieldscount-1 do
          fields[I].ReadOnly:=False;
        Edit;
        FieldValues['SL']:=10;
        FieldValues['DJ']:=2.545;
        FieldValues['JE']:=2.545*10;
        FieldValues['SE']:=FieldByName('JE').AsFloat*1.17;
      
        Post;//过了    append;
        FieldValues['SL']:=20;
        FieldValues['DJ']:=3.989;
        FieldValues['JE']:=FieldByName('SL').AsFloat*FieldByName('DJ').AsFloat;
        FieldValues['SE']:=FieldByName('JE').AsFloat*1.17;
      
        Post;//过了    //一直不用ApplyUpdates(0); 因为不是物理字段。
        //do something other ...    Close;
      end;
    end;
      

  3.   

    主要是因为要查询的表是随条件不同而不同的,字段也是不确定的。上述问题还没真正解决,可能是描述不够清楚。我需要的是当ClientDataset在打开后或者即将打开(BeforeOpen)的时候,任意加入可编辑字段。另外开贴问算了。