说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

您想知道有谁正在使用您的 Access 文件吗?(多人环境中)-VB资料

HTML文档下载 WORD文档下载 PDF文档下载
您想知道有谁正在使用您的 Access 文件吗?(多人环境中)-VB资料

主題:您想知道有谁正在使用您的 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

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘