现在我用了Adoquery的updatebatch模式来录入数据,当某个字段录入了已存在的值时 ,就给予提示。注意:是即时提示,不是最后提示,即光标离开该行时就提示。我在beforepost()中写了校验代码,但是需要判断该值是否存在时,还是要遍历其他记录,这就导致循环触发beforepost()。现在效果很不好。有什么好办法吗?

解决方案 »

  1.   

    很简单,你另外用一个StringList,在每次Post后,都用该字段全部内容更新StringList值。
    这样,每次beforepost前,比对该字段与stringlist值是否相同,如此即可。
      

  2.   

    frank_lee_cn:在每次Post后,都用该字段全部内容更新StringList值。-------------这不是要读取数据集的所有记录吗?这样会再触发beforepost()的。麻烦就在这点。
      

  3.   


    “某个字段录入了已存在的值时 ,就给予提示”
        就必须遍历全表的该字段。关键问题是查询的时间会越来越差
       用StringList记录所有值,再从中查找是否重复,可以一定程度减小查询的开销,但多客户端时,该方法有时失效,比如几个客户端同时录入相同值。个人觉得应该从数据库查询开始优化,比如改字段的索引建了没?这样会快很多。或者其他方式尽量减少查询。
      

  4.   

    lzg827:现在不是开销的问题,现在不用遍历全表,而只是数据集中的录入记录。现在的问题是,如果遍历,就会触发beforepost(),而我的校验代码正是在beforepost()中写的。这样,不等于循环了吗
      

  5.   

    我一般把校验的事情,放在插入之前的代码。没有放在beforepost()中,其实效果的差别不是很大,但省事,呵呵。
      

  6.   


    post到临时表去,就不会有并发问题了
      

  7.   

    kaikai_kk:post到临时表中,还是会触发beforepost()啊,现在不是并发的问题。
      

  8.   

    这种情况,建议楼主用单条录入。不要用dbedit等控件,先用edit等接收输入,然后在按下提交或保存时,用SQL语句校验是否有重复的记录,有则让用户修改,没有则用sql语句或操作ado,保存至数据库。推荐用SQL语句,这样可避免由多用户同时操作引起的一些问题。