发新话题
打印

[数据库] SQL SEVER数据库里的decimal数据类型报的错?

SQL SEVER数据库里的decimal数据类型报的错?

本人连接的是SQL SERVER数据库一个数据库,其中有会员表Mamember,里有一字段TotalAmount,设计视图的数据类型为decimal,当定义了一个新记录集objDSource,以后当代码运行到
objDSource.Fields("TotalAmount").Value = Adodc1.Recordset.Fields("TotalAmount").Value   时报错,“多步操作产生错误.请检查每一步状态。”,怎样都不能运行程序,后把数据类型由decimal改为Varchar后,就能运行。各位大虾,请问谁能解释一下呢?因本个不想改SQL SERVER里的东西,看谁能有办法,请多指教。

TOP

你看一下两个字段的数择类型一样吗?
decimal是一种数字类型,如果不一样,可以这样试试

objDSource.Fields("TotalAmount").Value = val(Adodc1.Recordset.Fields("TotalAmount").Value )
换个头像,看见广告就眼红,直接封ID。

TOP

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

TOP

我知道你的问题在哪里了,你没有decimal有精度设置不够,你调一下数据类型吧。
换个头像,看见广告就眼红,直接封ID。

TOP

NOTHING,请问我该在哪里调数据类型的精度?我不想调数据库,只要在VB里解决.能解释明确点吗?

TOP

decimal可以指定小数点有几位,你的两个decimal的小数点位数肯定不一样,所以造成报错。
你看一下 objDataSource.Fields("TotalAmount").Value 的字段的详细设置,然后可以用formatnumber来降低Adodc1.Recordset.Fields("TotalAmount").Value的精度。
其实不提倡用decimal这个数据类型,因为这个类型实际的应用并不多,一般也就货币用这个“decimal(8,2)”,如果数字精度高,可以用double数据类型。而货币数据类型有专用的货币类型。
换个头像,看见广告就眼红,直接封ID。

TOP

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的类型啊?

TOP

VB有这个数据类型
换个头像,看见广告就眼红,直接封ID。

TOP

Nothing谢谢你,我用formatNumber函数解决了。

TOP

搞定就好
换个头像,看见广告就眼红,直接封ID。

TOP

发新话题