如果是局域网,ip又固定,可以考虑用ip来判断

解决方案 »

  1.   

    增添一个logonTime字段,记录登陆时间;在登陆时,如果发现上次登陆时间超时x分钟就无论检测是否登陆的字段允许登陆。程序运行期间应当时常修改登陆最好登陆时间.
      

  2.   

    不好意思,我忘了说了,服务器为SQL Server数据库,没有什么其它服务端程序。To:byasx() (2002-2-1 19:14:40)
    规定个时间值,超过时间不在的话就置回f  回复:这是什么意思?说明白一点好吗?---------------------------------------
    To: xu() (2002-2-1 19:15:19)
    你可以在服务器中用一个程序定时测试网上的用户是否存在。  
    To: denis_shen(丹尼斯) (2002-2-1 19:24:46)是否可以在服务端程序启动时设置所有用户的字段为“F”。反正你列举的情况都会造成需用户重新登录的。  
    To: kyd(御风而行) (2002-2-1 19:36:17)如果一个用户登录时,服务端发现该用户已登录,就尝试连接该用户的客户端程序(通过ip或其他标识),如果没有响应就允许登录  
    回复:没有服务器端程序。即使有,那么是要采用TCP/IP来侦听某个端口吗?---------------------------------------
    To: Naola2001(摆地摊的) (2002-2-1 19:27:31)每一个用户登录时,你就执行一段代码,检测当前所有连接的用户,重写至数据表中。如果此用户名在表中则不接受登录,如不在表中,则追加此用户到表中,接受登录  回复:如何检测当前所有连接的用户?是不是说有服务端程序?
      

  3.   

    一般是这样的,应该设置一个DBA,该用户在任何时候可以登陆(当然密码要由该用户自己好好保管),即便在登陆状态为‘L’的时候也可以强行登陆。该DBA可以对其他一般用户进行释放。也就是说当其他用户非正常退出(状态为‘L’)时,和DBA联系,由DBA把状态改回到未登陆的状态
      

  4.   

    To:回复人: wts(天胜) 
    回复:我不打算再写一个服务端程序。
    ----------------------------------
    To:回复人: Frank_Xu()
    是用什麼做數據庫?  
    回复:SqlServer。不知道数据库中是否有类似触发器之类的东西可以检查客户是否断开连接?To: tommychim(阿布洛迪) 
    一般是这样的,应该设置一个DBA,该用户在任何时候可以登陆(当然密码要由该用户自己好好保管),即便在登陆状态为‘L’的时候也可以强行登陆。该DBA可以对其他一般用户进行释放。也就是说当其他用户非正常退出(状态为‘L’)时,和DBA联系,由DBA把状态改回到未登陆的状态  回复:你的方法当然是可以的,但是这个DBA如果只有一个,正好他不在?怎么办?
      

  5.   

    好象不用写到数据库中吧!登陆时检测是否有用此名登陆的用户,如有,检测是否保持连接,否则,记录登陆IP,端口,允许登陆,总之,可以定义一个已登陆用户的结构type AcceptUser
      ip as string
      port as integer  'or string
      AcceptTime as Date
      UserName as string
    end type
      

  6.   

    采用存儲過程:
    CREATE PROCEDURE  ProcOperatorIsExist
     (@v_userid VarChar(30),@i_out Int OutPut)
    AS
    DECLARE  @v_sql  VarChar(100)
    IF  OBJECT_ID('tempdb.dbo.##'+@v_userid) IS NULL
    BEGIN
             SET @v_sql = 'CREATE TABLE   ##'+@v_userid+'(userid VarChar(6))'
            EXEC (@v_sql)
            SET @i_out = 0
    END
    ELSE
     SET @i_out = 1
    @v_userid 為當前登錄用戶. 登錄時判斷返回值@i_out,為0則允許登錄.為則提示當前該用戶
    已在操作中退出.原理:建立全局表,當用戶不管是什麼原因斷開連接(如斷電,斷機或用戶退出,連接超時等情況)時,全局表會自動刪除.
      

  7.   

    @v_userid 為當前登錄用戶. 登錄時判斷返回值@i_out,為0則允許登錄.為1則提示當前該用戶
    已在操作中退出.
      

  8.   

    在系統中如果提供更換操作員功能,則在調用更換操作員表單前,代碼刪除該表.
    Drop Table ##@更換前用戶名可下載我的繁體會計系統(已正常運行半年多了),里面就SQL運用來說,已達到代碼建庫建表及切換,同一帳套同一用戶名不管任何情況下都不會出現重復登錄.允許多帳套多個用戶自由切換.
    主頁http://xufb.top263.net
      

  9.   

    To: gujianxin(木头象) (2002-2-2 16:39:05) 好象不用写到数据库中吧!登陆时检测是否有用此名登陆的用户,如有,检测是否保持连接,否则,记录登陆IP,端口,允许登陆,总之,可以定义一个已登陆用户的结构type AcceptUser
      ip as string
      port as integer  'or string
      AcceptTime as Date
      UserName as string
    end type回复:如何检测是否有用此名登陆的用户?请告之---------------------------------------------
    TO;Frank_Xu()回复:全局表是什么东西?你说的我都不懂,有点高深哟
    我看看你的程序吧。
      

  10.   

    (上面所說,應為臨時表)
    SQL SERVER的臨時表由SQL自動維護,與用戶無關.
    如果不明白,看看SQL SERVER的相關書籍或說明.
    臨時表以#開始,全局表以##開始.
      

  11.   

    其实用wts(天胜)的办法不用做服务器端的应用程序
    你在登陆的时候判断一下。
    如果登陆的状态是"L",
    则看一下最后刷新时间和当前时间的差是否大于某一个值
    如果是则认为该用户上次登陆的时候非法退出
    允许他登陆
      

  12.   

    To:回复人: Frank_Xu()
    (上面所說,應為臨時表)
    SQL SERVER的臨時表由SQL自動維護,與用戶無關.
    如果不明白,看看SQL SERVER的相關書籍或說明.
    臨時表以#開始,全局表以##開始.  回复:你的软件我已经安装,不过是乱码,好难看。我建好了数据库,但是运行时要求输入服务器名:
    用户名:
    密码:我的SQL Server没有密码,程序老是提示密码不能为空,进不去怎么办?
      

  13.   

    可是写一个服务器端程序并不是说要独立的写一个程序啊,而是说sql server 本身的功能啊!
      

  14.   

    你要做的不过是要sql server 定期执行一个功能而已啊!
      

  15.   

    To:griefforyou(为你伤心) 
    程序在一台機上只能運行一個實例.
    你不用在SQL Server端建立任何庫或表,這些都是代碼建立的.你只需提供局域網內的SQL SERVER名及用戶和密碼即可.
    如果你的SQL 用戶登錄為空,請先更改密碼(不能為空)再運行.一般來說,SQL SERVER是可以允許密碼為空,但最好加上用戶的密碼,確保SQL SERVER的安全.
    如果SQL連接正確,就會將SQL SERVER名及UID及PWD加密保存在注冊表中.
      

  16.   

    如果使用SQL SERVER做數據庫,並且要限制同一用戶不能重復登錄系統,采用SQL SERVER 存儲過程(SQL 代碼見上)是最經典且最不會出現人為錯誤的方法.
    臨時表由SQL SERVER自身維護,在任何情況,一個連接所建立的臨時來在與SQL SERVER斷開連接時,SQL SERVER都會將該連接所建立的臨時表刪除.
      

  17.   

    SQL SERVER分永久表和臨時表.
    臨時表分局部臨時表(以#開頭)和全局臨時表(以##開頭).在用戶退出或系統修復時被自動刪除.
    局部臨時表只能由創建它的用戶使用,在用戶斷開連接時被自動刪除.
    全局臨時表對系統當前所有連接用戶都是可用的,在使用它的最後一個會話結束後被自動刪除.
      

  18.   

    使用临时表会自动随连接的断开而删除特性
    当每个用户登陆时,以他的登陆号创建一个临时表
    在进入系统前检查这个临时表是否存在来决定是否允许用户登陆
    dim con as new adodb.connection
    dim rst as new adodb.recordset
    dim logid as string 
    logid ='001'
    con.open "yourserver"
    rst.activeconnection=con
    rst.open "select * from tempdb.dbo.sysobjects where name ='##" & logid & "'"
    if rst.eof then '用户没有登陆
        '在服务器上注册用户
        con.execute "select " & logid & " as logid into tempdb.dbo.#" & logid
        '登陆成功
    else
        msgbox "用户已经登陆"
    end if