我在使用oracle 中遇到一个郁闷的问题.
TClientDataSet.xmlData的使用过程中,发现对于有的版本的oracle数据库在处理number类型字段数据时xmlData中的数据类型被保存为Fixed类型,但是数据并没有取到.但是对于其它版本的oracle数据库就没有问题.数据类型为r8
Oracle9i Enterprise Edition Release 9.2.0.1.0 - 64bit
<?xml version="1.0" standalone="yes"?>  <DATAPACKET Version="2.0"><METADATA><FIELDS><FIELD attrname="USERID" fieldtype="fixed" DECIMALS="4" WIDTH="255"/><FIELD attrname="USERNO" fieldtype="string.uni" WIDTH="20"/><FIELD attrname="USERNAME" fieldtype="string.uni" WIDTH="60"/><FIELD attrname="LIMITID" fieldtype="fixed" DECIMALS="4" WIDTH="255"/><FIELD attrname="USERPASSWORD" fieldtype="string.uni" WIDTH="60"/><FIELD attrname="COMPANYID" fieldtype="fixed" DECIMALS="4" WIDTH="255"/><FIELD attrname="PHONENUMBER" fieldtype="string.uni" WIDTH="26"/><FIELD attrname="ROLEID" fieldtype="string.uni" WIDTH="2048"/><FIELD attrname="ALTERID" fieldtype="fixed" DECIMALS="4" WIDTH="255"/></FIELDS><PARAMS/></METADATA><ROWDATA><ROW USERID="" USERNO="fmer" USERNAME="李明" LIMITID="" USERPASSWORD="8997A880D065" COMPANYID="" PHONENUMBER="1234567" ROLEID="100" ALTERID=""/></ROWDATA></DATAPACKET>Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit 
<?xml version="1.0" standalone="yes"?>  <DATAPACKET Version="2.0"><METADATA><FIELDS><FIELD attrname="USERID" fieldtype="r8"/><FIELD attrname="USERNO" fieldtype="string.uni" WIDTH="20"/><FIELD attrname="USERNAME" fieldtype="string.uni" WIDTH="60"/><FIELD attrname="LIMITID" fieldtype="r8"/><FIELD attrname="USERPASSWORD" fieldtype="string.uni" WIDTH="60"/><FIELD attrname="COMPANYID" fieldtype="r8"/><FIELD attrname="PHONENUMBER" fieldtype="string.uni" WIDTH="26"/><FIELD attrname="ROLEID" fieldtype="string.uni" WIDTH="2048"/><FIELD attrname="ALTERID" fieldtype="r8"/></FIELDS><PARAMS/></METADATA><ROWDATA><ROW USERID="21" USERNO="fmer" USERNAME="李明" LIMITID="99" USERPASSWORD="8997A880D065" COMPANYID="3" PHONENUMBER="1234567" ROLEID="100" ALTERID="31"/></ROWDATA></DATAPACKET>

解决方案 »

  1.   

    9.0.1.1.1create table temp123(c1 number,c2 varchar2(100));
    insert into temp123 select 1,'1' from dual union all select 2,'2' from dual;<?xml version="1.0" standalone="yes"?>  <DATAPACKET Version="2.0"><METADATA><FIELDS><FIELD attrname="C1" fieldtype="fixed" WIDTH="38"/><FIELD attrname="C2" fieldtype="string" WIDTH="100"/></FIELDS><PARAMS/></METADATA><ROWDATA><ROW C1="1" C2="1"/><ROW C1="2" C2="2"/></ROWDATA></DATAPACKET>
      

  2.   

    那么这个问题是不是由于oralce版本不同造成的。如果考虑到系统的可移植性,我们是否需要在系统中自己来生成那个xml?或则有更好的解决方法?
      

  3.   

    r8表示float,应该不影响你的数据移植
      

  4.   

    现在的问题是我从高版本向低版本的移植。在高版本中number保存为r8,在低版本中保存为fixed,但是数据到xml中的数据变成了空。所以现在的问题是我移植过来后,所有的number字段在客户端都取不到了。
    有没有解决方法,两天了,系统现在不可用,郁闷中......