如何得到当前使用数据库的用户名和机器名

superzxf 2001-08-06 10:35:34
...全文
158 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
superzxf 2001-08-28
skydg(飞龙)
谢了!
回复
skydg 2001-08-27
我只是抄来的:)
回复
skydg 2001-08-27
152、您想知道有谁正在使用您的 Access 资料库吗?

如果您使用 Access 建立了一个多人使用的资料库环境,有时候您必须要知道有谁正在使用程序连进这个共享的资料库,但是您又不想因为如此而要建立一套完整的 Access 安全系统,您有二个选择:

第一个:

您可以在资料库中建立一个 "Login Table",每次使用者进入或离开系统时就 Update 这个 Table.

第二个:

较好一点,您可以使用 msldbusr.dll,它可以告诉您目前正连进资料库的电脑名称 (Computer Name),这些资料其实是存放在扩展名为 LDB 的文件中。一旦您从 DLL 中抓到这些资料,您便可以送出讯息,通知 Client 端的使用者 (Remote User) 结束应用程序,以中断和资料库的连结,然后您便可以使用 Exclusive Mode 来维护资料库了。

在这里,我们要说明的是第二种方法,也就是使用 msldbusr.dll。它提供了二个 Function,说明如下:

1、LDBUser_GetUsers:呼叫后会返回二部份,一个是使用者阵列,一个是连结到资料库的使用者数。

Declare Function LDBUser_GetUsers Lib "MSLDBUSR.DLL" (lpszUserBuffer() _
As String, ByVal lpszFilename As String, ByVal nOptions As Long) As Integer

lpszUserBuffer():返回使用者阵列,注意!必须使用 ReDim 声明成变动阵列!
lpszFilename:资料库名称 ( .mdb 完整路径 ),若 .ldb 文件不存在,会返回错误代码。
nOptions:下参数声明资料回传的型态。可以使用的参数有四个,如下:

1=返回自从 .ldb 产生后,所有曾经使用资料库的使用者机器名称 (Computer Name) 及数目。
2=只返回目前正在使用资料库的使用者机器名称 (Computer Name) 及数目。
4=只返回导致目前资料库损毁的使用者机器名称 (Computer Name)。
8=只返回使用者的总数,但是并不返回使用者阵列。


2、LDBUser_GetError:呼叫 LDBUser_GetUsers 若有错误产生,可根据返回的错误代码找到说明。

Declare Function LDBUser_GetError Lib "MSLDBUSR.DLL" (ByVal nErrorNo As Long) As String

nErrorNo:呼叫 LDBUser_GetUsers 产生错误所返回的代码,介于 -1 至 -14 之间。说明如下:

-1 = Can't open the LDB file. ( 无法开启 LDB 文件 )
-2 = No user connected. ( 没有使用者在使用资料库 )
-3 = Can't create an array. ( 无法建立阵列 )
-4 = Can't redimension array. ( 无法重新建立阵列 )
-5 = Invalid argument passed. ( 传入无效的参数 )
-6 = Memory allocation error. ( 内存配置错误 )
-7 = Bad index. ( 无效的索引 )
-8 = Out of memory. ( 内存不足 )
-9 = Invalid argument. ( 无效的参数 )
-10= LDB is suspected as corrupted. ( LDB 文件可能损毁 )
-11= Invalid argument. ( 无效的参数 )
-12= Unable to read MDB file. ( 无法读取 MDB 文件 )
-13= Can't open the MDB file. ( 无法开启 MDB 文件 )
-14= Can't find the LDB file. ( 找不到 LDB 文件 )


'范例程序:( 移除所有的 Form,请将以下程序复制到 .bas 文件中即可执行 )

Option Explicit

Declare Function LDBUser_GetUsers Lib "MSLDBUSR.DLL" (lpszUserBuffer() _
As String, ByVal lpszFilename As String, ByVal nOptions As Long) As Integer

Declare Function LDBUser_GetError Lib "MSLDBUSR.DLL" (ByVal nErrorNo As Long) As String

Sub MAIN()
Dim psMDBFilename As String
psMDBFilename = InputBox("请输入资料库名称:")
If Len(psMDBFilename) Then
ShowUsers psMDBFilename
End If
End Sub


Sub ShowUsers(psFilename As String)
ReDim lpszUserBuffer(1) As String
Dim psError As String
Dim cUsers As Long
Dim iLoop As Long

'呼叫 LDBUser_GetUsers 返回使用者阵列
cUsers = LDBUser_GetUsers(lpszUserBuffer(), psFilename, 1)

'确认是否返回使用者阵列
If (cUsers = 0) Then
Debug.Print "No Users."
GoTo Exit_ShowUsers
End If

'若有错误则显示错误讯息
If (cUsers < 0) Then
psError = LDBUser_GetError(cUsers)
Debug.Print "Error #:"; cUsers; "--"; psError
GoTo Exit_ShowUsers
End If

'显示使用者阵列
For iLoop = 1 To cUsers
Debug.Print "User "; iLoop; ":"; lpszUserBuffer(iLoop)
Next iLoop

Exit_ShowUsers:
End Sub


msldbusr.dll 下载 17K
http://www.pconline.com.cn/pcedu/empolder/doc/vb/06/msldbusrdll.zip

'除了上面的范例之外,Microsoft 也提供了一个更完整的范例,它有一个容易理解的介面设计:


Source Code 下载 111K
http://www.pconline.com.cn/pcedu/empolder/doc/vb/06/msldbusrsrc.zip

如果您在这个主题中想要更多的资讯,或想取得 Microsoft 提供的更多的工具程序,您可以参考:

http://support.microsoft.com/support/kb/articles/q176/6/70.asp
回复
songyangk 2001-08-27
如果是ACCESS,好象在同名文件.ldb里存着的是用户名。
回复
superzxf 2001-08-27
gz
回复
superzxf 2001-08-24
songyangk的代码试过了,没用!
回复
一川烟草123 2001-08-23
songyangk(小草)是對的
回复
superzxf 2001-08-23
gz
回复
chenhw 2001-08-15
这可难了,我也想知道
回复
superzxf 2001-08-15
我是说我有一个共享的数据库(如access),我想要在程序中显示当前有哪些用户正在使用该数据库!
回复
songyangk 2001-08-11
SELECT HOST_NAME(), USER_NAME()
回复
Strator 2001-08-11
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long '取计算机名称
回复
Strator 2001-08-11
机器名称可以用API得到机器名称

'********************************取得计算机名称
Dim Compu As String * 128
Dim CompuName As String
Dim TempLong As Long
Dim X As Integer
TempLong = GetComputerName(Compu, 128)
X = InStr(Compu, Chr(0))
CompuName = Trim(Left(Compu, X - 1)) ‘机器名称


'建立数据库连接
Set PowerDB = New Connection
PowerDB.CursorLocation = adUseClient
PowerDB.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=powersupervise;Data Source=LUGUOFENG"
' PowerDB.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=powersupervise;Data Source=" + CompuName
回复
dahaidao 2001-08-10
我也想知道,
up,up
回复
superzxf 2001-08-10
up
回复
相关推荐
发帖

1188

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
帖子事件
创建了帖子
2001-08-06 10:35
社区公告
暂无公告