为什么在三层用SQL对浮点数字段求和,返回的值总是整数!(100分)

  • 主题发起人 主题发起人 sunqi
  • 开始时间 开始时间
S

sunqi

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序用DCOM 和ADO连接,对一个数据库求和,结果却自动把小数位取整了,用
两层的求和,query 和ADOQUERY 结果都保留了小数位不知哪里设置不对。
 
代码就是 select sum(aa) from tmptab ;
AA 是一个浮点字段,只要简单的创建一个MIADS
架构即可。我用的数据库是ORACLE8I,ADO 驱动是MICSOFT 的 ORACLE OLE,若用ORACLE 自己的
就会报"out value " 不知是为什么!!!
 
大概你的客户端的 ClientDataset 还得设置一下那个field的类型
 
1.你在客户端clientdataset也设置一下类型,同意楼上.
2.你再用BDE也试试看有没有这种情况.delphi连接oracle使用
BDE比ADO好的.而且还有dbezpress可以选择.
 
我做了实验,在SERVER 端打开实行汇总结果是有整型的,但我更改该字段的DISPLAYFORMAT
就能精确到小数位。这说明和ADO 没有关系,是三层中的问题。但我在CLIENT 更改了
DISPLAYFORMAT 的属性后,没有任何作用,也更改了origin 和PRECISION 都不起作用。
请各位给帮帮忙,好好诊断一下,急!!!!

 
中间层和客户端都设置一下
客户端看field的属性,看他是不是float类型
 
我把TBCDFIELD 的属性全查遍了没有定义TBCDFIELD 为TBCDFIELD 为FLOAT 的属性呀!
字段的属性是只读的下面是TBCDFIELD 的全部属性,请大侠给指点的清楚点,多谢了!!!
TBCDFIELD In TBCDField
AsCurrency
AsFloat
AsInteger
AsString
AsVariant
Currency
DataSize
MaxValue
MinValue
Precision
Value
Derived from TNumericField
DisplayFormat
EditFormat
Derived from TField
Alignment
AsBoolean
AsDateTime
AttributeSet
AutoGenerateValue
Calculated
CanModify
ConstraintErrorMessage
CurValue
CustomConstraint
DataSet
DataType
DefaultExpression
DisplayLabel
DisplayName
DisplayText
DisplayWidth
EditMask
EditMaskPtr
FieldKind
FieldName
FieldNo
FullName
HasConstraints
ImportedConstraint
Index
IsIndexField
IsNull
KeyFields
Lookup
LookupCache
LookupDataSet
LookupKeyFields
LookupList
LookupResultField
NewValue
Offset
OldValue
Origin
ParentField
ProviderFlags
ReadOnly
Required
Size
Text
ValidChars
Visible
Derived from TComponent
ComObject
ComponentCount
ComponentIndex
Components
ComponentState
ComponentStyle
DesignInfo
Name
Owner
Tag
VCLComObject
 
asfloat就是float类型.
 
我刚做了实验,发现我的求和字段为ftbcd 类型,请问在哪里设置该字段为FTFLOAT !!
 
field的 Precision和Size属性呢?是多少?
 
怎么没有人回答了!!难道没有人真正开发过三层吗!!!
 
TO sunqi:
我就你这个问题做了实现,用的是BDE+Oracle8i,是COM+结构,但没有问题。
如果你确保没有在这个TClientDateSet对象设置了字段对象的话,应该是没有问题的。
因为Data包里面的数据和你直接在数据库获取的数据是一样的。如果还有问题,那就可能
是ADO通信的问题,我来帮你测试一下吧。
 
用什么连结都差不多吧!〉
你用 Clientdateset 指到 DataProvider 设置数据库名称 ,在此基础之上进行汇总等等。
我们就是这样做的,没有错误!
 
我的也是,但好象bde没有问题,ado的有问题
 
1最好不用ms的ole db for oracle少好多东西。从oracle 网站上下在最新的drivers
2删除求和字段,在重建求和字段试试。
3 不用求和字段,手写代码实现,客户端用infopower
 
TO sunqi:
续上一个回答。
我又用ADO通信测试了一下,用的是ADO+SQL SERVER 7.0,是COM+结构(客户通过Midas
去联系COM+),但同样没有问题。
 
to Cash_HYJ :
谢谢你给我做实验,我也做了BDE+Oracle8i,COM+结构 ,结果是对的,有小数位
而ADO 却没有,看来是ADO+ORACLE 在COM+ 中出的问题,问题到底出在哪里了??
我曾直接用ADO 连ORACLE 求和是没有问题的。也许是设置的问题。
请大家帮一帮忙!!

 
TO sunqi:
不用谢,交流交流嘛。
你后台数据库管理系统是用ORACLE吗?那我建议你目前最好不要用ADO去连接ORACLE,
ADO是MICROSOFT公布的数据通信规范,但目前ORACLE8还不能很好地兼容ADO数据通信规范。
当你用ADO去连ORACLE时,会出现一些莫名其妙的错误,就象你碰到的。所以你还是用BDE去
连ORACLE好一点。
 
后退
顶部