如何存取Oracle Number(18)的字段?

光明山人 2001-05-17 05:18:00
各位大侠救命啊,有一个Oracle 8的表中一个字段的类型设计为Number(18),结果用TTable打开后发现是TFloatField类对象(本以为会是TLargeIntField类),AsFloat返回的数据类型为Float,精度只有15位,转换为串后不能正确显示,但用SQL Plus可以存取正确的数据。例程如下:

SQL:

CREATE TABLE TABLE1 (
INT64 NUMBER(18, 0)
)

Pascal代码:

var
s: String;
dbl: Double;
ext: Extended;
lgi: LargeInt;
begin
dbl := Table1.Fields[0].AsFloat;
ext := dbl;
lgi := Trunc(ext);
Str( lgi, s );

如果字段值为1234567890123456,则Table1.Fields[0].AsString为1.23456789012346E15,而s为1234567890123460。
...全文
334 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pipai 2001-05-21
  • 打赏
  • 举报
回复
谢谢agui,我也学了一招
光明山人 2001-05-18
  • 打赏
  • 举报
回复
谢谢pipai,也谢谢pure_cmh。

-->pipai
在Oracle中,Integer==NUMBER(38),也是TFloatField :)

我得学习怎么给分了。
pipai 2001-05-18
  • 打赏
  • 举报
回复
这种方法肯定可以,我已试过
query1.sql为select to_char(int64) from table1

var i : Int64;
s : String;
i := StrToInt64(query1.fields[0].asstring);
str( i, s );
showmessage(s);

pure_cmh 2001-05-18
  • 打赏
  • 举报
回复
关注!!!

pure_cmh 2001-05-18
  • 打赏
  • 举报
回复
不行的啦!我试过了!

最后那位被进位进掉了:(
pipai 2001-05-18
  • 打赏
  • 举报
回复
还有,如果你不想修改库结构,又想保证精度,还有一种笨方法,例:
query1.sql为select to_char(int64) from table1

var i : Int64;
s : String;
i := StrToInt64(query1.fields[0].asstring);
str( i, s );
showmessage(s);

pipai 2001-05-18
  • 打赏
  • 举报
回复
还有,如果你不想修改库结构,又想保证精度,还有一种笨方法,例:
query1.sql为select to_char(int64) from table1

var i : Int64;
s : String;
i := StrToInt64(query1.fields[0].asstring);
str( i, s );
showmessage(s);

pure_cmh 2001-05-18
  • 打赏
  • 举报
回复
存成char不行吗?



pipai 2001-05-18
  • 打赏
  • 举报
回复
oracle中的number本身就是实数,不过oravle 8中已提供了Integer类型,另,如用number,请在BDE设置中使用BCD选项

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧