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

superzxf 2001-08-06 10:35:34
...全文
209 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
1、具有登陆界面,包括服务器IP(或服务器)、用户、密码。 登录:在数据库服务器上验证用户和密码,如果匹配就进入QQ聊天主界面,否则提示不能登录。 取消:退出即可。 注册:进入用户注册界面。 服务器栏中默认是你要使用的服务器字,即该服务器安装的数据库,所有qq用户信息都保存在这个服务器的数据库里。图片显示的是我试验的服务器字。 登录成功后还要把自己当前所在机器的IP地址提取出来并保存到数据库的个人信息中,替换原来注册或上次使用的IP。 2、注册界面,可以让第一次使用的用户注册,即给自己在服务器上注册一个用户、密码、自己所使用机器IP、自己的端口号,如图所示: 注册:首先验证密码和确认密码是否一致,如果不一致,则提示,否则,把输入的信息记录到数据库中,如果用户重复也要提示。 其中IP栏目的内容可以由程序自动提取出本机的ip地址,并显示出来,省得用户输入错误。 3、聊天主界面 登陆成功后就进入本届面,界面如下: 界面设计类似简单的QQ界面,可以使用BorderLayout布局管理器,在上面(BorderLayou.NORTH)显示“好友列表”四个字,中间部分(BorderLayou.CENTER)显示自己的好友单,单可以用多个JLabel控件(JLabel中添加ImageIcon)显示,或者用JTree控件显示(比较复杂),单中可以显示qq号、昵称(姓)、状态(在线、离线等)。最下边(BorderLayou.SOUTH)可以显示“欢迎您:***”。 好友要求用不同的图标显示在线和不在线的状态。 双击在线的好友字可以打开聊天窗口,而双击不在线的好友不动(即不开启聊天窗口)。 达到这种效果的前提是在登录成功后,获得当前登录用户的信息,在本模块根据登录信息获取用户、获取他的好友列表等数据。

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧