设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

123下一页
返回列表 发新帖
查看: 10966|回复: 22

[加解密/安全] VB建壳技术之指定工作组启动MDB项目详解(技术交流)

[复制链接]
发表于 2008-10-11 15:17:35 | 显示全部楼层 |阅读模式
一、前言


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、打开数据库,点菜单 工具—安全—设置安全机制向导,打开向导。




   2、在对话框中单下一步,其中一些默认选项不用做修改,直至下图这一步很关键(见下图),你可选择已有用户,并设定密码,你也可以添加新用户,并为添加用户设定密码,剩下就是点下一步直至最后完成就好了。




    完成后,会在mdb文件所在文件夹产生另两个文件(见下图),后缀mdw 的文件为工作组文件,后缀bak 的文件为 mdb 备份文件。你必须记住,用户名:tan 密码:123,这可是我们后面指定工作组打开mdb关键。

(未完待续)



[ 本帖最后由 tanhong 于 2008-10-11 17:05 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

本帖被以下淘专辑推荐:

 楼主| 发表于 2008-10-11 15:22:28 | 显示全部楼层
三、VB建壳指定工作组启动MDB项目

3.1 了解指定工作组启动MDB项目命令

    下面是一段指定工作组启动MDB项目命令实例(见下图),你可以直接将以下命令粘贴到运行对话框运行。


  1. "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类对象属性、事件、方法。
    实例代码:

  1. '申明ACCESS对象类
  2. Dim objAccess  As  Access.Application
  3. '创建ACCESS实例对象
  4. Set objAccess = CreateObject("ACCESS.Application")
  5. '通过access对象属性,获得当前access版号
  6. strVer = objAccess.Version
  7. '退出ACCESS,并释放内存
  8. objAccess.Quit
  9. Set objAccess = Nothing
复制代码

  • 修改ACCESS宏安全级别自定义函数,确保mdb项目顺利启动。有关于此的方法我在论坛有发贴,在此不着笔墨。
        实例代码:

  1. '*************************************************************************
  2. ' 函 数 名:SetRegLevel
  3. '-------------------------------------------------------------------------
  4. ' 功能描述:修改ACCESS安全级别在注册表键值.
  5. ' 输    入:blnSetReg (Boolean) ,false为低,true为中
  6. ' 输    出:无
  7. ' 调用模块:RegWrite '写注册表操作自定义函数,用以修改安全级别键值
  8. ' 编  程:江羽
  9. ' 日    期:2008-10-09
  10. '*************************************************************************
  11. Public Function SetRegLevel(blnSetReg  As Boolean)
  12.     Dim strRegSec As String   '字符串变量,安全设置键值所在注册表路径
  13.     Dim strVer As String      '当前ACCESS版号字符串变量
  14.     On Error Resume Next
  15.     '创建ACCESS对象
  16.     Set objAccess = CreateObject("ACCESS.Application")
  17.     '获得当前office版号
  18.     strVer = objAccess.Version
  19.    '退出ACCESS,并释放内存
  20.     objAccess.Quit
  21.     Set objAccess = Nothing
  22.    '将注表路径赋值给变量
  23.     strRegSec = "HKEY_CURRENT_USER\Software\Microsoft\Office" & _
  24.                  strVer & "\access\Security\Level"
  25.    'RegWrite 自定义函数,用以写入键值操作
  26.    '键值1为低,2为中,3为高
  27.     If blnSetReg = False Then
  28.        RegWrite strRegSec, 1
  29.     Else
  30.        RegWrite strRegSec, 2
  31.     End If
  32. End Function
复制代码

(未完待续)


[ 本帖最后由 tanhong 于 2008-10-11 15:37 编辑 ]
 楼主| 发表于 2008-10-11 15:24:52 | 显示全部楼层
  • 指定工作组启动MDB项目自定义函数。这一节关键点在于用代码获取msaccess.exe 文件所在路径,换句话说就是必须得到office的安装路径。方法有二:一是SysCmd方法,二是通过注册表指定键值获取,本文采用的是第一种方法。以上二法代码实例,我在论坛中已有发贴,在此不做细说。下面是指定工作组启动MDB项目代码。
    1. '*************************************************************************
    2. ' 函 数 名:OpenWmdAcc
    3. '-------------------------------------------------------------------------
    4. ' 功能描述:用shell方法打开带安全工作组MD项目,必须提供工作组文件完整路径,
    5. ' 工作组用户名,密码.
    6. ' 输 入:strAccName(String) mdb项目文件名
    7. ' strMdwName(String) 工作组文件名
    8. ' strUserName(String) 工作组用户名
    9. ' strPassWord(string) 工作组密码
    10. ' 输 出:无
    11. ' 调用模块:
    12. ' 编  程:江羽
    13. ' 日 期:2008-10-09
    14. '*************************************************************************
    15. Public Function OpenWmdAcc(strAccName As String, strMdwName As String, strUserName As String, strPassWord As String)
    16. Dim strAccPath As String 'Msaccess.exe 文件完整路径
    17. Dim strAccFileName As String '要启动 mdb文件完整路径
    18. Dim strMdwFileName As String '工作组文件及完整路径
    19. Dim strAPP As String '命令表达式
    20. On Error Resume Next
    21. '创建ACCESS实例
    22. Set objAccess = CreateObject("ACCESS.Application")
    23. '获取MSACCESS.EXE完整路径
    24. strAccPath = SysCmd(acSysCmdAccessDir) & "msaccess.exe "
    25. '获取mdb项目完整路径
    26. strAccFileName = App.Path & "\Data" & strAccName
    27. '获取工作组文件完整路径
    28. strMdwFileName = App.Path & "\Data" & strMdwName
    29. '带工作组启动的命令行
    30. strAPP = """" & strAccPath & """ """ & strAccFileName & """ /wrkgrp """ & _
    31. strMdwFileName & """ /user " & strUserName & " /pwd " & strPassWord
    32. Shell strAPP, 3 '启动带工作组项目
    33. objAccess.Quit '退出ACCESS
    34. Set objAccess = Nothing '并释放内存
    35. '如出现错误,给出错误提示
    36. If Err <> 0 Then
    37. MsgBox "系统出现:" & Err.Description & "错误! ", vbOKCancel + 32, "系统提示:"
    38. End If
    39. End Function
    复制代码
  • 调用以上两个自定义函数,建立指定工作组启动项目过程。
  1. '*************************************************************************
  2. ' 过 程 名:OpenWmdMdb
  3. '-------------------------------------------------------------------------
  4. ' 功能描述:首选修改宏安全级别限制,其次指定工作组打开mdb项目过程
  5. ' 输 入:blnSetReg (Boolean)
  6. ' 输 出:无
  7. ' 调用模块:SetRegLevel '写注册表操作自定义函数,用以修改安全级别键值
  8. ' OpenWmdAcc '指定工作组并启动mdb项目
  9. ' 编  程:江羽
  10. ' 日 期:2008-10-09
  11. '*************************************************************************
  12. Sub OpenWmdMdb()
  13. '关闭宏安全级别限制
  14. SetRegLevel False
  15. '指定工作组启动mdb项目,用户名:tan,密码:123,是建立工作组时自己设定的
  16. OpenWmdAcc "ADDRBOOK.mdb", "Security.mdw", "tan", "123"
  17. '开启中宏安全级别限制
  18. SetRegLevel True
  19. End Sub
复制代码
(未完待续)

[ 本帖最后由 tanhong 于 2008-10-11 15:36 编辑 ]
 楼主| 发表于 2008-10-11 18:00:40 | 显示全部楼层
3.3最终完成建壳,并编译为EXE
  • 启动VB6,建一个标准EXE工程。



  • 将窗体BorderStyle属性设为:0-None 无边框模式,在picture属性中添加背景图片,实例图片CXT.jpg在素材文件夹中。


  • 将控件工具栏中的时钟控件添加到窗体中,并将时钟控件Interval属性值设定为:3000,以便计时器触事件在三秒钟后关闭窗体。


  • 添加时钟控件触发事件,见实例代码。
  1. '*************************************************************************
  2. ' 过 程 名:Timer1_Timer
  3. '-------------------------------------------------------------------------
  4. ' 功能描述:计时器控件,计时触发事件,用以延时关闭窗体
  5. ' 输    入:无
  6. ' 输    出:无
  7. ' 调用模块:OpenWmdMdb '
  8. ' 编  程:江羽
  9. ' 日    期:2008-10-09
  10. '*************************************************************************
  11. Private Sub Timer1_Timer()
  12.    Unload Me           '关闭窗体
  13.    Call OpenWmdMdb   '调用指定工作组启动mdb项目模块
  14. End Sub
复制代码



  • 编译成EXE应用程序,点菜单文件—生成工程1.exe,你就大功告成了。(见下图)运行窗体结果




    本文到此划上句号。特别申明由于本人技术有限,加之文字功力不济,不免有错漏或是表述不清的地方,还请大家斧正,更欢迎大家的相互交流。如果本文对于您有所帮助,那是我莫大的快慰。

本文实例可在office中国江羽博客下载,并附赠VB源码。



                                                                         (全文结束)

                                                                                            Office中国.江羽
                                                                                                2008-10-11


Word版文稿下载:


(实例及源码)VB建壳技术之指定工作组启动MDB项目


[ 本帖最后由 tanhong 于 2008-10-11 18:05 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点评

非常好的教程!  发表于 2012-8-22 08:24
发表于 2008-10-11 19:23:35 | 显示全部楼层
不错不错,学习了,
发表于 2008-10-12 23:33:07 | 显示全部楼层
不错,学习
发表于 2008-10-13 14:13:04 | 显示全部楼层
谢谢 学习学习
发表于 2008-10-24 19:33:18 | 显示全部楼层
谢谢了,好好学习一下.
发表于 2008-10-24 20:31:59 | 显示全部楼层
感谢楼主的辛勤劳动[:50]
发表于 2008-10-30 11:28:54 | 显示全部楼层
谢谢了,我正是想要一个壳的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-3-28 22:56 , Processed in 0.092099 second(s), 38 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表