3

フィールドの最大値を計算する必要がありますが、計算に問題があります。私のフィールドの名前が「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に関するものであることがわかったため、質問とテキストの一部を変更しました。

4

2 に答える 2

1

Sertac Akyuzが指摘しているように、Delphi2010以下ではそうすることはできません。私はテストしていませんが、DelphiXEで修正されているようです。

http://qc.embarcadero.com/wc/qcmain.aspx?d=83610

于 2011-11-25T13:12:16.233 に答える