奇怪问题:(100分)

  • 主题发起人 主题发起人 yifawu
  • 开始时间 开始时间
Y

yifawu

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi5.0编写数据库程,后台数据库为MS SQL7.0
我将某表中price 字段设为 numeric(7,3) 数据类型,在
添加新记录时,我用Edit文本编辑框输入数据如:19.2
然后用 语句 fieldbyname('price').asstring:=edit1.text;
结果存入该表中的值为19.199,非常奇怪!
我试着用 语句 fieldbyname('price').value:=strtofloat(edit1.text);
结果依然如此!
有何办法解决此问题,急盼解答!!!
 
急急急!
 
这不会是 Delphi 的 BUG 吧!
可别伤我的心呀!
 
天快亮了,此问题还不能解答,怎么办?
 
TDBEdit也是这样吗?
 
用TDBedit 试了也是这样,不信你试试
 
直接用
.FieldByName('aaaa').asFloat := 2.0;
试试,就知道是Delphi还是SQL 有问题.
 
我用如下语句试了一下
table1.append;
table1.fieldbyname('price').asfloat:=19.2;
table1.post;

结果存入表的也是19.199
 
对不起,我看可能是数据库的问题,
下面的问题,我看还是休息一下吧,睡一觉后,看看SQL的技术手册。
看能否找到点解决方法。
我今天为一个^号白忙了三个钟,怎么也找不出哪错,走一走,回来
发现取地址的语句有问题。
Pr := @PUL^给写成了 Pr:=@PUL,编译不会有错,但一个小角,让
我忙了三个钟。
不好意思,扯远了。我是说休息一下吧。不能帮你,抱欠.
 
开始时我用的是本机上的 MS SQL 7.0作为后台数据库
现在我改用NT 服务器上的MS SQL 6.5,问题是一样的.
NT 上的数据库是决对没有问题的,因为目前用VC 开
发的其他数据库系统工作正常。

只可能是BDE 或 delphi 的错了
 
实在没办法,只好用SQL 语句了,SQL 语句不会发生错误
 
我用SQLtrace来看了一下Delphi传给SQLServer的SQL语句。完整如下:
INSERT INTO dbo.T0111 (ACCNO ,ACCTYPE ,SODISCOUNT ,TESTNUM ) VALUES ('gjgj', 'S', 19.2, 19.199)

其中,SoDiscount是float类型,Delphi传给SQL Server的是正确的
TestNum是numeric(7.3),明显地,传给SQLServer的是一个不正确的数。
我想,可能是Delphi在生成SQL之前就对数据格式化了,格式后按数据长度给
剪齐了。第四位9给丢了。
在SqlServer上用Insert来做,没什么问题。

另外,用TQuery来做,不论是传参,还直接写SQL语句,都是正确的结果。

所以,可能是TTable对SQL类型数据库有问题,要改用TQuery来做。或改
用TQuery+Updataquery来做。

 
请你在bde别名设置中将Enable BCD改变一下试一试,它是控制付点数(float)
转化的。
 
多人接受答案了。
 
后退
顶部