该死的小数点!!!(100分)

  • 主题发起人 主题发起人 pengxiaolin
  • 开始时间 开始时间
P

pengxiaolin

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序中动态建立表,要求小数点为两位,用fielddefs.add()显然不行,
用如下方法
Query1.SQL.text := 'Create Table "tab.dbf" ';
Query1.SQL.Add('(name CHAR(8), ye NUMERIC(14,2))');
Query1.ExecSQL;
发现如下问题:1、用foxpro打开该表时显示不是一个表,但在database desktop中能打开该表
2、输入数据(如1333.3333333)后发现表中储存的数据
小数点后输入几位就是几位,并不是两位。
要求 :象foxpro中新建表一般,能在建表时确定字段的小数位数。
不用程序方法如什么EditFormat或DisplayFormat之类的另行处理。
请各位大侠多多指点。
新学者的感叹:delphi真是难学!!!看来很简单的问题花了很多功夫
也不能搞定。
 
这是数据库引擎的问题
sql本身和文件类型的数据库不能100%兼容
解决方案有很多的,比如你自己提到的
但运行期间动态建立数据表的经典方法就是用fielddefs定义然后再create的,
你为什么说显然不行呢?
 
你可用Format的Function即可处理你的问题
 
自己定义显示结果的格式,
 
对lie:用fielddefs.add('ye',ftfloat,0,false)然后再createtable当然可以
新建一个表,问题是字段ye的小数位并不能定为两位。
对motar liu及youtoo:我需要的是新建一个表时就规定小数后几位,就如同在
foxpro中建一个表可确定小数后几位一样。若能这样在程序中我当然就不用什么
format及显示结果的格式了。我想这样应该是最简单的方法,问题是在delphi
中是否可行。
请各位大侠多多发表意见。
 
ftBCD可以定义BCD类型,precision确定存储精度
 
lie:具体怎么做?能不能详细些?
其实Tfloatfield也有一个precision属性确定存储精度,问题是不知道怎么用。
 
用ftBCD类型也不行,我试了,不管你给precision赋值多少,字段的小数位都是
四位。且建立的表用foxpro也不能打开,为什么?
怎么没人回答了?请各位多多指教啊!
 
再加两百分,请各位帮帮忙,发言的都有份。
 
>>Query1.SQL.Add('(name CHAR(8), ye NUMERIC(14,2))');

用DECIMAL(14,2)肯定没问题,PARADOX认识,创建后为BCD类型,
不知FoxPro是否能打开。估计不行!Hehe
 
这是BDE的问题,ACCESS、FOXPRO都会出现类似情况,请改用DAO做引擎。
 
回答都不满意,分给DOUD算了。
 
天哪!又碰到一个没得到答案就给分的"悲惨人士" :-)
给我100分,告诉你答案。
-- 本人虽然喜欢助人为乐,但一概只提供有偿服务 :-)
 
好久不上来了,温柔一刀,如你真的知道答案的话请先告诉我再给你一百分,决不失言!
 
这么久远的问题,难得你还没忘记,就告诉你答案吧:

首先,你必须保证创建的表是Foxpro类型,因此要修改
BDE Alias的default driver属性,-->Foxpro

其次,使用你的创建语句,
Query1.SQL.text := 'Create Table tab ';//注意区别
Query1.SQL.Add('(name CHAR(8), ye NUMERIC(14,2))');
Query1.ExecSQL;

不要高兴得太早,create table 后面的表名恰恰不能带扩展名.dbf,
否则就被创建成vidual dbase类型,而不能被foxpro识别了。

BTW:好像不是100分耶!刚刚注意到上面有一句“再加两百分”。

哈哈哈...
 
不会得到答案就又上不了网吧?
 
:温柔一刀
我有分 :100 给你!
问题: 表中 ye 例 类型为 numeric(9,2)
var
i: float ;
i := xx.FieldByName('ye').AsFloat ;
//由于没有类似 .AsNumeric 故用 AsFloat ,但变成了 浮点数,小数点后有
//很多位 ,如果 将此 float 写入表则 出错。
//关键问题是 numeric(9,2) 型的数据,在delphi如何 精确处理?
谢谢!


 
我确实是很久没上来了,温柔一刀,你的方法我还没有试,真的可行?
其实我早已找到另一方法了。
试了再给你分吧。
 
后退
顶部