Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開始

VB建殼技術(shù)之指定工作組啟動(dòng)MDB項(xiàng)目詳解(技術(shù)交流)

2008-10-11 22:26| 發(fā)布者: tanhong| 查看: 3740| 評(píng)論: 1

一、前言

1.1
VBAccess進(jìn)行項(xiàng)目開發(fā)之初衷

    Access因操作簡(jiǎn)便、直觀,以及強(qiáng)大的功能,而得到許多數(shù)據(jù)庫(kù)開發(fā)者的推崇,不過 Access 也有一定的局限性,如:Access開發(fā)平臺(tái)開發(fā)的項(xiàng)目,無法完全編譯并脫離Access系統(tǒng)環(huán)境;宏的安全級(jí)別限制有時(shí)讓我們項(xiàng)目不能順利啟動(dòng),在分發(fā)項(xiàng)目時(shí),需要我們手動(dòng)對(duì)Access逐一手動(dòng)設(shè)置等。

    為彌補(bǔ) Access 某些不盡如人意的地方,我嘗試著用 VB與 Access 結(jié)合,用以自動(dòng)完成Access系統(tǒng)環(huán)境設(shè)置,如:修改宏安全級(jí)別避開限制啟動(dòng)MDB項(xiàng)目,或指定工作組啟動(dòng) MDB 項(xiàng)目等。

1.2 配置要求:

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

  • 本文以office提供的ADDRBOOK.mdb數(shù)據(jù)庫(kù)作為講解及演示實(shí)例

  • 殼通過VB6編譯,編譯后文件名:指定工作組并啟動(dòng)MDB項(xiàng)目.exe

    1.3 本文要點(diǎn):

    • 如何通過“安全機(jī)置向?qū)А北Wo(hù)數(shù)據(jù)庫(kù);

    • 如何實(shí)現(xiàn)VB與ACCESS無縫對(duì)接;

    • 如何實(shí)現(xiàn)VB修改ACCESS宏安全級(jí)別限制;

    • 如何實(shí)現(xiàn)用shell函數(shù)指定工作組啟MDB項(xiàng)目

    • 如何實(shí)現(xiàn)VB建立殼及如何編譯EXE

      二、使用 Security Wizard 設(shè)置 Access 數(shù)據(jù)庫(kù)的安全性


         我們通常會(huì)通過設(shè)置數(shù)據(jù)庫(kù)密碼、設(shè)置模塊密碼或?qū)db文件轉(zhuǎn)換為 mde 文件等方法來保護(hù)數(shù)據(jù)庫(kù)的安全,以上方法能最大限度保護(hù)數(shù)據(jù)庫(kù)的安全,但上述方法在網(wǎng)絡(luò)的多人使用環(huán)境中有一定局限性,不能針對(duì)不同的用戶,提供對(duì)于數(shù)據(jù)庫(kù)對(duì)象不同的訪問及管理權(quán)限。

         解決方案就是建立“工作組”,那什么是“工作組”呢?通俗的說,“工作組”就是將用戶按級(jí)別編成不同的“組”,并為不同組設(shè)定不同數(shù)據(jù)庫(kù)訪問及管理權(quán)限,并將這些設(shè)置存放在一個(gè)后綴為MDW的文件中,這個(gè)文件就是工作文件。只是建立工作組需一系列的操作,如果你不是很明了,會(huì)讓你無所適從,為此Access為我們提供了友好的“設(shè)置安全機(jī)置向?qū)А,讓你輕松“一點(diǎn)”搞定。

                2.1 “安全機(jī)制向?qū)А本唧w操作步驟:

          1、打開數(shù)據(jù)庫(kù),點(diǎn)菜單 工具—安全—設(shè)置安全機(jī)制向?qū),打開向?qū)А?/FONT>


         2、在對(duì)話框中單下一步,其中一些默認(rèn)選項(xiàng)不用做修改,直至下圖這一步很關(guān)鍵(見下圖),你可選擇已有用戶,并設(shè)定密碼,你也可以添加新用戶,并為添加用戶設(shè)定密碼,剩下就是點(diǎn)下一步直至最后完成就好

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



      三、VB建殼指定工作組啟動(dòng)MDB項(xiàng)目

      3.1 了解指定工作組啟動(dòng)MDB項(xiàng)目命令

          下面是一段指定工作組啟動(dòng)MDB項(xiàng)目命令實(shí)例(見下圖),你可以直接將以下命令粘貼到運(yùn)行對(duì)話框運(yùn)行。

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

       

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


      3.2 指定工作組啟動(dòng)MDB需要解決的幾個(gè)問題:

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


      '申明ACCESS對(duì)象類
      Dim objAccess  As  Access.Application
      '創(chuàng)建ACCESS實(shí)例對(duì)象
      Set objAccess = CreateObject("ACCESS.Application")
      '通過access對(duì)象屬性,獲得當(dāng)前access版號(hào)
      strVer = objAccess.Version
      '退出ACCESS,并釋放內(nèi)存
      objAccess.Quit
      Set objAccess = Nothing

       

      • 修改ACCESS宏安全級(jí)別自定義函數(shù),確保mdb項(xiàng)目順利啟動(dòng)。有關(guān)于此的方法我在論壇有發(fā)貼,在此不著筆墨。

              實(shí)例代碼:

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

      • 指定工作組啟動(dòng)MDB項(xiàng)目自定義函數(shù)。這一節(jié)關(guān)鍵點(diǎn)在于用代碼獲取msaccess.exe 文件所在路徑,換句話說就是必須得到office的安裝路徑。方法有二:一是SysCmd方法,二是通過注冊(cè)表指定鍵值獲取,本文采用的是第一種方法。以上二法代碼實(shí)例,我在論壇中已有發(fā)貼,在此不做細(xì)說。下面是指定工作組啟動(dòng)MDB項(xiàng)目代碼。

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

      • 調(diào)用以上兩個(gè)自定義函數(shù),建立指定工作組啟動(dòng)項(xiàng)目過程。

      '*************************************************************************
      ' 過 程 名:OpenWmdMdb
      '-------------------------------------------------------------------------
      ' 功能描述:首選修改宏安全級(jí)別限制,其次指定工作組打開mdb項(xiàng)目過程
      ' 輸 入:blnSetReg (Boolean)
      ' 輸 出:無
      ' 調(diào)用模塊:SetRegLevel '寫注冊(cè)表操作自定義函數(shù),用以修改安全級(jí)別鍵值
      ' OpenWmdAcc '指定工作組并啟動(dòng)mdb項(xiàng)目
      ' 編  程:江羽
      ' 日 期:2008-10-09
      '*************************************************************************

      Sub OpenWmdMdb()
      '關(guān)閉宏安全級(jí)別限制
      SetRegLevel False
      '指定工作組啟動(dòng)mdb項(xiàng)目,用戶名:tan,密碼:123,是建立工作組時(shí)自己設(shè)定的
      OpenWmdAcc "ADDRBOOK.mdb", "Security.mdw", "tan", "123"
      '開啟中宏安全級(jí)別限制
      SetRegLevel True
      End Sub

      3.3最終完成建殼,并編譯為EXE

      • 啟動(dòng)VB6,建一個(gè)標(biāo)準(zhǔn)EXE工程。




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



      • 將控件工具欄中的時(shí)鐘控件添加到窗體中,并將時(shí)鐘控件Interval屬性值設(shè)定為:3000,以便計(jì)時(shí)器觸事件在三秒鐘后關(guān)閉窗體。



      • 添加時(shí)鐘控件觸發(fā)事件,見實(shí)例代碼。

      '*************************************************************************
      ' 過 程 名:Timer1_Timer
      '-------------------------------------------------------------------------
      ' 功能描述:計(jì)時(shí)器控件,計(jì)時(shí)觸發(fā)事件,用以延時(shí)關(guān)閉窗體
      ' 輸    入:無
      ' 輸    出:無
      ' 調(diào)用模塊:OpenWmdMdb '
      ' 編  程:江羽
      ' 日    期:2008-10-09
      '*************************************************************************
      Private Sub Timer1_Timer()
         Unload Me           '關(guān)閉窗體
         Call OpenWmdMdb   '調(diào)用指定工作組啟動(dòng)mdb項(xiàng)目模塊
      End Sub


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





          本文到此劃上句號(hào)。特別申明由于本人技術(shù)有限,加之文字功力不濟(jì),不免有錯(cuò)漏或是表述不清的地方,還請(qǐng)大家斧正,更歡迎大家的相互交流。如果本文對(duì)于您有所幫助,那是我莫大的快慰。


       

      本文實(shí)例可在office中國(guó)江羽博客下載,并附贈(zèng)VB源碼。


       



       

                                                                               (全文結(jié)束)

                                                                                                  Office中國(guó).江羽

                                                                                                      2008-10-11



      Word版文稿下載:Word文本

      實(shí)例及源碼下載:VB實(shí)例及源碼

      發(fā)表評(píng)論

      最新評(píng)論

      引用 carayo 2009-9-27 18:27
      好文章,謝謝lz。

      查看全部評(píng)論(1)

      QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

      GMT+8, 2025-7-17 06:05 , Processed in 0.065108 second(s), 17 queries .

      Powered by Discuz! X3.3

      © 2001-2017 Comsenz Inc.

      返回頂部