TCustomADODataSet组件的一些错误

Delphi 7中TCustomADODataSet组件的一些错误,小结如下:    
     对应的单元文件是ADODB.pas。
     
     一、nvarchar字段长度错误    
     在SQL Server数据库表中定义了nvarchar类型的字段,但程序中得到的TField对象的Size属性只有数据库中的一半。同时这还会导致一个不明症状:在程序中动态添加的Lookup字段若结果值类型为TWideString,则汉字串会被截断一部分并在末尾出现问号。    
     1、找到procedure TCustomADODataSet.InternalInitFieldDefs;
     2、定位于这样一段:

case FieldType of
     ftString, ftWideString, ftBytes, ftVarBytes, ftFixedChar:
     FSize := F.DefinedSize;



          3、 改成这样:

case FieldType of
     ftString, ftBytes, ftVarBytes, ftFixedChar:
     FSize := F.DefinedSize;
     ftWideString:
     FSize := F.DefinedSize * 2; // 对于宽字符,其字节长度为定义值的2倍



          
     二、浮点数的小数部分丢失位数    
     TCustomADODataSet.EnableBCD默认为True,限制了小数位为4,这本是为了达到高精度,但是当数据库表中numeric字段定义的小数位超过4时,就不得不舍弃精度,得按实际小数位来做了:    
     1、找到procedure TCustomADODataSet.InternalInitFieldDefs;
     2、定位于其中的过程 procedure AddFieldDef(F: Field; FieldDefs: TFieldDefs);
     3、找到第一条语句:FieldType := ADOTypeToFieldType(F.Type_, EnableBCD);
     4、改成这样:

   // Added by iMe
     if F.NumericScale >4 then
     FieldType := ADOTypeToFieldType(F.Type_, False)
     else
     // -------------
     FieldType := ADOTypeToFieldType(F.Type_, EnableBCD); // 这行是原来的



  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值