D6的BUG还是我的错误?大家往这看。。。(300分)

  • 主题发起人 主题发起人 djdsz
  • 开始时间 开始时间
D

djdsz

Unregistered / Unconfirmed
GUEST, unregistred user!
有如下的一个表,为兼容考虑,分别在IB6和ORACLE9i中实现
create table testdbx
(
a varchar(5) not null primary key,
b numeric(15,0),
c varchar(20)
);
因为在ORACLE中INTEGER实际是numeric型字段,而在interbase中是integer型,为兼容,都
建成numeric型。
向表中插入几条数据,注意将b的值分别设置成[-9..9]之间的值和不在该范围的值,如10,-10
在d6中新建一个工程,用DBX方式连接到INTERBASE数据库,取出TESTDBX表的数据,看看得到的
数据!!!连接到ORACLE,没问题了。
请大家帮我解决这一个问题。。。
 
来自:DBExpress入门.
三、单向数据集(Unidirectional Dataset)
为什么dbExpress那么快?答案是,它使用了单向数据集。它提供了一种高速、轻巧的存取数据库信息的技术,它能够向数据库服务器发送SQL指令,如果返回数据,它也能够获得访问这些数据的游标。但是,它只能处理单向、只读的游标、它不在内存中进行数据缓存,这样可以提高数据存取速度并使用最少的资源。天下没有不要钱的午餐,由于使用了这种单向技术,dbExpress相对与原来的TDataSet,有了不少限制、
四、dbExpress的限制(Limitation)
1、在数据集中导航(即在数据集中跳转)的方法只省下First和Next。大多数其它方法都会导致产生异常。其它(比如GotoBookMark)什么都不做。
2、你无法直接对数据集进行修改,CanModify属性永远是false,如果你想用什么Edit之类的方法对其进行编辑,那都是徒劳的。你应该已经想到直接用一条UPDATE便可解决了吧?
3、数据过滤不能用了,当然,直接用SELECT的WHERE子句吧。
4、最讨厌的是Lookup Field不能用了,如果你习惯用它,那真的是很麻烦。用JOIN吧……
 
DBX是单向的不错,我也知道用它,但本问题的关键是字段问题,是字段取出的数据是错误的。
 
是不是字段类型的问题? 改成Integer呢?
 
D6,是有些不稳定,但你的好像还是类型问题
 
是字段类型问题,我知道,但我是为了和Oracle兼容,所以不能使用Integer。。。
我插入的数据是
'AA',1,'AA',
'BB',2,'AA'
取出的数据是
'AA',=,'AA'
'BB',?,'AA'
字段类型是TFMTBCDField,明显是数字型,而结果却成了字符,怪事。但使用ORACLE数据库
做同样的事却没问题。注意,TFMTBCDField是Delphi 6默认的,我没改动过。用IBX时,字
段类型是TLargeIntField,没错了。
我的程序要求自动兼容不同数据库(M$ SQL、SYBASE,Oracle,DB2,InforMix,MySQL,CA400,
Interbase。D6对M$ SQL也会发生同样问题(建立时使用的是ORACLE,出现TFMTBCDField,
DBX连接。运行时使用M$ SQL,ADO连接,由于已经产生永久字段,所以也是TFMTBCDField,
运行结果与Interbase一样。)
但将表结构改成....b numeric(15,2)...不管使用ORACLE,Interbase还是M$ SQL结果均正
确。并且只有当b大于-10小于10的数才会出现该错误,所以,我认为是D6的一个BUG,请各位
测试测试。 谢谢。
Ares
 
建表错误,很多不能有b numeric(15,0)这种表达,
采用b numeric(15)试试;
 
>>建表错误,很多不能有b numeric(15,0)这种表达,
>>采用b numeric(15)试试;
不会是建表错误吧,在数据库中查看一点问题都没有的,问题是D6遇到这种情况就取不了
正确的数据(DBX连接),但用D6的IBX连接就可以取到正确的数据。
 
關注。。。。。[:D]
 
大虾们看看吧
 
大部分你的错巴!那里有那么多bug
 
to :taozhiyu
你试试看看好吗?我不知道错在什么地方,现在问题是,IBX可以有正确结果,但DBX得到
的是乱码(非数字型)
 
有答案了,原来是D6 Interbase DBExpress驱动程序的错,以下是Borland Dbx新闻组的说法:
In IB6,I Created a Table use the following Scripts:
Create table DBXTest
(
A Numeric(15,0) not null primary key,
B varchar(20)
)
after create this table,I insert some records use Scripts:
insert into table DBXTest values(1,'AAAAA');
insert into table DBXTest values(2,'AAAAAA');
insert into table DBXTest values(11,'AAAAA');
After Above,I write a program use DBExpress Component in D6 to fetch
records,the following is the Result:
A B
= AAAAA
? AAAAAA
11 AAAAA
Field A is TFMTBCDField,everyone can find the result is wrong,but when use
ibx,the result is right.
what wrong happened!?????
My OS is Win2000 Server Chinese(GBK) Version.

dbx driver for IB is bloken. Any NUMERIC or DECIMAL field with scale = 0
will give you this problem.
--
Sergio Samayoa
L骻ica Software
http://www.geocities.com/logicasw/
This is a bug in the dbExpress driver that occurs when the scale is zero for
Numeric and Decimal types.
--
Bill
(TeamB cannot answer questions received via email)
Anybody heard when this show stopper will get fixed?
Olaf
 
多人接受答案了。
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部