VB建殼技術之指定工作組啓動MDB項目詳解(技術交流)

作者: 江羽

一、前言

1.1
VBAccess進行項目開發之初衷

    Access因操作簡便、直觀,以及強大的功能,而得到許多數據庫開發者的推崇,不過 Access 也有一定的侷限性,如:Access開發平臺開發的項目,無法完全編譯並脫離Access系統環境;宏的安全級別限制有時讓我們項目不能順利啓動,在分發項目時,需要我們手動對Access逐一手動設置等。

    爲彌補 Access 某些不盡如人意的地方,我嘗試着用 VB與 Access 結合,用以自動完成Access系統環境設置,如:修改宏安全級別避開限制啓動MDB項目,或指定工作組啓動 MDB 項目等。

1.2配置要求:

  • 本文ACCESS爲2003版本(其它版本大家可自行測試);

  • 本文以office提供的ADDRBOOK.mdb數據庫作爲講解及演示實例

  • 殼通過VB6編譯,編譯後文件名:指定工作組並啓動MDB項目.exe

1.3本文要點:

  • 如何通過“安全機置嚮導”保護數據庫;

  • 如何實現VB與ACCESS無縫對接;

  • 如何實現VB修改ACCESS宏安全級別限制;

  • 如何實現用shell函數指定工作組啓MDB項目

  • 如何實現VB建立殼及如何編譯EXE

二、使用Security Wizard設置Access數據庫的安全性


   我們通常會通過設置數據庫密碼、設置模塊密碼或將mdb文件轉換爲 mde 文件等方法來保護數據庫的安全,以上方法能最大限度保護數據庫的安全,但上述方法在網絡的多人使用環境中有一定侷限性,不能針對不同的用戶,提供對於數據庫對象不同的訪問及管理權限。

   解決方案就是建立“工作組”,那什麼是“工作組”呢?通俗的說,“工作組”就是將用戶按級別編成不同的“組”,併爲不同組設定不同數據庫訪問及管理權限,並將這些設置存放在一個後綴爲MDW的文件中,這個文件就是工作文件。只是建立工作組需一系列的操作,如果你不是很明瞭,會讓你無所適從,爲此Access爲我們提供了友好的“設置安全機置嚮導”,讓你輕鬆“一點”搞定。

          2.1“安全機制嚮導”具體操作步驟:

    1、打開數據庫,點菜單 工具—安全—設置安全機制嚮導,打開向導。

20081011_79dae1ba0b67484c893dlvlHTse1PmqI.jpg

   2、在對話框中單下一步,其中一些默認選項不用做修改,直至下圖這一步很關鍵(見下圖),你可選擇已有用戶,並設定密碼,你也可以添加新用戶,併爲添加用戶設定密碼,剩下就是點下一步直至最後完成就好
20081011_ea802002ac02929d8094EqfOTz0mfKiU.jpg

    完成後,會在mdb文件所在文件夾產生另兩個文件(見下圖),後綴mdw 的文件爲工作組文件,後綴bak 的文件爲 mdb 備份文件。你必須記住,用戶名:tan 密碼:123,這可是我們後面指定工作組打開mdb關鍵。

20081011_fe500d8129ea05af9109ZfcZ2BM0XO9g.jpg

三、VB建殼指定工作組啓動MDB項目

3.1瞭解指定工作組啓動MDB項目命令

    下面是一段指定工作組啓動MDB項目命令實例(見下圖),你可以直接將以下命令粘貼到運行對話框運行。

"C:/Program Files/Microsoft Office/OFFICE11/msaccess.exe " "D:/例程/ADDRBOOK.mdb" /wrkgrp "D:/例程/Security.mdw" /user tan /pwd 123

 

  • 應用程序路徑:"C:/Program Files/Microsoft Office/OFFICE11/msaccess.exe "
  • MDB文件路徑:"D:/例程/Data/ADDRBOOK.mdb"
  • 指定工作組參數:/wrkgrp
  •   工作組文件路徑:"D:/例程/Data/Security.mdw"
  •   工作組用戶參數:/user
  • 工作組用戶密碼參數:/pwd


3.2指定工作組啓動MDB需要解決的幾個問題:

  • 實現VB與ACCESS 的無縫對接。實現對接需要VB工程中引用ACCESS11.0 類庫,文件名 MSACC.OLB ,引用方法:在VB工程窗口,點擊菜單:工程引用鉤選Micfrosoft ACCESS 11.0 Object library點確定完成類庫引用。這樣我們就能如在VBA編輯環境一樣對ACCESS對象進行編程,調用ACCESS類對象屬性、事件、方法。
    實例代碼:


'申明ACCESS對象類
Dim objAccess  As  Access.Application
'創建ACCESS實例對象
Set objAccess = CreateObject("ACCESS.Application")
'通過access對象屬性,獲得當前access版號
strVer = objAccess.Version
'退出ACCESS,並釋放內存
objAccess.Quit
Set objAccess = Nothing

 

  • 修改ACCESS宏安全級別自定義函數,確保mdb項目順利啓動。有關於此的方法我在論壇有發貼,在此不着筆墨。

        實例代碼:

'*************************************************************************
' 函 數 名:SetRegLevel
'-------------------------------------------------------------------------
' 功能描述:修改ACCESS安全級別在註冊表鍵值.
' 輸    入:blnSetReg (Boolean) ,false爲低,true爲中
' 輸    出:無
' 調用模塊:RegWrite '寫註冊表操作自定義函數,用以修改安全級別鍵值
' 編  程:江羽
' 日    期:2008-10-09
'*************************************************************************
Public Function SetRegLevel(blnSetReg  As Boolean)
    Dim strRegSec As String   '字符串變量,安全設置鍵值所在註冊表路徑
    Dim strVer As String      '當前ACCESS版號字符串變量
    On Error Resume Next
    '創建ACCESS對象
    Set objAccess = CreateObject("ACCESS.Application")
    '獲得當前office版號
    strVer = objAccess.Version
   '退出ACCESS,並釋放內存
    objAccess.Quit
    Set objAccess = Nothing
   '將注表路徑賦值給變量
    strRegSec = "HKEY_CURRENT_USER/Software/Microsoft/Office/" & _
                 strVer & "/access/Security/Level"
   'RegWrite 自定義函數,用以寫入鍵值操作
   '鍵值1爲低,2爲中,3爲高
    If blnSetReg = False Then
       RegWrite strRegSec, 1
    Else
       RegWrite strRegSec, 2
    End If
End Function

  • 指定工作組啓動MDB項目自定義函數。這一節關鍵點在於用代碼獲取msaccess.exe 文件所在路徑,換句話說就是必須得到office的安裝路徑。方法有二:一是SysCmd方法,二是通過註冊表指定鍵值獲取,本文采用的是第一種方法。以上二法代碼實例,我在論壇中已有發貼,在此不做細說。下面是指定工作組啓動MDB項目代碼。

'*************************************************************************
' 函 數 名:OpenWmdAcc
'-------------------------------------------------------------------------
' 功能描述:用shell方法打開帶安全工作組MD項目,必須提供工作組文件完整路徑,
' 工作組用戶名,密碼.
' 輸 入:strAccName(String) mdb項目文件名
'        strMdwName(String) 工作組文件名
'        strUserName(String) 工作組用戶名
'        strPassWord(string) 工作組密碼
' 輸 出:無
' 調用模塊:
' 編  程:江羽
' 日 期:2008-10-09
'*************************************************************************
Public Function OpenWmdAcc(strAccName As String, strMdwName As String, strUserName As String, strPassWord As String)
Dim strAccPath As String 'Msaccess.exe 文件完整路徑
Dim strAccFileName As String '要啓動 mdb文件完整路徑
Dim strMdwFileName As String '工作組文件及完整路徑
Dim strAPP As String '命令表達式
On Error Resume Next
'創建ACCESS實例
Set objAccess = CreateObject("ACCESS.Application")
'獲取MSACCESS.EXE完整路徑
strAccPath = SysCmd(acSysCmdAccessDir) & "msaccess.exe "
'獲取mdb項目完整路徑
strAccFileName = App.Path & "/Data/" & strAccName
'獲取工作組文件完整路徑
strMdwFileName = App.Path & "/Data/" & strMdwName
'帶工作組啓動的命令行
strAPP = """" & strAccPath & """ """ & strAccFileName & """ /wrkgrp """ & _
strMdwFileName & """ /user " & strUserName & " /pwd " & strPassWord
Shell strAPP, 3 '啓動帶工作組項目
objAccess.Quit '退出ACCESS
Set objAccess = Nothing '並釋放內存
'如出現錯誤,給出錯誤提示
If Err <> 0 Then
MsgBox "系統出現:" & Err.Description & "錯誤! ", vbOKCancel + 32, "系統提示:"
End If
End Function

  • 調用以上兩個自定義函數,建立指定工作組啓動項目過程。

'*************************************************************************
' 過 程 名:OpenWmdMdb
'-------------------------------------------------------------------------
' 功能描述:首選修改宏安全級別限制,其次指定工作組打開mdb項目過程
' 輸 入:blnSetReg (Boolean)
' 輸 出:無
' 調用模塊:SetRegLevel '寫註冊表操作自定義函數,用以修改安全級別鍵值
' OpenWmdAcc '指定工作組並啓動mdb項目
' 編  程:江羽
' 日 期:2008-10-09
'*************************************************************************
Sub OpenWmdMdb()
'關閉宏安全級別限制
SetRegLevel False
'指定工作組啓動mdb項目,用戶名:tan,密碼:123,是建立工作組時自己設定的
OpenWmdAcc "ADDRBOOK.mdb", "Security.mdw", "tan", "123"
'開啓中宏安全級別限制
SetRegLevel True
End Sub

3.3最終完成建殼,並編譯爲EXE

  • 啓動VB6,建一個標準EXE工程。




  • 將窗體BorderStyle屬性設爲:0-None 無邊框模式,在picture屬性中添加背景圖片,實例圖片CXT.jpg在素材文件夾中。



  • 控件工具欄中的時鐘控件添加到窗體中,並將時鐘控件Interval屬性值設定爲:3000,以便計時器觸事件在三秒鐘後關閉窗體。



  • 添加時鐘控件觸發事件,見實例代碼。

'*************************************************************************
' 過 程 名:Timer1_Timer
'-------------------------------------------------------------------------
' 功能描述:計時器控件,計時觸發事件,用以延時關閉窗體
' 輸    入:無
' 輸    出:無
' 調用模塊:OpenWmdMdb '
' 編  程:江羽
' 日    期:2008-10-09
'*************************************************************************
Private Sub Timer1_Timer()
   Unload Me           '關閉窗體
   Call OpenWmdMdb   '調用指定工作組啓動mdb項目模塊
End Sub


  • 編譯成EXE應用程序,點菜單文件—生成工程1.exe,你就大功告成了。(見下圖)運行窗體結果





    本文到此劃上句號。特別申明由於本人技術有限,加之文字功力不濟,不免有錯漏或是表述不清的地方,還請大家斧正,更歡迎大家的相互交流。如果本文對於您有所幫助,那是我莫大的快慰。


 

本文實例可在office中國江羽博客下載,並附贈VB源碼。


 



 

                                                                         (全文結束)

                                                                                            Office中國.江羽

                                                                                                2008-10-11



Word版文稿下載:Word文本

實例及源碼下載:VB實例及源碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章