我现在做了小管理系统,其中由于我用到了临时表,起的临时表名为表名+用户ID,然后在该用户登录之后,我就把用户表里的登录判断字段改为TRUE,退出再改回False。但是我发现,如果程序发生异常退出,则就无法把判断字段改回False,那么改用户下次就无法再登录系统,因为他已经在使用中了。我改怎么处理这个问题???谢谢,在线等候,及时结分。

解决方案 »

  1.   

    这个问题我做过 我说说我的想法 你参考一下
    登陆的时候写如一个文件 ini或者text 设标志flag=1
    正常退出改为 2 你登陆的时候检查一下 如果为1说明没有正常退出
    你就强行登陆
      

  2.   

    使用全局变量行不?初始化为FALSE,如果用户登录为TRUE,退出为FALSE,程序发生异常退出重进入自动为FALSE。
      

  3.   

    TO:楼主,就算你的程序是异常退出,你在你的程序的destroy事件中还是来的及写修改状态的事件的吧
      

  4.   

    TO sunny518(灵犀) :
       谢谢你的想法。不过,我想,由于我们的系统是多用户的,在局域网内使用,那么我在本地机上的ini配置文件似乎不能起到控制的作用啊。呵呵,还有其它方法吗?
    TO  hjb8000(北极熊):
       不是很明白你的意思,如果我使用全局变量的话,那我也只在改程序中有效,对其他用户的登录似乎不能起什么作用啊。
      

  5.   

    TO Drate(鸟窝里的虫) :
       我刚试了,不行啊。我原来是在Mainform的OnClose事件中更改的。还能有什么方法吗?
      

  6.   

    用try...except进行处理试试!!!
      

  7.   


    服务器启动或退出的时候应该对这个临时表名为表名+用户ID进行强行设所有标志为false;
    服务器运行的时候你可以用ini  写一个拥护名 和一个标志
    为什么呢 用户不可能换来换去的换机子吧 肯定他异常退出还是会使用这台机器上
    你就在一台机子上 如果他要换机子的话 那么就叫他先正常推出
    我上次做了一个机房ic上机管理系统就是这样实现的
      

  8.   

    我覺得用ini會比較好一點.
      

  9.   

    用一个StringList或者ThreadList维护已登录用户ID列表不可以吗,为什么非要写下来呢?
      

  10.   

    笨笨 你想一下 用户按重新启动或非法操作会有什么后果 stinglist显示他再线 他怎么进去呀
    我的方法是最明智的 我也想了很久这个问题 既要防止用户多次登陆
    又要能够识别用户是否非法操作了
      

  11.   

    临时表这样设计:用户ID,机器ID
    用户登录时记下用户的ID和机器ID(可以是机器名或IP)
    当某台机器上的系统重启时或关闭时将临时表对应机器ID的用户名清空就行了,
    如果非法中断退出,只要重启系统就行了。
    还可以在服务器端增加清除所有客户机登录用户ID的功能,统一管理。
      

  12.   

    这个问题我以前做过,我告诉我以前的做法,我做得也是CS结构的,在局域网中使用,你可以将该用户名和该机器的IP联合一起用,如果异常退出的话,下次登陆必须在同一个IP下登陆,否则就说明该用户已经在使用
      

  13.   

    TO fly518(我要飞):
       我想你的这种做法只能控制一台机子的登录问题。可能你对我的意思不是很明白。
      

  14.   

    一般一个系统都有一个系统管理员,你叫系统管理员把你那个临时表对应的ID设为False就行了。