中国开发网: 论坛: 程序员情感CBD: 贴子 557463
haitao
又遇到新问题:一个金额字段(num(12,2))被当成bigint,报错:不支持此类型!
搜索到是sql_dialect的问题,但是在dbx的connection里的参数里加了sqldialect=3,还是不行
把数据库的级别也改为3,还是不行。。。。。。。。


Firebird的基本数据类型之Numeric类型问题。


TinTin



等级: 三流高手
贴子:113
积分:140
金币:0
注册:2005-8-15
第 1 楼

Firebird的基本数据类型之Numeric类型问题。
当用dbExpress时候,如果Numeric为Numeric(18,3),dbExpress总是提示错误:
SQL SERVETR ERROR:DATA TYPE UNKNOWN
Client SQL dialect 1 does not support reference to BigInt DataType

改为:DOUBLE PRECISION即可,但是,有些郁闷,Numeric(18,3)没有超过范围吧?
当Numeric(5,3)没有错误




本贴发表时间:2005-8-26 14:31:55   


TinTin



等级: 三流高手
贴子:113
积分:140
金币:0
注册:2005-8-15
第 2 楼


另外,如果用IBExpert工具,DECIMAL类型总是被系统转换成Numeric类型,郁闷中。




本贴发表时间:2005-8-26 14:35:49   


天下无雪



等级: 管理员
头衔:暗黑骑士
贴子:803
积分:762
金币:0
注册:2005-8-12
第 3 楼


1、请在连接时将dialect 级别改为3,这是一个非常重要的而容易犯的错误。Dialect 1不支持一些东西,比如不认日期型,不认BIGINT;
2、我用IBExpret,从没见过会将Decimal类型转为Numeric的。


[本贴已被 天下无雪 于 2005-8-26 18:07:10 修改过]


黄菊枝头生晓寒,
人生莫放酒杯干。
风前横笛斜吹雨,
醉里簪花倒著冠。
身健在,且加餐,
舞裙歌板尽情欢。
黄花白发相牵挽,
付与时人冷眼看。

本贴发表时间:2005-8-26 15:48:00   


haha168



等级: 论坛版主
头衔:哈哈168
贴子:171
积分:209
金币:0
来自:广东
注册:2005-8-23
第 4 楼


到dialect 3才是真正意义的精度数据类型,在dialect 1下面Numeric的精度最大是15位,也就是存放之样的数最大是能存放小数点位数为0的整数为15位的数,他的物理实现因dialect 1中不支持64位整数就把numeric类型当浮点数来处理,浮点数运行慢,而且有精度误差,如12.08(这个数本意是以numric类型存放),那到数据表中之后可能会变成了12.0799999999(早期用fb/ib的程序员是经常抱怨数据精度不准)。 只有到FB 1.5的dialect 3 ,Numrice的数据类型才以64位的整点方式存放,Numric的精度才准确。




本贴发表时间:2005-8-26 23:46:21   


TinTin



等级: 三流高手
贴子:113
积分:140
金币:0
注册:2005-8-15
第 5 楼


请问两位:
IBExpret连接FDB可以设置dialect 3,
如果用dbExpress,如果在程序中指定dialect 3呢?
是不是在FB的驱动设置呢?能否详细告诉?
先谢了




本贴发表时间:2005-8-27 0:19:46   


TinTin



等级: 三流高手
贴子:113
积分:140
金币:0
注册:2005-8-15
第 6 楼


我看到了,谢谢两位!




本贴发表时间:2005-8-27 0:21:04   


haha168



等级: 论坛版主
头衔:哈哈168
贴子:171
积分:209
金币:0
来自:广东
注册:2005-8-23
第 7 楼


在dbexpess中设定如下:

1.打开delphi7 新建一个应用程序.

2 找到SQLConnection组件,放置一个在窗体上

3 双击此组件弹出一个连接对话框,Drive Name,请选择interbase(如果没有安装对fb驱动) .

4 点击其上面有"+"字的按钮,新增一个连接名

5 在connection setings 中设定sqldialect 的值为3即可.

如果用脚本设定客户端连连为dialect 3可如下:
SET SQL DIALECT 3;注意他仅是设定客户端连接为dialect 3模式,不能改变数据库的dialect.如果要改变数据库dialect,请用
gfix –sqldialect 3 数据库文件 -user username -password 密码的形式改




本贴发表时间:2005-8-27 10:56:57   


TinTin



等级: 三流高手
贴子:113
积分:140
金币:0
注册:2005-8-15
第 8 楼


谢谢斑竹!




本贴发表时间:2005-8-27 20:16:43   


zzsczz



等级: 籍籍无名
贴子:5
积分:6
金币:0
注册:2005-10-27
第 9 楼


我的也是,,decimal变成numeric。。。。




本贴发表时间:2005-10-27 17:10:31   


tfrain



等级: 籍籍无名
头衔:风声雨声读书声
贴子:44
积分:45
金币:0
注册:2005-10-8
第 10 楼


numeric(nn,0) 会自动转换为int,bigint
我的blog:http://szhaitao.blog.hexun.com & http://www.hoolee.com/user/haitao
--以上均为泛泛之谈--
不尽牛人滚滚来,无边硬伤纷纷现 人在江湖(出来的),哪能不挨刀(总归是要的)
网络对话,歧义纷生;你以为明白了对方的话,其实呢?

您所在的IP暂时不能使用低版本的QQ,请到:http://im.qq.com/下载安装最新版的QQ,感谢您对QQ的支持和使用

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录