gpt4 book ai didi

delphi - Calc字段不发布

转载 作者:行者123 更新时间:2023-12-03 18:26:05 25 4
gpt4 key购买 nike

嗨,我想将calc字段(cemi)发布到表(sql)。当我计算所有字段时,最后一个字段不在SQL表中发布。因为最后一个字段(cemi)类型为fkcalc,如何将fkcalc类型的字段发布到sql表中?

procedure TForm1.ADOQuery1CalcFields(DataSet: TDataSet);
begin
ADOQuery1.FieldValues['cemi']:=
((ADOQuery1.FieldValues['boyuk1'] + ADOQuery1.FieldValues['boyuk2'] +
ADOQuery1.FieldValues['boyuk3'])*0.35)+((ADOQuery1.FieldValues['kicik1'] +
ADOQuery1.FieldValues['kicik2'])*0.25) +(ADOQuery1.FieldValues['qara1']*0.30);
end;

最佳答案

我不太确定你的意思


最后一个字段不在SQL表上发布


如果您所指的“最后一个字段”是您的“ Cemi”一个字段,并且是SQL Server表格中的一列,则如果您在AdoQuery1中将其定义为计算字段,则该字段不会被寄回那里。在对象检查器中。 FieldKindfkCalculated的字段在AdoQuery本地。

正如我想像的那样,只给计算的字段分配一个值就足以将其本地“发布”到AdoQuery。您想做的是调试问题的方法(因为像我这样的读者无法从中调试问题)是为了更轻松地查看为其分配了什么值(如果有)。

从这种角度来看,您的代码正在遭受“过早的优化”,这将使您很难看到问题所在。尝试以下方法:

在ADOQuery1CalcFields中,为要访问的每个字段声明一个局部变量,包括计算出的变量。选择适合字段的变量类型:

var
Boyuk1 : Double; // or Integer, etc
[...]
Cemi : Double;


使用字段的AsXXXX(类型)将值分配给局部变量:

Cemi := 0;
if not AdoQuery1.FieldByName('Boyuk1').IsNull then
Cemi := Cemi + AdoQuery1.FieldByName('Boyuk1').AsFloat;
[etc]


这样,至少您将能够看到计算错误的点(如果有的话)。

我使用了FieldByName()。AsFloat,而不是FieldValues [],因为FieldValues []是一个Variant,可以为Null,并且当您为其分配值时也不需要它本身就是变量。




检查AdoQuery1的 AutoCalcFields是否设置为True。
将调试器断点放在ADOQuery1CalcFields的第一行上。编译并运行,并检查断点是否命中-如果没有命中,那就是您的答案。在过程的每一行中单步调试器,并在最后一行之后,使用Ctrl-F7评估AdoQuery1.FieldByName('Cemi')。AsFloat的值。

关于delphi - Calc字段不发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37407267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com