Access有哪些控件直接支持http協(xié)議?
已有 2256 次閱讀2015-11-25 18:22
|個(gè)人分類:access入門
在網(wǎng)絡(luò)時(shí)代的今天,access其實(shí)會(huì)越來越成為一個(gè)富客戶端(如果從office的安裝率上來看)。
讓人沮喪的是,access對(duì)web的支持非常遲緩。而web數(shù)據(jù)庫對(duì)于普通大眾來說,是遙遠(yuǎn)而不可及的。
sharepoint server對(duì)于普通人來說,根本就是用不起(也沒那個(gè)時(shí)間和精力來用好它)。
一般來講,access+SQL server是一種黃金搭配。這是典型的c/s結(jié)構(gòu)。不過,估計(jì)也有好多人,對(duì)這種搭配非?鄲。因?yàn)樗_實(shí)也有一些不便的地方,比如office文檔的管理,圖片的管理,以及其它形形色色的需要從各個(gè)地方收集數(shù)據(jù)(這種收集需要自動(dòng)化)。
access有哪些控件直接支持http協(xié)議呢?目前為止,一個(gè)都沒有!當(dāng)然我對(duì)access不熟也有關(guān)。不過,目前暫時(shí)沒有發(fā)現(xiàn)。
一:image控件不支持http協(xié)議。如果要顯示網(wǎng)絡(luò)上的圖片,應(yīng)該用web控件代替image
如果你在窗體中這樣寫:me!image0.picture="http://127.0.0.1/picture/11.jpg"。那么將發(fā)生錯(cuò)誤。圖片無法載入image控件中。
這時(shí),應(yīng)該用me!webbrowser1.datasource="http://127.0.0.1/picture/11.jpg"來代替。
但webbrowser用來顯示圖片,也是有明顯的缺點(diǎn):
(1)webbrowser只能用于單窗體,無法用于連續(xù)窗體,也無法用于數(shù)據(jù)表視圖
(2)圖片如果要做到精確控制(如自動(dòng)拉伸,平鋪、縮略圖,百葉窗展示等特效)則需要使用html,通過html來精確控制圖片的特效。
應(yīng)該說webbrowser是access通向網(wǎng)絡(luò)的一個(gè)很重要的通道。
二、ADO主要的對(duì)象,都默認(rèn)支持http協(xié)議。
這算是一個(gè)不錯(cuò)的消息。因?yàn)閞ecordset,record,stream都支持http協(xié)議(也支持ftp協(xié)議),這無形中會(huì)為access在使用網(wǎng)絡(luò)方面,帶來很大的便利。
三、xmlhttp控件
在b/s模式中,xmlhttp幾乎是不可缺少的主角。同樣,在access中也可以使用xmlhttp。這幾乎也是access提交數(shù)據(jù)的唯一途徑了。而且xmlhttp是異步的,多少能彌補(bǔ)點(diǎn)vba單線程的缺憾(vba的單線程,注定它難以適應(yīng)web時(shí)代)
四、winhttp5.1 控件
這個(gè)東西同樣適用于access。只不過它更強(qiáng)大,同時(shí)也更復(fù)雜。它是網(wǎng)抓的利器
五、owssup.dll
access的模板是如何從微軟網(wǎng)站上下載下來的。就是利用owssup.dll這個(gè)工具,這是一個(gè)上傳下載的工具。只不過它限制得比較厲害,所以變得很不好利用。不過,在個(gè)別的時(shí)候還是可以用得上。
六、hyperlink對(duì)象?
我對(duì)hyperlink對(duì)象,印象不深。但hyperlink.follow支持get,我們好理解,但支持post方法,變得有點(diǎn)不可思議了。怎么post?
這其實(shí)是一個(gè)活生生的get和post請(qǐng)求的構(gòu)造器呀,但卻沒有告訴我們應(yīng)該怎么用?特別是post方法。如果有人用過,望不吝告知,謝謝
/**********************************************************************/
說明1:以我菜鳥級(jí)的理解,在access的窗體中千萬不要直接使用web控件,而是應(yīng)該通過activeX控件,引用webbrowser。至于個(gè)中原因,我只能說微軟提供的web控件有點(diǎn)邪門,在細(xì)節(jié)的地方會(huì)把你往死里整,而且功能會(huì)很大縮水。
引用webbrowser后,access依然會(huì)認(rèn)為你使用web控件,這是沒辦法改變的。假設(shè)你把這個(gè)web控件名稱改成wb0,那么在窗體的代碼:
dim ctlWeb as webbrowser
set ctlWeb =wb0.object
這樣子,ctlWeb就是一個(gè)完整的webbrowser。
說明2:webbrowser在默認(rèn)的情況,會(huì)使用ie7的模式打開html網(wǎng)頁。如果你想要使用html5和css3,則要萬分注意兼容性了。百度一下,關(guān)于html文檔兼容性討論的內(nèi)容非常多,甚至如何hack ie的討論也是長篇累牘的。有關(guān)這方面,要多留意。
問題記錄點(diǎn)1:今天想要在access窗體中subClass這個(gè)webbrowser并不成功。主要是想解決webbrowser打開網(wǎng)頁后,去屏掉右鍵菜單,用自定義菜單替換掉?上Р⒉怀晒Γ蚩赡苁莂ccess的form并沒有popupMenu這個(gè)方法,而只有一個(gè)shortcutMenu屬性
問題記錄點(diǎn)2:access的Web化正常來說有兩種方式:
(1)是access界面庫的web化;
(2)是access作為富客戶端,而邏輯處理在服務(wù)器端,在這一點(diǎn)上access依然有很大的存在價(jià)值。不過我現(xiàn)在對(duì)vba這個(gè)腳本語言產(chǎn)生很大的懷疑。因?yàn)橥瑯幼鳛槟_本語言,不管是lua,javascript,還是python,都是突飛猛進(jìn),但vba自從1997年到現(xiàn)在,都沒有變過(有變的也只是增加longlong和longptr這個(gè)類型)其它的一點(diǎn)變化都沒。vba不管是編輯器,調(diào)試工具,還是語言本身,都遠(yuǎn)遠(yuǎn)落后這些腳本語言,看起來被取消,估計(jì)是指日可待。目前它只是看上去依然可用,也僅此而已。
問題記錄點(diǎn)3:access的界面Web化。
有幾個(gè)關(guān)鍵點(diǎn)需要突破:(1)就是html文件編譯成dll。比較幸運(yùn)的webbrowser依然支持res協(xié)議,這個(gè)我在win8.1+office2010和win10+office2016中都親測(cè)可用。winxp+office2003也是可用的。換句話說這沒有任何限制。所以問題變成,如何將眾多的html文件變成一個(gè)dll文件。
這個(gè)問題是非常重要的,因?yàn)椴还苁沁x擇mshtml作為解析引擎,還是選擇webkit或者是更適用當(dāng)界面庫的htmlayout,都首先要解決資源文件問題。在access中還是用mshtml這個(gè)比較親近一些,大家也比較熟悉。
(2)#include的問題。比較幸運(yùn)的在webbrowser中#include還是可以被解決。通過document的文檔行為,在一個(gè)html文件中可以加載另外的html文件
并且把它們包含成一個(gè)html文件。這樣可以解決頁眉,頁腳這種固定格式的東西,也可以解決iframe這樣類似子窗體的頁面問題。
(3)web頁面的數(shù)據(jù)交互:數(shù)據(jù)交互,我目前想到就是兩種方式:<1>自循環(huán)方式。所謂的自循環(huán)方式,就是讓access程序本身既是server端,也是web端,通過端口比如80端口,進(jìn)行數(shù)據(jù)交互。這種方式看起來有點(diǎn)繞,但它非常符合,現(xiàn)在絕大多數(shù)js框架的數(shù)據(jù)交互方式。不需要更新任何js代碼,都可以直接用。省時(shí)省力,但就是使用方式有點(diǎn)饒。雖然近在咫尺,卻要繞地球一圈。
<2>硬編碼方式。這是不少人用過,但卻感覺挫折感很強(qiáng)的方式。這種方式一般首先就是讓webbrowser無法提交網(wǎng)絡(luò)數(shù)據(jù),通過捕獲html的tag事件來進(jìn)行數(shù)據(jù)交互。這里面也分為兩種方式,一種就是 private withevents as mshtml。然后開始……。另一種方式,是使用windows.external。很奇怪的是windows.external居然無法直接執(zhí)行vba函數(shù)。雖然在vb6中可以通過olelib來解決,但在access中,這卻是行不通的,因?yàn)閍ccess本身沒有任何編譯功能。除非是用vb6進(jìn)行包裝。
(4)數(shù)據(jù)綁定問題:
數(shù)據(jù)綁定這個(gè)問題,實(shí)質(zhì)上和頁面交互問題是一樣的,ie其實(shí)不缺數(shù)據(jù)綁定功能?梢哉f早期的微軟在web桌面化也下過很大的功夫,可惜都失敗了。這些失敗反而成為ie極大的包袱。ie的數(shù)據(jù)綁定一般有三種方式。其中有一種方式,就是可以直接綁定recordset。不過現(xiàn)在的js框架,基本上都是通過json來操作數(shù)據(jù)。所以這種方式在access的web化過程中,是一個(gè)需要反復(fù)琢磨值不值用的問題