在设计数据库时我们常常们在每个表中做一个主键,然后设置其为自动增长,但是在SMARTCLIENT中却出现了问题。SMARTCLIENT中最重要的一点就是可以实现离线浏览,离线的前提是数据缓冲到了本地。前段时间研究SMARTCLIENT—ISSUEVISION,在自己试着在其基础上搭建自己的软件时问题就出来了
本地缓冲清空然后 将数据库中的数据清空时就出现了这样一个问题,在本地建立一个数据在DBGRID上会显示出两条相同的记录,一条是由DAGASET创建的ID为0的数据一条是数据库中检索回来的数据ID为数据自动编号产生。一开始死活解决不了这个问题。偶然间在《MSDN开发精选》中看到这样一段话。“要避免这种情况,建议在使用数据源自动增量的列以及DATASET上自动增量的列时,将DATASET中的列创建为AutoIncrementSetp的值等于-1并且AutoIncrementSeed值等于0,另外,还要确保数据源生成的自动增量标识值从1开始,并且以正阶值递增。因此,DATASET为自动增量值生成负数,与数据源生成的正自动增量值不冲突。另外一个选择是使用GUID类型的列,而不是自动增理的列,生成的GUID值的算法应该永远不会使数据源中生成的GUID值与DATASET中生成的GUID值一样。如果自动增量的列只用作唯一值,而且没有任何意义,就考虑使用GUID代替自动增量的列。它们是唯一的,并且避免了使用自动增量的列所必需的列所必需的额外工作”
到此问题全部解决
本地缓冲清空然后 将数据库中的数据清空时就出现了这样一个问题,在本地建立一个数据在DBGRID上会显示出两条相同的记录,一条是由DAGASET创建的ID为0的数据一条是数据库中检索回来的数据ID为数据自动编号产生。一开始死活解决不了这个问题。偶然间在《MSDN开发精选》中看到这样一段话。“要避免这种情况,建议在使用数据源自动增量的列以及DATASET上自动增量的列时,将DATASET中的列创建为AutoIncrementSetp的值等于-1并且AutoIncrementSeed值等于0,另外,还要确保数据源生成的自动增量标识值从1开始,并且以正阶值递增。因此,DATASET为自动增量值生成负数,与数据源生成的正自动增量值不冲突。另外一个选择是使用GUID类型的列,而不是自动增理的列,生成的GUID值的算法应该永远不会使数据源中生成的GUID值与DATASET中生成的GUID值一样。如果自动增量的列只用作唯一值,而且没有任何意义,就考虑使用GUID代替自动增量的列。它们是唯一的,并且避免了使用自动增量的列所必需的列所必需的额外工作”
到此问题全部解决