各个高手:
    我在sql+delphi的程序中碰见一问题,我想在某个进程开始时锁定一条或一部分记录,此时别的程序用户只能查看但不能对此数据进行修改或删除,待我修改以后才能继续开放。如何解决?另外我想在dbgrid中自动监视sql库中某个数据表的数据,如何发现改动便刷新,如何解决?谢谢

解决方案 »

  1.   

       对于第一个问题,需要用到两个TQuery控件,一个用于锁定记录,另一个用于使锁定的记录可修改.如:第一个query的Sql为:Select * from 表 where 条件 for update nowait, 第二个query的Sql为:Select * from 表 where 条件. 这样,即锁定了记录,又
    允许设RequestLive 属性为true,用第二个Query控件进行修改.
      

  2.   

    1。如果是自己开发程序或设计阶段,可以用一个系统状态标志实现多进程的同步、互斥和协同;
    2。如果其它程序只有可执行文件形式,只有靠数据库的用户的授权和禁止实现,可以编制存储过程处理,在前端调用相应存储过程;
    3。如果是一个开发团队,可以构造记录级的权限控制,方法是把原表扩充一个权限控制字段,例如:“[作者=a] [编辑者=b,c] [读者=d,e,f,g]”,a,b,c,d,e,f,g可以是用户,当然也可以是进程ID.
    4。datasource的OnDataChange可以部分地解决你的问题,如果自己开发多个模块共用一个数据模块的话,在OnDataChange中调用refresh方法。如果是进程间的协调,只有在数据库端做文章,编写 update trigger,datasource上扩充扫描功能,监视数据的变化。