N-Tier 开发问题::Oracle中的Numeric类型通过ADODataSet传到TClientDataSet到客户端为什么总是取整?(200分)

  • 主题发起人 主题发起人 ZD.Wang
  • 开始时间 开始时间
Z

ZD.Wang

Unregistered / Unconfirmed
GUEST, unregistred user!
N-Tier 开发问题?
在开发MTS/COM+应用中,后台数据库采用Oracle8i中间层COM+和ADO,客户端用TClientDataSet
显示数据。Oracle中的Numeric类型通过ADODataSet传到TClientDataSet到客户端为什么总是取整?
代码:
 
我帮你做个测试,明天上午给你结果吧。
QQ:77056803
记住加分给我。
 
你用ADO连接Oracle在COM+应用中没有遇到事务方面的问题吗?你的ADO用的是谁的Provider?
(MS的还是Oracle的?)如果是Oracle的有没有安装其它的什么东西?服务器组件是EXE的
还是DLL的?
这个问题我很感兴趣,因为开始用COM+的时候我就是用ADO失败后才用BDE的,用BDE一切正常。
 
ADO驱动用的是MS的。
服务器用DLL封装,运行在Win2000Server的组件服务中。
Client run on Win95/98(IE5.5)
 
奇怪……你的应用服务器是用Transactional DataModule向导建立的吗?我用此向导建立的
项目,如果是用ADO访问数据库,就会出现“不能连接到事务”之类的错误。
你的程序能发给我看一下吗?我们一起研究一下(不需要任何业务逻辑,只要可以被客户调
连接并取得数据的裸组件就行)
 
ADODataSet和TClientDataSet的DisplayFormat设置为####.00便可以了
 
Thanks flee. 你给出的是一个好想法,但是还没有解决。
 
//客户端ClientDataSet保存的XML文件。
//------------------------------
<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD attrname="MTNO" fieldtype="string" WIDTH="16"/>
<FIELD attrname="HPTLCODE" fieldtype="string" WIDTH="10"/>
<FIELD attrname="RECIPECODE" fieldtype="string" WIDTH="16"/>
<FIELD attrname="RECIPELISTCODE" fieldtype="string" WIDTH="16"/>
<FIELD attrname="CHARGETYPECODE" fieldtype="string" SUBTYPE="FixedChar" WIDTH="2"/>
<FIELD attrname="PARAVALUE" fieldtype="string" WIDTH="60"/>
<FIELD attrname="CHARGEITEMCODE" fieldtype="string" WIDTH="50"/>
<FIELD attrname="CHARGENAME" fieldtype="string" WIDTH="60"/>
<FIELD attrname="FEEAMT" fieldtype="fixed" WIDTH="38"/>
<FIELD attrname="EARLYSELFPAYSCALE" fieldtype="string" WIDTH="40"/>
<FIELD attrname="SELFPAYSCALE" fieldtype="string" WIDTH="40"/>
</FIELDS>
<PARAMS/>
</METADATA>
<ROWDATA>
<ROW MTNO="2003031400000000" HPTLCODE="2203000001" RECIPECODE="1" RECIPELISTCODE="1" CHARGETYPECODE="01" PARAVALUE="甲类药" CHARGENAME="甲类药" FEEAMT="500" EARLYSELFPAYSCALE="0" SELFPAYSCALE="1"/>
</ROWDATA>
</DATAPACKET>
//---------------------------------------------------
数据库中的FeeAmt的Value = 500.02
从上面文件分析,字段FeeAmt数据类型fixed转换为TDataType类型TBCDField类型。
这说明从ADO->TClientDataSet转换中Delphi就给转换错误,转换方法用TDataSetProvider.
问题依然存在,待高手解决。
另外我们在SQL中用to_char(FeeAmt) as FeeAmt可解决显示小数问题,但无法修改该字段。
 
后退
顶部