Office中国论坛/Access中国论坛
标题: VB建壳技术之指定工作组启动MDB项目详解(技术交流) [打印本页]
作者: tanhong 时间: 2008-10-11 15:17
标题: VB建壳技术之指定工作组启动MDB项目详解(技术交流)
一、前言
1.1 用VB加Access进行项目开发之初衷
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、打开数据库,点菜单 工具—安全—设置安全机制向导,打开向导。
[attach]32619[/attach]
2、在对话框中单下一步,其中一些默认选项不用做修改,直至下图这一步很关键(见下图),你可选择已有用户,并设定密码,你也可以添加新用户,并为添加用户设定密码,剩下就是点下一步直至最后完成就好了。
[attach]32620[/attach]
完成后,会在mdb文件所在文件夹产生另两个文件(见下图),后缀mdw 的文件为工作组文件,后缀bak 的文件为 mdb 备份文件。你必须记住,用户名:tan 密码:123,这可是我们后面指定工作组打开mdb关键。
[attach]32621[/attach]
(未完待续)
[ 本帖最后由 tanhong 于 2008-10-11 17:05 编辑 ]
作者: tanhong 时间: 2008-10-11 15:22
三、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
复制代码
(未完待续)
[ 本帖最后由 tanhong 于 2008-10-11 15:37 编辑 ]
作者: tanhong 时间: 2008-10-11 15:24
- 指定工作组启动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
复制代码 (未完待续)
[ 本帖最后由 tanhong 于 2008-10-11 15:36 编辑 ]
作者: tanhong 时间: 2008-10-11 18:00
3.3最终完成建壳,并编译为EXE
[attach]32623[/attach]
- 将窗体BorderStyle属性设为:0-None 无边框模式,在picture属性中添加背景图片,实例图片CXT.jpg在素材文件夹中。
[attach]32624[/attach]
- 将控件工具栏中的时钟控件添加到窗体中,并将时钟控件Interval属性值设定为:3000,以便计时器触事件在三秒钟后关闭窗体。
[attach]32625[/attach]
- '*************************************************************************
- ' 过 程 名:Timer1_Timer
- '-------------------------------------------------------------------------
- ' 功能描述:计时器控件,计时触发事件,用以延时关闭窗体
- ' 输 入:无
- ' 输 出:无
- ' 调用模块:OpenWmdMdb '
- ' 编 程:江羽
- ' 日 期:2008-10-09
- '*************************************************************************
- Private Sub Timer1_Timer()
- Unload Me '关闭窗体
- Call OpenWmdMdb '调用指定工作组启动mdb项目模块
- End Sub
复制代码
- 编译成EXE应用程序,点菜单文件—生成工程1.exe,你就大功告成了。(见下图)运行窗体结果
[attach]32626[/attach]
本文到此划上句号。特别申明由于本人技术有限,加之文字功力不济,不免有错漏或是表述不清的地方,还请大家斧正,更欢迎大家的相互交流。如果本文对于您有所帮助,那是我莫大的快慰。
本文实例可在office中国江羽博客下载,并附赠VB源码。
(全文结束)
Office中国.江羽
2008-10-11
Word版文稿下载:[attach]32627[/attach]
(实例及源码)VB建壳技术之指定工作组启动MDB项目
[ 本帖最后由 tanhong 于 2008-10-11 18:05 编辑 ]
作者: tonyjx 时间: 2008-10-11 19:23
不错不错,学习了,
作者: df 时间: 2008-10-12 23:33
不错,学习
作者: beenet 时间: 2008-10-13 14:13
谢谢 学习学习
作者: 明镜 时间: 2008-10-24 19:33
谢谢了,好好学习一下.
作者: KerryHuang 时间: 2008-10-24 20:31
感谢楼主的辛勤劳动[:50]
作者: coolleaf 时间: 2008-10-30 11:28
谢谢了,我正是想要一个壳的。
作者: auluolal 时间: 2009-1-7 17:47
谢谢,学习中
作者: 展飞 时间: 2009-5-24 19:26
版主:你好!
请问为什么这句 “Set objAccess = CreateObject("ACCESS.Application") ”会出现“编译错误:无效外部过程”?
Micfrosoft ACCESS 11.0 Object library 已引用。
谢谢指导。
作者: 风啸啸 时间: 2009-7-19 20:13
收藏学习
作者: Morgen 时间: 2009-8-8 16:46
学习了,谢谢!
作者: lanshai 时间: 2009-8-10 12:24
thanks!
作者: yyxxx116633 时间: 2009-9-17 16:24
谢谢
作者: fytxcf 时间: 2009-9-20 15:54
aaaaaaaaa
作者: taofbjty2 时间: 2009-9-28 21:24
学习,看看
作者: xie62 时间: 2010-6-20 07:55
谢谢 学习学习
作者: hupingrenjia 时间: 2010-6-25 08:02
学习中。
作者: leijiqiang 时间: 2010-7-5 13:28
写得真得不错
作者: zhuyiwen 时间: 2012-8-22 08:26
非常好的教程,顶一个!
作者: access新新新手 时间: 2015-12-10 08:33
谢谢分享
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |