开发环境delphi5.0+ado+sql server2000
现有三表如下:
dwb:单位表、dwlb单位列表、gongzibiao 工资表
dwb与dwlb结构相同,dwb中记录数与gongzibiao的记录数都不会更改。
Dwlb是我在查询时用的表,即根据用户从dwb中选取的单位,生成dwlb的内容。
我每次是这样做的,在执行查询时,先清空dwlb的内容,再根据用户从dwb中选取的单位生成dwlb的内容,后dwlb与gongzibiao建立联系,生成所需单位的统计数据。
   现存在以下问题,当有用户执行查询前,在另一表中做好标志,待用户查询完后再修改标志,此时另一用户才能执行查询,现问有没有好的方法把dwlb建在客户端,且原有的存储过程与视图能用,因查询统计较为复杂,还要往输出数据到华表中,故一查询执行需好几分钟,此时若有用户更更改dwlb,前一用户选的单位就被替换,从而使前一用户的查询结果出错!
注:本程序使用的存储过程与视图较多!
现征求好的解决方法!

解决方案 »

  1.   

    一个建议:既然DWLB只是从DWB中取出来的数据,为什么要另存一个表呢?与其想怎么解决它引起的问题,何不干脆不用这种方法,想想怎么优化查询语句,加快速度。
      

  2.   

    我有很多存储过程和视图都用的是dwlb!!!
      

  3.   

    DWLB要动态生成,建议用DWLB+机器名,机器名可通过API函数得到
      

  4.   

    把临时表名传入存储过程然后exec???
      

  5.   

    在存储过程中用临时表就可以了,
    或者你也可以用你的方式只要select出来以后就可以删表了,不过我个人不太赞同。
    存储过程能合并最好合并了,
    视图可以用临时表,不过如果数据量大需要多字段索引的话,就不太理想。
      

  6.   

    加强用户权限管理,将dwb副本放到客户端,进行定期更新
      

  7.   

    每个用户在客户端生成自己的dwb副本和dwlb,查询完毕再提交dwlb给服务端可以么?
      

  8.   

    不明白,你的dwlb表其实只是作为临时表用,干嘛要用一个实实在在的表呢?用查询应该可以代替吧。
      

  9.   

    其实,dwlb的作用就是一个临时表,既然作用一样,何不干脆改成临时表。
    或者还有一个方法,在客户端创建一个文本文件,把dwlb的内容按照一定格式写入该文本文件中,执行完成后,再删除文本文件中的数据,实际也就是一个缓冲问题。
      

  10.   

    假如你的很多储存过程涉及到dwlb,我建议你最好还是采用把表建到服务器上,优化查询速度,至于怕引起修改混乱,你可以采用事务处理,在一个用户使用表时,锁定表,操作失败就rollback。把表建到客户端上,只会导致网络负载加重,除非dwlb与服务器上的储存过程无关。