“我们希望你在MS Access中建立一个应用程序,但是我们不希望它看起来像Access。事实上,我们希望它看起来像一个web页面。。。像一个浏览器应用程序。”
这可行吗?你自己判断。下面是一个截屏,你可以在这里下载这个应用程序的代码,我称之为Something Not Entirely Unlike Access。这个应用程序描述了下面与浏览器类似的功能:
没有Access菜单
混合Access 图标和启动屏幕
单独的表格(页面)界面
自动调整子表格和它们的控制
下一步和上一步按钮,用于“页面”导航
开始页面按钮,用于将用户返回他们的“首页”
构建于WWW web浏览器页面内
用于加载新表格/子表格的超链接
在应用程序外提供快照形式的报表显示
如果这些主题中的任何一个吸引了你,那么请下载这个样例应用程序并试一试。我并没打算把它构建为多么完美的,所以不要给我发反馈告诉我它是多么粗糙。只是为了这个代码。。。在这个应用程序里代码很丰富。在一篇文章里没有办法全部表述出来,但是我会将它分为几个部分在将来的文章里进行描述。但是如果你愿意深入代码的话,你在这里可以看到所有的。
隐藏Access 内容
你想做的第一件事是删除使得Access看起来像Access的东西。菜单是第一个要处理的,下面是删除它的代码。我将这个代码放到了我的启动表格上,我要做的第一件事就是设置这个表格的可见属性为FALSE并关闭屏幕绘图(DoCmd.Echo False),以便我在用户看不到闪烁的情况下进行我的工作。我还将启动表格最大化,但是这个应用程序的其它方面还有很多工作要做。
Me.Visible=False
DoCmd.EchoFalse
DoCmd.Maximize
DoCmd.ShowToolbar"Web",acToolbarNo
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)DoCmd.ShowToolbar"MenuBar",acToolbarNo
DoCmd.ShowToolbar"FormView",acToolbarNo
菜单
为了关闭菜单,执行DoCmd.ShowToolbar命令,使用目标工具条或菜单的名称以及参数acToolbarNo(acToolbarYes,你可能会想到,它是显示菜单的)。帮助文档说ShowToolbar 只对工具条起作用,但是我没有做这个。你如果要自己确认一下,那么双击Welcome 标签。我添加了执行acToolbarYes选项来显示“菜单栏”的代码,它确实控制主菜单栏的可见与否。
图标和标题
Access内容的下一步是删除应用程序图标、应用程序标题和标题栏文本。我使用这个代码这么长时间了,我不能确定的说谁开发出来的,但是它大概是从Access Web开发者参考网站获得的。如果不是,我对那些对这个很好且有用的代码作出贡献的人们致以歉意。
这个函数和VBA 代码所做的设置启动属性做了相同的事情。举例来说,如果没有设置应用程序图标,那这个属性就不存在。当你第一次试图设置它的时候会弹出一个错误。应用程序标题也是一样。如果属性不存在的话,这个函数将创建它,并设置它为某些预设的值。
它的优点就是当你给这个应用程序指定图标时,Microsoft Access 主图标就会消失。还有,如果你不提供应用程序标题的话,它会默认为Microsoft Access 。所以,如果你试图隐藏所有关于Access 的东西,那么你需要提供一个标题。
PublicFunctionSetAppProperties()AsBoolean
OnErrorGoToErr_Handler
DimstrFileAsString
DimstrTitleAsString
DimdbsAsDAO.Database
DimprpAsDAO.Property
ConstcAPP_ICON="AppIcon"
ConstcAPP_TITLE="AppTitle"
Setdbs=CurrentDb
strFile=CurrentProject.Path&"dbj.ico"
strTitle="MyWebApp"
OnErrorResumeNext
dbs.Properties(cAPP_ICON)=strFile
IfErr.Number=3270Then
Err.Clear
Setprp=dbs.CreateProperty(cAPP_ICON,dbText,strFile)
dbs.Properties.Appendprp
EndIf
dbs.Properties(cAPP_TITLE)=strTitle
IfErr.Number=3270Then
Err.Clear
Setprp=dbs.CreateProperty(cAPP_TITLE,dbText,strTitle)
dbs.Properties.Appendprp
EndIf
Exit_Here:
Setdbs=Nothing
Application.RefreshTitleBar
ExitFunction
Err_Handler:
SelectCaseErr
Case3270'Propertynotfound
CaseElse
MsgBoxErr.Description,vbCritical
EndSelect
ResumeExit_Here
EndFunction
状态条视觉处理的最后一块是隐藏状态条。。。它是在页面底部的水平状态信息。现在,如果你想的话,你可以将这个选项保持为打开状态,因为即便是Internet Explorer也有一个状态条供你选择查看,但是我发现将它删除有助于模糊Accessian 特性并可以使应用程序看起来不那么像Microsoft Access 程序。你可以使用下面的代码设置状态条选项:
Application.SetOption "Show Status Bar", False
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)这个语法很便利。我用它在代码里设置所有的选项,特别是错误处理。如果你设置了一些公共常量,你可以根据是谁登录进来而方便地进行错误处理。对于用户,我设置它为Break In Class Mode或Break on Unhandled,但是当我测试的时候,我希望它是Break On All。设置它的代码如下:
PublicConstcBreakOnAllAsLong=0
PublicConstcBreakInClassAsLong=1
PublicConstcBreakUnhandledAsLong=2
SetOption"ErrorTrapping",cBreakOnAll'cBreakUnhandled
管理“页面”
这个功能很难在一篇文章里描述完全,所以我将给你一个概述。为了看起来像是Web浏览器,这个应用程序需要附加一个与页面一起加载的主客户端表格。这需要有一个能够记住页面和需要调整部分之间的导航的设备,以便它们能够占据整个屏幕。
具有子表格的单个表格
这些对象的第一个是通过创建一个用户曾经真正作为一个表格打开的表格来确认。我调用了我的frmMain,它是启动表格。所有其它的表格都命名为sfrmXXX或sfrmYYY以标识它们为子表格。(除了弹出表格像frmAbout或frmHelp。)这个主表格包含了一个叫做objSubform的单独子表格。每次作出一个数据请求时,无论是要求产品、雇员或订单,恰当的表格都会加载到这个子表格内,并且一个命令会发送到子表格来调整它的大小以适应可用的空间大小。
加载子表格的代码内嵌在frmMain 上,它总是保持打开状态。例如,点击列表中的客户(看上面的截屏)会执行这些代码。首先,调用一个函数来设置CustomerID ,下一行代码让主表格加载带有一个叫做“frmShowCustomer”表格的主要子表格。这个表格在加载的时候执行一个“获取”CustomerID 的操作,有效地过滤了提供给选定客户的结果。
SetCustomerIDNz(Me!CustomerID,"")
g_lngResult=Forms!frmMain.LoadMainSubform("frmShowCustomer",True)
导航
维护被访问的表格列表和重新加载它们的代码并不是琐碎的,而是封装在一个叫做clsNavigation的特定类里面。这基本上是将来某个文档中将讲述的,不过简要来说,它做以下事情:
Load 方法创建了一个内存ADO记录集
AddNavPage方法插入了一个新的nav 记录到记录集中
GetNavPage返回了一个特定“页面”
NavPrevPage和NavNextPage使你在页面中跳转
没有首页或主页按钮的web浏览器是怎么完成的呢?它会通过导航控制来处理,我选择使用一个叫做frmStartPage的表格来管理这个功能。这个表格总是第一个加载,而且重新加载它只要将上面的调用稍稍改一下就可以了,将“frmShowCustomer”替换为“frmStartPage”。顺便说一下,这个方法中的第二个选择是使用布尔值True或False,它决定导航控制是否记录访问日志。
严格地Web特性
添加一个Web浏览器
加强所要做的最后一个添加功能设置是使它更加web化。在Access 中有一个定制控制叫做Microsoft Web Browser 控制。加载web页面的代码非常非常简单,你可能都会笑出来。点击More Tools 图标导航过去并点击它,从而将它定位到工具箱,然后将控制重新命名为objWebBrowser并添加这行代码到任何满足你需要的事件中去:
Me!objWebBrowser.Navigate "http://www.google.com"
这就是要给你的应用程序添加web形象所要做的所有工作。
超连接
通过将控制的IsHyperlink 属性设置为Yes从而创建超链接。(它是在所有范围控制的Format标签下面属性列表中。)接下来,锁定控制以用于对Click方法编辑添加代码,从而使应用程序做某些事情,比如“跳转”到点击的记录。Access 进行格式化文本使得看起来像是超链接,甚至给你你在web 页面上能看到的pointing finger 图标。非常酷,而且非常做法很简单。
报表
如果它不是Access,那么它不能显示Access 报表,是吧?没错,所以,我们使用一个替换处理用于显示报表。假设报表是在变量sReport中,并且它要输出到一个叫做sFile的文件中去,下面的代码将创建并在一个单独的窗口中打开一个Microsoft Snapshot Report:
DoCmd.OutputTo acOutputReport, sReport, acFormatSNP, sFile, False
Application.FollowHyperlink strFile
正如它所显示的,这是一个非常简洁的解决方案。当然,文件是创建在磁盘上,但是现在磁盘空间这么便宜,而且随着时间的增长,它会从报表的存档快照获得更大的受益。有些东西可以从你的应用程序里进行管理,它们提供了到先前所创建报表的链接。这实在是太棒了!
满意吗?
如果上面的描述不够详细,在这里向你道歉。因为没有时间和空间去将Something Not Entirely Unlike Access应用程序的所有功能描述得更详细。如果这些功能中的任何一个听起来是你想添加到你的应用程序中的东西的话,那么将它下载下来将是一个很好的开始。还有,请继续关注这个版块的未来文章,我会详细地描述更加复杂处理过程的内部工作机制