紧急,如何解决SQLSERVER中小数点后面6位数的问题?200分(没办法,至今没人能够解决,高手请进!) (200分)

C

chnplzh

Unregistered / Unconfirmed
GUEST, unregistred user!
该问题已经提出过,但仍然不能解决,只好再次请教各位大侠了!

本人在Win 2000+Delphi 6.0+SQL Server 2000中编程碰到以下难题,请各位侠客帮忙!
1、数据表 TABLE1 有一字段为 NAME1 numeric(12,6);
2、在Delphi中用ADO连接,ADOQuery定义为select * from TABLE1,DBGrid显示,但只能
显示NAME1的小数点后4位,如果定义成Float或Real则可以显示;
3、后来用ODBC测试,也是如此;但在SQL Server自带的查询分析器中测试,则可以完整
显示小数点后6位。
请问各位侠客如何解决该问题?特别谢谢!

以下是前次提问时各位侠客给出的答案。

来自:Qv15, 时间:2003-3-20 17:32:00, ID:1698176
写存储过程,把其格式化,round()
其用法看SQL 的联机帮助。


来自:chnplzh, 时间:2003-3-21 7:38:00, ID:1699081 | 编辑
谢谢Qv15,该方法可行,但总觉得不方便,即Select后面的字段名要逐个列出来,
没有Select * 来得方便。此外,总觉得实质性问题没有得到解决,是不是Delphi
有BUG。再次谢谢!


来自:copy_paste, 时间:2003-3-21 7:51:00, ID:1699083
ADOTable1.EnabledBCD := False;


来自:chnplzh, 时间:2003-3-21 8:09:00, ID:1699096 | 编辑
非常谢谢copy_paste,刚刚测试,完全可行,再次谢谢!

本人(chnplzh)自我检讨:
其实后面发现仍然不行,将EnabledBCD := False,它不管小数点原来是几位,
都是显示11位,后来看一下DEPHI帮助文件,也确实如此。
 
是不是系统设置有问题,
可在控制面板/区域选项/数字/小数点重新设置看看。
 
不是系统设置问题,我在控制面板/区域选项/数字/小数点重新设置试过,但仍然不行。
 
没试过
你可以看看DBGrid的设置
要不就把此字段的类型改成Float型的
 
将此字段的类型改成Float型的,或者formatplay:=######.######
 
改为float
displayformat 0.000000
 
1、以上各位侠客,非常谢谢,但仍然行不通;
2、我用的是ADOQuery,Grid是Dev Express公司的 dxGrid,所以仍无法设置。
3、即便设置displayformat 0.000000,它也只是将原来6位数转为4位数后加 0 变6位数。
4、本人一直想不通,为什么ADOQuery直接返回来的数据会与SQLServer中的数据不一样呢?
 
你的问题我也是遇到,我想应该是Delphi的Bug
我是把Numeri改为Float了
之后在你保存数据的时候相应的把它保存位6位精度就行了
 
谢谢Carson_zzd, 该方法只能是权宜之计,但不是好办法,真不希望是
Delphi有BUG!
 
其实后面发现仍然不行,将EnabledBCD := False,它不管小数点原来是几位,
都是显示11位,后来看一下DEPHI帮助文件,也确实如此。
这句话什么意思
上面ADOTable1.EnabledBCD := False的这个方法我测试可以阿

 
TO:mazhayang
以下摘自Delphi帮助文件ENABLEBCD的帮助信息:
Note:For numeric values with more than 4 digits to the right of
the decimal place, use of TFloatField is generally better.
This is because TBCDField uses the currency data type that has a fixed
scale of 4 decimal places.
这就是问题的所在。

 
将数据集中的永久字段定义 改为Float型字段,则可以解决此问题,不必修改数据库定义
需要建立永久字段对象,建立的时候选择字段对象的类为TFloatField
 
在查詢語句中用
SELECT *, CONVERT(varchar, NAME1) as Name2 FROM yourtable
這樣顯示出來的都是有六位小數
 
to stuwe:
将NAME1由数字类型转换成字符类型, 那我录入怎么办?
说到底, 可以使用变通的方法, 我也已经解决, 但总觉得不爽. 为什么要变通呢?
TFLOATFIELD与TBCDFIELD?
 
不知道你有沒有試過real在DBGrid中顯示出來的結果,
怎么會有那么一串數字,

錄入,直接在DBGrid中錄入資料,我從來不這樣做.
至于為什么沒有顯示六位,只顯示四位,就有點類似real顯示出來為什么不是在SQL Server中看到值,
而是近似值一樣.
 
to stuwe:
录入:指使用DBEDIT控件;
其实,有时也会使用DBGRID录入,如一对多录入操作的情况就是如此。
 
我從來都不再DBEdit或DBGrid中錄入數據
那樣你不覺得安全有問題嗎?
 
to stuwe:
不用dbedit也可以,但变得编程量加大,维护不方便。
 
我覺得安全還是比較重要
 
to stuwe:
这样说也不错,安全第一.其实我挺怀念Foxpro数据库,尤其是小数点设置,
如99.9999,一输入到小数点第四位,便自动跳到下一个输入点,非常方便。
但在Windows下编程,自己控制,非常麻烦。尤其是录入数据量大的时候,
有时还得使用鼠标。
不管怎么说,我现在编的Windows程序,界面很漂亮,而且使用很方便,
但还是不如DOS下的程序(当然,也有不少优点,在此不提),至少我单位
的操作员是这么说得。
顺便说一下,您的E-mail是什么?我可以将我最近编写的程序和以前编写的
程序界面发给您,一起多聊聊.
我的E-MAIL:chnplzh@163.COM.
谢谢!
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
968
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部