好象不用写到数据库中吧!登陆时检测是否有用此名登陆的用户,如有,检测是否保持连接,否则,记录登陆IP,端口,允许登陆,总之,可以定义一个已登陆用户的结构type AcceptUser ip as string port as integer 'or string AcceptTime as Date UserName as string end type
采用存儲過程: 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則允許登錄.為則提示當前該用戶 已在操作中退出.原理:建立全局表,當用戶不管是什麼原因斷開連接(如斷電,斷機或用戶退出,連接超時等情況)時,全局表會自動刪除.
在系統中如果提供更換操作員功能,則在調用更換操作員表單前,代碼刪除該表. Drop Table ##@更換前用戶名可下載我的繁體會計系統(已正常運行半年多了),里面就SQL運用來說,已達到代碼建庫建表及切換,同一帳套同一用戶名不管任何情況下都不會出現重復登錄.允許多帳套多個用戶自由切換. 主頁http://xufb.top263.net
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()回复:全局表是什么东西?你说的我都不懂,有点高深哟 我看看你的程序吧。
使用临时表会自动随连接的断开而删除特性 当每个用户登陆时,以他的登陆号创建一个临时表 在进入系统前检查这个临时表是否存在来决定是否允许用户登陆 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
规定个时间值,超过时间不在的话就置回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)每一个用户登录时,你就执行一段代码,检测当前所有连接的用户,重写至数据表中。如果此用户名在表中则不接受登录,如不在表中,则追加此用户到表中,接受登录 回复:如何检测当前所有连接的用户?是不是说有服务端程序?
回复:我不打算再写一个服务端程序。
----------------------------------
To:回复人: Frank_Xu()
是用什麼做數據庫?
回复:SqlServer。不知道数据库中是否有类似触发器之类的东西可以检查客户是否断开连接?To: tommychim(阿布洛迪)
一般是这样的,应该设置一个DBA,该用户在任何时候可以登陆(当然密码要由该用户自己好好保管),即便在登陆状态为‘L’的时候也可以强行登陆。该DBA可以对其他一般用户进行释放。也就是说当其他用户非正常退出(状态为‘L’)时,和DBA联系,由DBA把状态改回到未登陆的状态 回复:你的方法当然是可以的,但是这个DBA如果只有一个,正好他不在?怎么办?
ip as string
port as integer 'or string
AcceptTime as Date
UserName as string
end type
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則允許登錄.為則提示當前該用戶
已在操作中退出.原理:建立全局表,當用戶不管是什麼原因斷開連接(如斷電,斷機或用戶退出,連接超時等情況)時,全局表會自動刪除.
已在操作中退出.
Drop Table ##@更換前用戶名可下載我的繁體會計系統(已正常運行半年多了),里面就SQL運用來說,已達到代碼建庫建表及切換,同一帳套同一用戶名不管任何情況下都不會出現重復登錄.允許多帳套多個用戶自由切換.
主頁http://xufb.top263.net
ip as string
port as integer 'or string
AcceptTime as Date
UserName as string
end type回复:如何检测是否有用此名登陆的用户?请告之---------------------------------------------
TO;Frank_Xu()回复:全局表是什么东西?你说的我都不懂,有点高深哟
我看看你的程序吧。
SQL SERVER的臨時表由SQL自動維護,與用戶無關.
如果不明白,看看SQL SERVER的相關書籍或說明.
臨時表以#開始,全局表以##開始.
你在登陆的时候判断一下。
如果登陆的状态是"L",
则看一下最后刷新时间和当前时间的差是否大于某一个值
如果是则认为该用户上次登陆的时候非法退出
允许他登陆
(上面所說,應為臨時表)
SQL SERVER的臨時表由SQL自動維護,與用戶無關.
如果不明白,看看SQL SERVER的相關書籍或說明.
臨時表以#開始,全局表以##開始. 回复:你的软件我已经安装,不过是乱码,好难看。我建好了数据库,但是运行时要求输入服务器名:
用户名:
密码:我的SQL Server没有密码,程序老是提示密码不能为空,进不去怎么办?
程序在一台機上只能運行一個實例.
你不用在SQL Server端建立任何庫或表,這些都是代碼建立的.你只需提供局域網內的SQL SERVER名及用戶和密碼即可.
如果你的SQL 用戶登錄為空,請先更改密碼(不能為空)再運行.一般來說,SQL SERVER是可以允許密碼為空,但最好加上用戶的密碼,確保SQL SERVER的安全.
如果SQL連接正確,就會將SQL SERVER名及UID及PWD加密保存在注冊表中.
臨時表由SQL SERVER自身維護,在任何情況,一個連接所建立的臨時來在與SQL SERVER斷開連接時,SQL SERVER都會將該連接所建立的臨時表刪除.
臨時表分局部臨時表(以#開頭)和全局臨時表(以##開頭).在用戶退出或系統修復時被自動刪除.
局部臨時表只能由創建它的用戶使用,在用戶斷開連接時被自動刪除.
全局臨時表對系統當前所有連接用戶都是可用的,在使用它的最後一個會話結束後被自動刪除.
当每个用户登陆时,以他的登陆号创建一个临时表
在进入系统前检查这个临时表是否存在来决定是否允许用户登陆
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