而在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?
盼高人解决,谢谢。

解决方案 »

  1.   

    谢谢于伟刚的指点。你说的是DefaultExpression里设置的值会覆盖数据库里所设置的默认变量吗(我的E文不太好)?可我现在的问题是DefaultExpression里设置的值无效(设置Cachedupdates:=false就能正常使用),这是怎么回事呢?
    补充一下:即使使用TTABLE,只要用了Cachedupdates:=true,就会出现和TQUERY同样的现像,照这样看问题应该是出在Cachedupdates上。
      

  2.   

    没有人知道吗?
    要怎么设置或是怎么处理才能成功设置默认值呢?我现在如果改成非缓存更新(就是不用TUPDATESQL,Cachedupdates:=false),程序会作极大的改动(自定义组件和许多地方都要重新编码,而且还不知道效果如何),我就死定了。我愿意再拿300分只要能解决这个问题。求求大家帮我一下呀。
      

  3.   

    其实这个问题是DELPHI本身的问题!
    因为delphi本身的缓存更新,你可以详细看一下DELPHI的帮助!
    造成这个原因是因为paradox数据库,如果你不用缓存更新就不会存在这个问题!
    DELPHI的缓存更新是在内存中建立一个paradox的数据库,
    而paradox数据库本身并不是一个关系型的数据库,它本身是文本型的数据库。
    它所建立的索引之类的需要用到数据库本身的一些资料来进行保存!
      

  4.   

    实际上它建立的索引文件之类的完全是通过本身的数据库文件来实现的!
    因为占用的数据库的字段类型和实际的索引需要,
    它的方式是用用后两为数据字段的方式来实现他的过程!
    而这个过程和DefaultExpression有冲突造成的!
      

  5.   

    而实际解决的办法,我想可能只有一个!
    那就是在你实际建立的数据库的后边在增加两个字段就可以了!
    实际上来说就是把他占用的和DefaultExpression错过就可以了!我想恐怕也只能有这个办法了!
      

  6.   

    也就是说你在你建立的数据库后边加两个无用的字段就完全可以了!
    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        任意类型 ,    //此为我加
    )
      

  7.   

    缓存更新本身,就是DELPHI机制中的一个不得以而为之的一个方法!
    不过相对于这中机制来说已经比PB等之类的要实现的方式和数据的转化过程要方便的多了。
    我个人认为这已经是最为完美的解决方式了!
      

  8.   

    谢谢于伟刚的解释。但好像不是‘它的方式是用用后两为数据字段的方式来实现他的过程!’。感觉DELPHI的缓存更新很混乱。我新做了一个试验:
    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  = 空。
      

  9.   

    考虑到错位问题,我又重新建了一个表:
    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。可结果却完全出乎预料。这是怎么回事呢?
      

  10.   

    刚才看到的dickeybird888(于伟刚) 的短信,一同加进来,收藏此贴。
    缓存更新本来就是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
      

  11.   

    哇,我没有看错吧?怎么dickey能连续回复8次?难道中间有谁的回复被删除了?