【发布时间】:2011-11-24 13:58:15
【问题描述】:
我需要计算一个字段的最大值,但我在这样做时遇到了麻烦。假设我的字段名为“VALUE0”。我想使用 TClientDataSet 的聚合函数来做到这一点。我该怎么办?
此代码只会在我的 SQL 表中的 BIGINT 字段失败:
function TFrmIo.GetMaxY(): Integer;
var
Max0: Integer;
FieldMax0: TAggregateField;
begin
if cds.Active then cds.Close;
FieldMax0 := TAggregateField.Create(cds);
FieldMax0.FieldName := 'MAX0';
FieldMax0.Calculated := true;
FieldMax0.ResultType := ftLargeint;
FieldMax0.FieldKind := fkAggregate;
FieldMax0.DataSet := cds;
FieldMax0.Expression := 'MAX(VALUE0)';
FieldMax0.Active := true;
cds.Open;
Max0 := Integer(FieldMax0.Value);
end;
我在“cds.Open”行得到了这个异常:
Exception class EDBClient with message 'Type mismatch in expression.'
编辑
按照评论的要求,VALUE0的字段类名是TLargeintField,FieldKind是fkData。
编辑 2
更改了问题和文本中的某些部分,因为现在我知道问题在于 TClientDataSet 聚合函数中的 BIGINT 与 INTEGER。
【问题讨论】:
-
告诉我们您尝试过的一些事情以及遇到的问题。
-
ClientDataset中的Value0是什么类型的字段? FieldKind 的价值呢?
-
@ArjenvanderSpek BIGINT。它适用于整数。 :(
-
@Haole 我用整数对其进行了测试,它按预期工作,但你能用: showmessage(cds.FieldByName('value0').ClassName) 验证吗? cds.FieldByName('value0').FieldKind 的值是多少?
-
@ArjenvanderSpek 我将它们添加到问题中。
标签: delphi aggregate tclientdataset