婴儿脖子淹了擦什么好:您想知道有谁正在使用您的 Access 资料库吗

来源:百度文库 编辑:偶看新闻 时间:2024/05/02 02:58:49
174、您想知道有谁正在使用您的 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
‘除了上面的范例之外,Microsoft 也提供了一个更完整的范例,它有一个容易理解的介面设计:
如果您在这个主题中想要更多的资讯,或想取得 Microsoft 提供的更多的工具程序,您可以参考:
http://support.microsoft.com/support/kb/articles/q176/6/70.asp
参与~~! 想知道大家有多少人正在使用非行货的手机~~! 您正在使用的浏览器拒绝 cookies 我正在学习使用access,不知哪里有不错论坛可以交流学习呢 中国正在使用的新型建筑材料有哪些 谁有access的程序代码 xiao cai 想知道关于access的东西,有大虾小虾知道的进来说俩句!!!!!!!!!!!!!!!!!!!!! access如何使用(有没有视频音频的教案) 请问:谁见过带电的(正在使用的)CRT显示器爆炸?有就描述一下。是正在使用中的哦 谁见过带电的(正在使用的)CRT显示器爆炸?有就描述一下。是正在使用中的哦。 有谁正在使用50L左右的冰箱?什么牌子比较实用又优惠的? 有没有办法能删除正在使用的文件 怎样知道有没有用户正在使用我的打印机 谁有microsoft access的下载地址? 谁有Access 2003的介绍? 谢谢 谁有 office97版的 Access 谁有asp+access的教程,谢谢!! "对不起,您拨打的电话正在使用中"的英文 "对不起您拨打的电话正在使用中"的英文 想知道使用打印机的注意事项 您正在使用的终端数量已超出规定,请关闭多余连接,稍后重试, 您正在使用的浏览器不支持数字证书,请在IE浏览器中登录,以正常使用支付宝。 您正在使用的浏览器不支持数字证书,请在IE浏览器中登录,以正常使用支付宝。 有谁正在使用NEC1101手机,你觉得它的功能如何,有何优点和缺点? 两匹立式空调,哪个型号您正在使用?怎样?