2010年3月15日
#
LeeTien 写了这样一函数来加载功能区:
Public Function LoadRibbons()
'Load ribbons into the database
On Error GoTo Error1
Dim db As DAO.Database
Set db = Application.CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("tblRibbon")
' tblRibbon has to be replaced by your table name.
Do Until rs.EOF
Application.LoadCustomUI _
rs("RibbonName").Value, rs("RibbonXML").Value
rs.MoveNext
Loop
Error1_Exit:
On Error Resume Next
rs.Close
Set rs = Nothing
Set db = Nothing
Exit Function
Error1:
Select Case Err
Case 32609
' Ribbon already loaded
Case Else
MsgBox "Error: " & Err.Number & vbCrLf & _
Err.Description, vbCritical, _
"Error", Err.HelpFile, Err.HelpContext
End Select
Resume Error1_Exit
End Function
可是:
他把它放在启动窗体的加载事件里:
Sub Form_Load()
Call CreateRibbon
End Sub
来加载,当打开启动窗体时,并没有出错提示,但也看不到自定义功能区!
这是什么原因呢?
原因在于:
Access 2007在显示功能区之前首先要加载功能区。
比如窗体的功能区,我们必须在加载窗体之前加载功能区的XML,然后,指定这个窗体的功能区属性为这个功能区的名称,那么,打开这个窗体的时候,就会显示这个功能区,关闭这个窗体,那么这个功能区也会随之关闭,但是,功能区并没有从内存去除,因此,当第二次再打开这个窗体的时候,不需要再加载这个功能区就能显示功能区,反之,则程序出错。
而对于全局的功能区,它又是如何显示的呢?
只要是用的USysRibbons这个表存储的功能区,Access2007会自动加载并显示功能区。往往这不是我们所需要的,因为我们需要根据登录用户来显示不同的功能区,所以我们想手动控制。
那么,Access2007何时显示手动加载的功能区呢?我们知道,窗体显示功能区只要指定其功能区属性就可以显示与之相关的功能区。
同样,Access2007的全局功能区需要在Access的选项中的当前数据库选项卡中指定全局功能区的名称。
那么何时加载这个全局功能区呢?
事实上,Access有两种自动运行的机制:启动窗体和Autoexec自动宏,它们在数据库打开时都会自动运行。但两者的区别在于,Autoexec宏在Access初始化之前运行,启动窗体在Access初始化之后运行。全局功能区的显示则是在Access初始化的时候,在启动窗体运行之前。因此,我们必须在Autoexec自动宏中加载功能区,才能显示全局功能区。
所以我们设计一个自动宏Autoexec如下
宏 参数
RunCode LoadRibbons
这样,我们在数据库启动的时候就会首先运行自动宏来加载功能区,在数据库初始化之后,就能显示这个功能区了。
2009年6月4日
#
由于 ADP 只有一个数据库连接,没有象 Access mdb 那样的本地表和链接表,因此只有使用一个 ADO 连接来连接一个本地的 Access mdb 数据库存储本地的配置信息。为什么使用 ADO 呢?主要是因为 ADP 本身就是使用 ADO 技术,我们开发应用程序没有必要再使用一个 DAO 对象来增加机器的负担。假设,我们将这个 Access mdb 数据库文件命名为 Config.accdb (因为是用 Access 2007 缘故),在这个数据库中我们可以存储 ADP 中用到的 SQL Server 数据库的连接信息,如服务器实例及连接端口、数据库名称、登录ID、以及登录密码,当然还可以存储 ADP 应用程序使用者的信息,例如应用程序的名称、授权应用单位、使用者的登录用户名,还有就是用它来存储应用程序功能区的 XML,等等。

图1 ADP 用户登录窗体流程图
从图中,我们看出应用程序最少包括一个用户登录窗体、一个项目配置窗体、一个配置数据库、一个项目对象(自定义的类)、一个应用程序的功能区。ADP 的数据库连接随登录窗体打开而打开,随登录窗体关闭而断开,这样就保证了 ADP 在未打开的情况下不包含数据库连接,从而保证了数据库的数据库安全。同时,由于是用户登录后才加载功能区,这样可以做到不同的用户可以拥有不同的功能区,从而实现一部分(简单)应用程序权限控制。
当隐藏用户登录窗体后,程序的控制权就交给了应用程序首页窗体和功能区。一旦,将 ADP 关闭,就会自动关闭隐藏的用户登录窗体,这时,在窗体的关闭事件处理程序中就会执行断开 ADP 的数据库连接,同时清空 ADP 的 BaseConnectionString,以保证关闭后的 ADP 文件不包含数据库连接字符串,保证数据库的数据安全,同时为下一次打开 ADP 应用程序时能顺利的调用用户登录窗体,而不是出现默认的 ADP 数据库连接对话框。
2009年5月29日
#
经常看到这个词,好多地方称为"上下文",例如,"块 (block) 用于在只允许使用单个语句的上下文(context)中编写多条语句。",可是这个"上下文"不知道是什么意思,在这里还不如这样说更好,"块 (block) 用于在只允许使用单个语句的情形(context)中编写多条语句。"
词典:
context
Noun,(事件、声明或观念的)环境;背景;来龙去脉;(词、段落的)上下文,语境
常用词组:
in context
联系上下文;在上下文中
out of context
脱离上下文;割裂地
be apart from the context
脱离上下文
in the context of
在...情况下
in this context
关于此点; 就此而论
outside the context of
在...之外
context of situation
言语的环境
quote a remark out of its context
断章取义
2007年7月22日
#
2006年12月23日
#
摘要: 实现四舍六入逢五奇进偶不进的ACCESS VBA函数
阅读全文
2006年12月13日
#
摘要: 有的时候我们使用RC4来编码数据,但产生的字符串已经不是正常的字符串,在存储过程中会造成混乱,以致于无法用RC4来还原原来的数据。
解决问题办法就是将这个不正常的字符串进行转换后存储,取出时再转换回来。
阅读全文
2006年10月4日
#
摘要: 今天一朋友的笔记本Windows XP出现“SPOOLSV.EXE 长期 CPU 占用 99% ”故障,造成系统运行极慢。排查:在系统盘里搜索“SPOOLSV.EXE”,位于 C:\Windows\system32 文件夹下,查看文件属性,该文件为“Spooler SubSystem App”,为 Windows 系统文件,即...
阅读全文
2006年8月27日
#
摘要: 在以前的 Office 版本应用程序中,可以通过 Alt + "" 快捷键来访问系统主菜单上的命令,而在 2007 Office 中访问快捷键的方法有所改变。现在,使用二至五个键就可以访问 Ribbon 上的大多数命令。
阅读全文
2006年8月25日
#
摘要: Access 12 中自定义 Ribbon (四)—— 应用自定义的 Ribbon作者:朱亦文日期:2006年8月25日前面三讲均是为应用自定义的 Ribbon 作准备,本文讲述如何应用自定义的 Ribbon。在 Access 2007 中文版中,自定义 Ribbon 称为“自定义功能区”,其 ID 对应于 USysRibbons 表中的 RibbonName,它在这个表中...
阅读全文
摘要: Access 12 中自定义 Ribbon (三)—— 创建 Ribbon 系统数据表作者:朱亦文日期:2006年8月25日在第一篇文章,讲述了如何创建 Ribbon XML,那么这个 XML 如何使用呢?对于 Access 2007 来说,要将这个 XML 的内容存储在一个名为 USysRibbons 的系统表中,才能使用。一、创建 USysRibbons 表在上一讲中,建立了Ribbon.ac...
阅读全文