而在TTABLE中却可以,是不是有什么特殊设置?
为了测试这个问题,我在SYBASE中建了一个表。
create table temptest1(
testint1 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint2 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint3 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint4 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint5 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
)
在TQuery组件中,五个变量统一设置成DefaultExpression设置成0.00,DisplayFormat设置成了0.00,但新建记录(APPEND)时显示为
0.00 0.00 0.00 空 空
也就是说前三个变量的默认值是设置成功了的,但后面的两个变量就出问题了。用TTABLE设置则一切正常。
我刚才在大富翁上搜索,看到也有人提过这个问题,但一直没有结果。
这种情况太怪异了,难道是TQuery组件的BUG?
盼高人解决,谢谢。
为了测试这个问题,我在SYBASE中建了一个表。
create table temptest1(
testint1 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint2 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint3 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint4 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint5 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
)
在TQuery组件中,五个变量统一设置成DefaultExpression设置成0.00,DisplayFormat设置成了0.00,但新建记录(APPEND)时显示为
0.00 0.00 0.00 空 空
也就是说前三个变量的默认值是设置成功了的,但后面的两个变量就出问题了。用TTABLE设置则一切正常。
我刚才在大富翁上搜索,看到也有人提过这个问题,但一直没有结果。
这种情况太怪异了,难道是TQuery组件的BUG?
盼高人解决,谢谢。
补充一下:即使使用TTABLE,只要用了Cachedupdates:=true,就会出现和TQUERY同样的现像,照这样看问题应该是出在Cachedupdates上。
要怎么设置或是怎么处理才能成功设置默认值呢?我现在如果改成非缓存更新(就是不用TUPDATESQL,Cachedupdates:=false),程序会作极大的改动(自定义组件和许多地方都要重新编码,而且还不知道效果如何),我就死定了。我愿意再拿300分只要能解决这个问题。求求大家帮我一下呀。
因为delphi本身的缓存更新,你可以详细看一下DELPHI的帮助!
造成这个原因是因为paradox数据库,如果你不用缓存更新就不会存在这个问题!
DELPHI的缓存更新是在内存中建立一个paradox的数据库,
而paradox数据库本身并不是一个关系型的数据库,它本身是文本型的数据库。
它所建立的索引之类的需要用到数据库本身的一些资料来进行保存!
因为占用的数据库的字段类型和实际的索引需要,
它的方式是用用后两为数据字段的方式来实现他的过程!
而这个过程和DefaultExpression有冲突造成的!
那就是在你实际建立的数据库的后边在增加两个字段就可以了!
实际上来说就是把他占用的和DefaultExpression错过就可以了!我想恐怕也只能有这个办法了!
create table temptest1(
testint1 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint2 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint3 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint4 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint5 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
a1 任意类型 , //此为我加
a2 任意类型 , //此为我加
)
不过相对于这中机制来说已经比PB等之类的要实现的方式和数据的转化过程要方便的多了。
我个人认为这已经是最为完美的解决方式了!
create table temptest1(
testint1 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint2 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint3 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint4 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint5 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testbit6 bit default 1 not null,
testbit7 bit default 1 not null,
testbit8 bit default 0 not null,
testbit9 bit default 1 not null,testint10 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint11 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint12 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint13 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
GXSJ datetime default GETDATE() not null
)testint1-5 DefaultExpression:=0,testbit6-9 DefaultExpression:=true,testint10-13 DefaultExpression:=0,
执行新建操作,结果:
testint1-5 = 0 ,testbit6-8 = 空,testbit9 = true,testint10-11 = 0;testint12-13 = 空。
create table temptest1(
testint1 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint2 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint3 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint4 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint5 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testbit6 bit default 1 not null,
testbit7 bit default 1 not null,
testbit8 bit default 0 not null,
testbit9 bit default 1 not null,testint10 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint11 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint12 DECIMAL(9,2) DEFAULT 0 NOT NULL ,
testint13 DECIMAL(9,2) DEFAULT 0 NOT NULL,testbit14 bit default 1 not null,
testbit15 bit default 1 not null,
testbit16 bit default 0 not null,
testbit17 bit default 1 not null,
GXSJ datetime default GETDATE() not null
)
testint1-5 DefaultExpression:=0,testbit6-9 DefaultExpression:=true,testint10-13 DefaultExpression:=0,testbit14-17 DefaultExpression:=true
执行新建操作,结果:
testint1-5 = 0 ,testbit6-8 = 空,testbit9 = true,testint10-12 = 0;testint13 = 空,testbit14-17 = 空。为什么会是这种结果呢?照我想像结果再怎么前面也应该是 testint1-5 = 0 ,testbit6-9 = true。可结果却完全出乎预料。这是怎么回事呢?
缓存更新本来就是DELPHI处理多表提交的一种没有办法的办法!
它本身的安全性就不是很高的!而且在内存中建立的表为paradox,
并且和DefaultExpression非常大的冲突,最好还是不要用的好!
这个冲突我感觉根本就没有办法来解决!只能采用一些变向的方式!
我建议你还是在增加的时候给他付一个值或许更好些!OVER,结贴。
再次感谢dickeybird888(于伟刚) 的热心帮助。已在非技术区开三贴送分。
http://expert.csdn.net/Expert/topic/2855/2855146.xml?temp=.5581934
http://expert.csdn.net/Expert/topic/2855/2855145.xml?temp=.9117395
http://expert.csdn.net/Expert/topic/2855/2855142.xml?temp=.9865991