我用access,adoconnection,adoquery,datasource,
三个字段:gz1,gz2,zgz,zgz用adoquery添加的计算字段。
代码如下:
procedure TForm1.AdoQuery1CalcFields(DataSet:TDataSet);
begin
  AdoQuery1zgz.value:=AdoQuery1gz1.value+AdoQuery1gz2.Value;
end;
为什么程序运行后,zgz字段为空啊?

解决方案 »

  1.   

    是你写的有问题
    procedure TForm1.AdoQuery1CalcFields(DataSet:TDataSet);
    begin
    AdoQuery1.fieldbyname('zgz').asstring:=adoquery1.fieldbyname('fild').asstring;
      

  2.   

    计算字段本身没有值,只有当 active:=false
    active:=true; // 这时才会去计算取值的。
      

  3.   

    谢谢,可我不明白
    AdoQuery1.fieldbyname('zgz').asstring:=adoquery1.fieldbyname('fild').asstring;
    中fild是什么意思。
    我将我的程序改成这样:
    AdoQuery1.fieldbyname('zgz').asbcd:=AdoQuery1.fieldbyname('gz1').asbcd
      +AdoQuery1.fieldbyname('gz2').AsBCD;
      AdoQuery1.Active:=false;
      Adoquery1.Active:=true;但提示说有Incompatible types.
      

  4.   

    在 很 多 情 况 下, 我 们 需 要 的 数 据 与 数 据 库 中 其 它 字 段 的 数 据 相 关, 例 如 订 单 的 金 额 为 数 量 与 单 价 的 乘 积。 在 应 用 程 序 中, 若 要 在 显 示 订 单 具 体 条 目 的 同 时 显 示 金 额, 通 常 要 创 建 一 个 字 段, 在 显 示 该 字 段 之 前 先 进 行 乘 法 运 算, 将 金 额 值 存 储 在 该 字 段 中。 但 是, 若 用 户 修 改 了 数 量 或 单 价, 那 就 不 得 不 更 改 金 额 值。 这 个 问 题 立 刻 变 得 复 杂 起 来, 幸 好Delphi 提 供 了 在 数 据 库 表 中 定 义 附 加 字 段 的 容 易 方 法。 这 种 字 段 被 称 为 计 算 出 的 字 段(Calculated fields), 它 们 以 数 据 库 表 中 的 其 他 字 段 为 基 础。 计 算 出 的 字 段 的 优 点 是 计 算 出 的 值 不 被 存 储 在 数 据 库 中, 不 过, 每 次 记 录 发 生 变 化 时 都 要 对 其 进 行 计 算, 且 需 要 访 问 和 显 示 字 段。 下 面 说 明 使 用 计 算 出 的 字 段 的 方 法。 1. 建 立 新 的 工 程 文 件project1, 在form1 上 放 置 一 个Table、 一 个Datasource 和 一 个Dbgrid 控 件,Datasource1 的Datasource 属 性 为Table1,Dbgrid1 的Datasource 属 性 为Datasource1。Table1 中 所 用 的 数 据 库 表 为order.db, 将Table1 的Active 属 性 置 为True。 下 面 是Table1 的 定 义: 
                     字 段 名     类  型 说  明   字段含义
                        Productid            +          产 品 编 号
                        Quantity               N          数 量
                        Price                 $          单 价2. 添 加 计 算 出 的 字 段Cash。 用 鼠 标 右 键 单 击Table1 组 件, 在 弹 出 菜 单 中 选 取Fields Editor … 项, 进 入 字 段 编 辑 器; 再 用 鼠 标 右 键 单 击 字 段 编 辑 器 的 字 段 显 示 区 域, 在 弹 出 菜 单 中 选 取Add Fields … 项, 将Table1 的 所 有 字 段 都 加 入 字 段 编 辑 器 中; 再 次 用 鼠 标 右 键 单 击 字 段 编 辑 器 的 字 段 显 示 区 域, 在 弹 出 菜 单 中 选 取New Field … 项, 进 入 新 字 段 编 辑 器, 设 新 字 段 的Name 为Cash,Type 为Currency,Field Type 为Calculated , 用 鼠 标 单 击OK 命 令 按 钮, 即 完 成 了 添 加 计 算 出 的 字 段Cash。3 . 添 加Table1 的OnCalcFields 事 件。 其 代 码 为: 
    procedure TForm1.Table1CalcFields(DataSet: TDataSet);
    var
      quantity1:single;
      price1:Currency;
    begin
      quantity1:=Table1.FieldByName(’quantity’).asfloat;   //数量
      price1:=Table1.FieldByName(’price’).asCurrency;    //单价
      Table1.FieldByName(’cash’).asCurrency:=quantity1*price1;  //应付资金
    end;
    运 行 程 序, 你 可 以 在 表 格 的Quantity 和Price 栏 中 任 意 修 改 数 据 并 移 动 记 录,Cash 栏 即 刻 显 示 出 与 之 相 应 的 金 额 值。