注册 登录
Office中国论坛/Access中国论坛 返回首页

ganlinlao的个人空间 http://www.office-cn.net/?230471 [收藏] [复制] [分享] [RSS]

日志

Access有哪些控件直接支持http协议?

已有 2127 次阅读2015-11-25 18:22 |个人分类:access入门

在网络时代的今天,access其实会越来越成为一个富客户端(如果从office的安装率上来看)。
让人沮丧的是,access对web的支持非常迟缓。而web数据库对于普通大众来说,是遥远而不可及的。
sharepoint server对于普通人来说,根本就是用不起(也没那个时间和精力来用好它)。

一般来讲,access+SQL server是一种黄金搭配。这是典型的c/s结构。不过,估计也有好多人,对这种搭配非常苦恼。因为它确实也有一些不便的地方,比如office文档的管理,图片的管理,以及其它形形色色的需要从各个地方收集数据(这种收集需要自动化)。
access有哪些控件直接支持http协议呢?目前为止,一个都没有!当然我对access不熟也有关。不过,目前暂时没有发现。
一:image控件不支持http协议。如果要显示网络上的图片,应该用web控件代替image
    如果你在窗体中这样写:me!image0.picture="http://127.0.0.1/picture/11.jpg"。那么将发生错误。图片无法载入image控件中。
   这时,应该用me!webbrowser1.datasource="http://127.0.0.1/picture/11.jpg"来代替。
但webbrowser用来显示图片,也是有明显的缺点:
    (1)webbrowser只能用于单窗体,无法用于连续窗体,也无法用于数据表视图
    (2)图片如果要做到精确控制(如自动拉伸,平铺、缩略图,百叶窗展示等特效)则需要使用html,通过html来精确控制图片的特效。
应该说webbrowser是access通向网络的一个很重要的通道。

二、ADO主要的对象,都默认支持http协议。
    这算是一个不错的消息。因为recordset,record,stream都支持http协议(也支持ftp协议),这无形中会为access在使用网络方面,带来很大的便利。

三、xmlhttp控件
      在b/s模式中,xmlhttp几乎是不可缺少的主角。同样,在access中也可以使用xmlhttp。这几乎也是access提交数据的唯一途径了。而且xmlhttp是异步的,多少能弥补点vba单线程的缺憾(vba的单线程,注定它难以适应web时代)
四、winhttp5.1 控件
      这个东西同样适用于access。只不过它更强大,同时也更复杂。它是网抓的利器
五、owssup.dll
      access的模板是如何从微软网站上下载下来的。就是利用owssup.dll这个工具,这是一个上传下载的工具。只不过它限制得比较厉害,所以变得很不好利用。不过,在个别的时候还是可以用得上。
六、hyperlink对象?
      我对hyperlink对象,印象不深。但hyperlink.follow支持get,我们好理解,但支持post方法,变得有点不可思议了。怎么post?
     这其实是一个活生生的get和post请求的构造器呀,但却没有告诉我们应该怎么用?特别是post方法。如果有人用过,望不吝告知,谢谢

/**********************************************************************/
说明1:以我菜鸟级的理解,在access的窗体中千万不要直接使用web控件,而是应该通过activeX控件,引用webbrowser。至于个中原因,我只能说微软提供的web控件有点邪门,在细节的地方会把你往死里整,而且功能会很大缩水。
      引用webbrowser后,access依然会认为你使用web控件,这是没办法改变的。假设你把这个web控件名称改成wb0,那么在窗体的代码:
     dim ctlWeb as webbrowser
     set ctlWeb =wb0.object
这样子,ctlWeb就是一个完整的webbrowser。
说明2:webbrowser在默认的情况,会使用ie7的模式打开html网页。如果你想要使用html5和css3,则要万分注意兼容性了。百度一下,关于html文档兼容性讨论的内容非常多,甚至如何hack ie的讨论也是长篇累牍的。有关这方面,要多留意。

问题记录点1:今天想要在access窗体中subClass这个webbrowser并不成功。主要是想解决webbrowser打开网页后,去屏掉右键菜单,用自定义菜单替换掉。可惜并不成功,原因可能是access的form并没有popupMenu这个方法,而只有一个shortcutMenu属性

问题记录点2:access的Web化正常来说有两种方式:
                    (1)是access界面库的web化;
                    (2)是access作为富客户端,而逻辑处理在服务器端,在这一点上access依然有很大的存在价值。不过我现在对vba这个脚本语言产生很大的怀疑。因为同样作为脚本语言,不管是lua,javascript,还是python,都是突飞猛进,但vba自从1997年到现在,都没有变过(有变的也只是增加longlong和longptr这个类型)其它的一点变化都没。vba不管是编辑器,调试工具,还是语言本身,都远远落后这些脚本语言,看起来被取消,估计是指日可待。目前它只是看上去依然可用,也仅此而已。

问题记录点3:access的界面Web化。
有几个关键点需要突破:(1)就是html文件编译成dll。比较幸运的webbrowser依然支持res协议,这个我在win8.1+office2010和win10+office2016中都亲测可用。winxp+office2003也是可用的。换句话说这没有任何限制。所以问题变成,如何将众多的html文件变成一个dll文件。
这个问题是非常重要的,因为不管是选择mshtml作为解析引擎,还是选择webkit或者是更适用当界面库的htmlayout,都首先要解决资源文件问题。在access中还是用mshtml这个比较亲近一些,大家也比较熟悉。

(2)#include的问题。比较幸运的在webbrowser中#include还是可以被解决。通过document的文档行为,在一个html文件中可以加载另外的html文件
并且把它们包含成一个html文件。这样可以解决页眉,页脚这种固定格式的东西,也可以解决iframe这样类似子窗体的页面问题。

(3)web页面的数据交互:数据交互,我目前想到就是两种方式:<1>自循环方式。所谓的自循环方式,就是让access程序本身既是server端,也是web端,通过端口比如80端口,进行数据交互。这种方式看起来有点绕,但它非常符合,现在绝大多数js框架的数据交互方式。不需要更新任何js代码,都可以直接用。省时省力,但就是使用方式有点饶。虽然近在咫尺,却要绕地球一圈。
<2>硬编码方式。这是不少人用过,但却感觉挫折感很强的方式。这种方式一般首先就是让webbrowser无法提交网络数据,通过捕获html的tag事件来进行数据交互。这里面也分为两种方式,一种就是 private withevents as mshtml。然后开始……。另一种方式,是使用windows.external。很奇怪的是windows.external居然无法直接执行vba函数。虽然在vb6中可以通过olelib来解决,但在access中,这却是行不通的,因为access本身没有任何编译功能。除非是用vb6进行包装。

(4)数据绑定问题
       数据绑定这个问题,实质上和页面交互问题是一样的,ie其实不缺数据绑定功能。可以说早期的微软在web桌面化也下过很大的功夫,可惜都失败了。这些失败反而成为ie极大的包袱。ie的数据绑定一般有三种方式。其中有一种方式,就是可以直接绑定recordset。不过现在的js框架,基本上都是通过json来操作数据。所以这种方式在access的web化过程中,是一个需要反复琢磨值不值用的问题

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

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

GMT+8, 2024-11-25 07:57 , Processed in 0.125400 second(s), 17 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部