twy1392336 2008-5-27 23:49
SQL SEVER数据库里的decimal数据类型报的错?
本人连接的是SQL SERVER数据库一个数据库,其中有会员表Mamember,里有一字段TotalAmount,设计视图的数据类型为decimal,当定义了一个新记录集objDSource,以后当代码运行到
objDSource.Fields("TotalAmount").Value = Adodc1.Recordset.Fields("TotalAmount").Value 时报错,“多步操作产生错误.请检查每一步状态。”,怎样都不能运行程序,后把数据类型由decimal改为Varchar后,就能运行。各位大虾,请问谁能解释一下呢?因本个不想改SQL SERVER里的东西,看谁能有办法,请多指教。
Nothing 2008-5-28 12:10
你看一下两个字段的数择类型一样吗?
decimal是一种数字类型,如果不一样,可以这样试试
objDSource.Fields("TotalAmount").Value = val(Adodc1.Recordset.Fields("TotalAmount").Value )
twy1392336 2008-5-29 07:32
2楼,你的方法我试了,还是不行,请你看一下代码,顺便提醒一下,MemberCardNo和contacter的数据类型是varchar,但TotalAmount的类型为decimal,
For i = 0 To Adodc1.Recordset.Fields.Count - 1
objDataSource.Fields.Append Adodc1.Recordset.Fields(i).Name, _
Adodc1.Recordset.Fields(i).Type, _
Adodc1.Recordset.Fields(i).DefinedSize, _
adFldIsNullable
Next
objDataSource.Open
For i = 1 To Adodc1.Recordset.PageSize
objDataSource.AddNew
objDataSource.Fields("MemberCardNo").Value = Adodc1.Recordset.Fields("MemberCardNo").Value
objDataSource.Fields("Contacter").Value = Adodc1.Recordset.Fields("Contacter").Value
objDataSource.Fields("TotalAmount").Value = Adodc1.Recordset.Fields("TotalAmount").Value
Adodc1.Recordset.MoveNext
If Adodc1.Recordset.EOF Then Exit For
Next
Nothing 2008-5-29 13:42
我知道你的问题在哪里了,你没有decimal有精度设置不够,你调一下数据类型吧。
twy1392336 2008-5-30 23:31
NOTHING,请问我该在哪里调数据类型的精度?我不想调数据库,只要在VB里解决.能解释明确点吗?
Nothing 2008-5-31 00:02
decimal可以指定小数点有几位,你的两个decimal的小数点位数肯定不一样,所以造成报错。
你看一下 objDataSource.Fields("TotalAmount").Value 的字段的详细设置,然后可以用formatnumber来降低Adodc1.Recordset.Fields("TotalAmount").Value的精度。
其实不提倡用decimal这个数据类型,因为这个类型实际的应用并不多,一般也就货币用这个“decimal(8,2)”,如果数字精度高,可以用double数据类型。而货币数据类型有专用的货币类型。
twy1392336 2008-6-1 15:18
Nothing我在网上搜了一个这样的例子,
Dim x as Decimal
x = CDec((CDec(Text1.Text) - CDec(Text2.Text)) / 2) - CDec(Text3.Text)
Text4.Text = CStr(x)
你说的问题之所以出现,其原因是:
1. Val的返回值是double
2. /运算的返回值是double
3. 直接将text转换为数值,默认转换为single
4. double向single转换时会发生精度溢出错误
可以通过将所有参与运算的变量定义为Decimal类型完全解决这个问题,并且要使用显式强类型转换,实际上,这也是任何编程语言中解决精度问题比较推荐的办法,就是一致化所有参与运算的变量类型。
Dim T1 as Decimal, T2 as Decimal, T3 as Decimal, T4 as Decimal
T1 = CDec(Text1.Text)
T2 = CDec(Text2.Text)
T3 = CDec(Text3.Text)
T4 = (T1 - T2) / 2 - T3
Text4.Text = CStr(T4)
但我的VB6.0里没有一个Decimal的类型啊?
twy1392336 2008-6-7 09:11
Nothing谢谢你,我用formatNumber函数解决了。:lol