我要客户端通过在一个dbgrid中,选择多条记录,然后批量提交到服务器上,服务器上的表的主键是逐条做+1操作的(这样做是不是增加了实现的困难,有朋友劝我用GUID或者自己做一个随机数做为主键,各位大虾的意见呢?)
我目前只能实现单用户的操作,基本原理是:在客户端,首先判断选中的记录是否是重复记录,接着ClientDataSet.Insert,然后在服务器端得到表中最后一条记录的主键,来生成新记录的主键(+1操作),同时加判断是提交一条还是提交多条记录,判断如果是多条,就要在新主键的基础上计算其它记录的主键,每次计算好主键就开始附值操作,然后post,最后通过一个按钮ApplyUpdates(0)。
目前存在的问题:1、感觉大部分操作都在客户端,很容易出错,而且也很繁琐。
                2、对于多用户提交时就很容易出错了,因为如果前面要提交的记录还没有提交上去,而后面的人读得也是还没有更新的表的最后一条记录的主键,这样很容易出现主键重复的错误。
                3、用ApplyUpdates是不是不安全呢?我在论坛上看到有人说商业最好别用,而是自己来写提交过程,那么怎么来实现呢?
大家看看我该怎么修改呢,这些错误该怎么避免呢?谢谢各位大虾,星星们都快来看看阿。

解决方案 »

  1.   

    1在服务端写一个提交更新函数,在服务端写接受参数,转化成sql语句,然后再在客户端调用
    2正如你所说的用GUID或者自己做一个随机数做为主键
      

  2.   

    关于主键的自动生成问题,我个人认为在数据库端写存储过程可能要稳妥一些。如果放在客户端或中间层,在多用户并发访问的情况下都容易出现主键重复的问题。用 ApplyUpdates 其实也可以自己来写提交过程——自己编写 DataSetProvider 的 BeforeUpdateRecord 事件过程。
      

  3.   

    哦,原来是在DataSetProvider中的BeforeUpdateRecord中写哦,我原来还以为是在ClientDataSet中写,在ClientDataSet中写是不是就是在中间层些阿,ApplyUpdates是不是就是在中间层做的,那么在DataSetProvider中写,怎么来得到客户端通过附值得到的批量记录呢?