【问题标题】:Calculated Fields [closed]计算字段
【发布时间】:2016-12-18 07:55:43
【问题描述】:

我有一个带有计算字段的 dbGrid ... 是否有任何解决方案可以向计算字段添加不同的表达式? (每一行都有自己的表达方式)

【问题讨论】:

  • 您使用的是哪个 Delphi 版本?
  • 向我们展示一些您迄今为止所做的代码!谢谢!

标签: delphi


【解决方案1】:

有没有办法添加不同的表达方式

这取决于您所说的“添加”是什么意思。你当然可以改变表达方式 用于根据其他字段中的值计算字段的值 在数据行中。例如,给定一个带有字段的 Order 数据集

OrderTotal : TFloatField;  //  type = fkCalculated
OrderDiscount : TFloatField;  //  type = fkData
OrderCashPayment : TBooleanField;  //  type = fkData
OrderPricePerUnit : TFloatField;  //  type = fkData
OrderShipping : TFloatField;  //  type = fkData
OrderUnits: TIntegerField;  //  type = fkData

那么你可以拥有

procedure DataModule1.OrderCalcFields(DataSet : TDataSet);
begin
  if OrderCashPayment.AsBoolean then begin
    //  don't charge for shipping
    OrderTotal.AsFloat := OrderPricePerUnit.AsFloat * (1 -  OrderDiscount.AsFloat)
  end
  else begin
    OrderTotal.AsFloat := OrderPricePerUnit.AsFloat * (1 - OrderDiscount.AsFloat) +
      + OrderShipping.AsFloat;
  end;
end;

另一方面,如果您要问的表达式是否用于计算 可以在运行时更改字段的值,答案也是“是”,但您 必须小心你如何做到这一点,以避免过多影响性能。你 可以使用可用于 Delphi 的表达式评估器对象之一 评估作为文本字符串提供的表达式,最好是一个 仅当表达式(表达式)被更改并构建时才解析表达式 在每个OnCalcFields 事件中重复评估的表达式树。免费软件 Jedi 库包括一个 Pascal 解释器,可用于运行时表达式评估,并允许表达式包含来自例如的值。字段值,但我不记得它是否可以只构建一次表达式树。

【讨论】:

    【解决方案2】:

    您必须使用函数根据字段的值计算表达式。
    例如,我们想在dbdemos.mdbemployee表中添加一个名为Tax的字段,根据Salary计算>.

    1. 创建一个新的 VCL 项目
    2. TADOTableTDataSourceTDBGrid 添加到您的表单并“连接”它们
    3. ConnectionString 分配给 ADOTable1
    4. Float 类型的新 Calculated 字段添加到 ADOTable1 并将其命名为 Tax
    5. 转到ADOTable1Events并在OnCalcFields内双击并添加以下事件处理程序:
    procedure TForm1.ADOTable1CalcFields(DataSet: TDataSet);
      var
        nSalary, nTax: Double;
    begin
      nSalary := ADOTable1Salary.AsFloat;
      if nSalary < 30000 then
        nTax := 10
      else if nSalary < 40000 then
        nTax := 20
      else
        nTax := 30;
      ADOTable1Tax.AsFloat := nSalary * nTax / 100;
    end;
    

    【讨论】:

    • 呃?这并不是真正如何使用计算字段。当 Tax 字段的值是必需的但不是 String 格式时怎么办?您似乎在通过设置字段的计算值来更改字段值的文本表示。
    • @MartynA 已纠正。谢谢。
    【解决方案3】:

    不可以,但您可以在表格中拥有多个计算字段并根据条件显示/隐藏它们。

    【讨论】:

    • 事实上,您也可以根据当前行号为每一列添加条件。
    • 但是他必须知道行号,嗯? :)
    猜你喜欢
    • 1970-01-01
    • 2022-08-17
    • 2012-10-11
    • 1970-01-01
    • 2016-09-28
    • 2011-03-28
    • 2015-02-07
    • 2020-07-09
    • 1970-01-01
    相关资源
    最近更新 更多