紧急求助!用Round()函数时出错! (50分)

  • 主题发起人 主题发起人 HHSH
  • 开始时间 开始时间
H

HHSH

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个AdoQuery的beforepost过程中想用Round()函数四舍五入后保存某列,
但是出现如下错误!请问如何解决?急!!!

[Error] Unit_jsgs.pas(98): Incompatible types: 'Variant' and 'Int64'

附代码:其中c1,c2,c3为字段名,它们都是数值型。

procedure TDM_rlzy.adoquery1BeforePost(DataSet: TDataSet);
begin
DataSet['c3']:=Round(DataSet['c1']/DataSet['c2']);
end;
 
数据类型不一致嘛
转换一下
在帮助中看看“type conversion routines”
 
Round()需要的是一个INT64而你的DATASET['C3]之类的为VARIANT当然有错了。
改为dataset['fieldsname'].asinteger;就可以了。

 
一个是可变类型(Variant)的变量,一个是整型(Int64)变量。变量类型不一致。
 
用integer强制转换一下类型就行了,你看编译器提示的多清楚。
 
多谢大家回答!
我写了以下代码:
with DataSet do
begin
FieldByName('c3').AsInteger:=Round(FieldByName('c3').AsFloat);
FieldByName('c10').AsInteger:=Round(FieldByName('c10').AsFloat);
....
end;
编译通过。
不知是否正确?
还有没有更简单的写法?总觉得这样太麻烦。我喜欢用['c1']形式。

to 北斗:
写成 DataSet['c3'].AsInteger:=Round(DataSet['c3'].AsInteger);之类
的不能通过。
 
多人接受答案了。
 
后退
顶部