BOE.COM Article Resource News Links About US
文章標題:Visual FoxPro 漫談
作品來源:BOE 數(shù)據(jù)網(wǎng)絡(luò)工作室
創(chuàng)建日期:2001年02月23日
最后更新:2002年07月21日
文字數(shù)量:約22000字
作者姓名:陳純
譯者姓名 原創(chuàng)作品 無譯者
版權(quán)聲明 版權(quán)屬于BOE 數(shù)據(jù)網(wǎng)絡(luò)工作室
細節(jié)描述
作為市場上最靈活和功能最強大的數(shù)據(jù)庫管理系統(tǒng),Visual FoxPro擁有悠久而輝煌的發(fā)展歷史。它初創(chuàng)時是Fox Software公司的FoxBASE產(chǎn)品,“Fox”(這是國際編程界對她的稱呼)一種可靠、便捷和高效的程序員用的數(shù)據(jù)庫產(chǎn)品而名聞遐邇。世界上沒有一種產(chǎn)品像 Visual FoxPro 那樣運行,她是獨一無二的!
目錄
前言
Visual FoxPro是什么?
Visual FoxPro 已經(jīng)過時了嗎?
面向?qū)ο笈c面向過程之爭?
面向記錄與面向集合之爭?
產(chǎn)品定位導(dǎo)致Visual FoxPro變化不易為人們感覺。微軟要把Visual FoxPro作為三層構(gòu)架(或是多層構(gòu)架)的中間層開發(fā)工具
Visual FoxPro 只能局限于桌面應(yīng)用程序的開發(fā)嗎?
不要以為Visual FoxPro是“低端產(chǎn)品",無論從數(shù)據(jù)庫(DBF Base)品質(zhì)還是開發(fā)環(huán)境評價Visual FoxPro, 它都是一個“高端工具”
Visual FoxPro 的語言看上去蠻難的
OOP不僅是指“面向?qū)ο蟆钡拈_發(fā)環(huán)境,更是一種開發(fā)思想、開發(fā)技術(shù),Visual FoxPro 在后者上做得更好
Visual FoxPro的界面能力真的很差嗎
Visual FoxPro與OLE DB、ADO
Visual FoxPro是一種歷史悠久的產(chǎn)品,很多用戶是從FoxBASE到FoxPro到Visual FoxPro,這樣一步一步過來的。歷史的積淀多了,歷史的包袱也重了——許多程序員往往抓住老產(chǎn)品而忘了深入鉆研新產(chǎn)品的新特性,這是一種悲哀
Visual FoxPro 與其他開發(fā)工具的比較
Visual FoxPro 從Visual Studio 中分離出來了
我們失去了什么
Visual FoxPro 與.Net
客觀上,有利于Visual FoxPro 的發(fā)展
獨立面對挑戰(zhàn)
Visual FoxPro 7 的特性
巨好的開發(fā)環(huán)境
數(shù)據(jù)庫事件
XML與Web Service
COM以及COM+
Install Shield Express For Visual FoxPro
Visual FoxPro 7 SP1
我們的 Visual FoxPro 8
已經(jīng)看到的Visual FoxPro 8 的新特性
微軟對Visual FoxPro 8的定位
Visual FoxPro 8 不會是.Net語言
我對Visual FoxPro 8 的期望
選擇Visual FoxPro
前言
這篇文章可以說是 BOE 數(shù)據(jù)網(wǎng)絡(luò)工作室的開山之作了。它的動工是從2000年國慶節(jié)開始的,寫寫停停,直到那年的農(nóng)歷春節(jié)才完成初稿……后來我有幾次修改,算在2002年4月的這個版本,應(yīng)該是第四版了!當初,我寫這篇文章的動機是:平靜的表達我的觀點。作為一名 Visual FoxPro 的程序員經(jīng)常受到別人的質(zhì)疑、甚至是批駁、挖苦,我不是一個擅長口舌爭斗的人,更不敢冒犯“眾怒”。于是我就用鍵盤陸續(xù)敲擊一些文字,表達我對 Visual FoxPro 的認識,同時表達對各類問題的看法……
近兩年來,就我本人來說發(fā)生了很多變化:由于工作的關(guān)系,我接觸了很多其他的開發(fā)工具,其中有大家廣為熟悉的Delphi,也有國內(nèi)不見經(jīng)傳的Rapid Plus、InTouch、InSQL、InTruck。體會過種種、經(jīng)歷過許多,我覺得我更有能力完成此文了,我希望站在公正的立場上看待Visual FoxPro,而不是社會上一味的批評、鄙夷,更不是Fox Fans的“天下我是老大”的心態(tài)!希望大家能在文章中感到BOE的成熟和進步。
網(wǎng)友們特別喜歡這篇文章,我知道Fox 的 Fans能在此處得到共鳴,其實我寫這篇文章也就是要把平時大家關(guān)心的話題總結(jié)歸納一下,去粗取精、去偽存真……
去年春天 Visual FoxPro 7 就正式發(fā)行,好多狐友都在等待簡體中文版,很遺憾的是,微軟并沒有漢化它。我覺得,沒有任何必要使用簡體中文版的Visual FoxPro 7,原因如此:功能上講,中文版與英文版完全相同;Visual FoxPro 7的IDE與以前版本沒有什么區(qū)別,所以對于熟悉Visual FoxPro的用戶來說,使用上不會有任何障礙;再就是Help文件,Visual FoxPro 7自帶了一個完整、獨立的英文版的,而中文Visual FoxPro 6的Help是集成在MSDN里的,巨大無比,其實也沒怎么漢化,一般的Fox Fans都不裝的,所以就幫助來說,對于不熟悉英語的朋友來說,英語Visual FoxPro 7與中文Visual FoxPro 6是一樣的;Visual FoxPro 7從各方面來說,均非Visual FoxPro 6可比擬的,升級開發(fā)工具是必然的。所以,希望各位,升級到Visual FoxPro 7吧!
Visual FoxPro是什么
作為市場上最靈活和功能最強大的數(shù)據(jù)庫管理系統(tǒng),Visual FoxPro擁有悠久而輝煌的發(fā)展歷史。它初創(chuàng)時是Fox Software公司的FoxBASE產(chǎn)品,“Fox”(這是國際編程界對它的稱呼)一種可靠、便捷和高效的程序員用的數(shù)據(jù)庫產(chǎn)品而名聞遐邇。 世界上沒有一種產(chǎn)品像 Visual FoxPro 那樣運行,它是獨一無二的!
許多人在享受了Visual FoxPro的服務(wù)后卻說不清它是什么。就讓我們沿著它的發(fā)展軌跡了解了解它吧!這會使您能對它有更深刻的認識。
FoxPro隸屬于一種名為Xbase的DBMS類別。Xbase這個術(shù)語很常見,他表示諸如FoxPro、dBASEIII PLUS、dBASEIV、FoxBASE+以及ARAGO的語言。Xbase最初起源于一個大型機使用的DBMS,這個DBMS叫做JPLDIS(噴射推動實驗室數(shù)據(jù)庫管理和信息檢索系統(tǒng))。這個DBMS 是由美國人Jeb Long在1972年開發(fā)成功的。到目前為止全世界的開發(fā)者和程序員已經(jīng)編寫了幾千萬行的Xbase代碼。
追溯到80年代末,F(xiàn)oxBASE是dBase的克隆系統(tǒng)。只要是dBASEIII能做的工作,F(xiàn)oxBASE就能做得更好更快。FoxBASE雖然擁有某些全新的特征,但它并沒有真正重大的技術(shù)突破,只是為了運行得更快更好,而更重要的是它與dBASEIII兼容。
FoxPro 1.0首先背離了與兼容的原則。它開始在圖形用戶界面的設(shè)計和軟件開發(fā)方法中采用一些新的思路,從而使它領(lǐng)先于當時年前景已不妙的dBASEIV。
從2.0開始,F(xiàn)oxPro才真正形成了它自己的特色。當FoxPro 2.0推出時,它包含了若干項關(guān)鍵技術(shù),給PC數(shù)據(jù)庫開發(fā)市場帶來了革命性的變化。這些技術(shù)是:加入了Rushmore技術(shù),它能從事許多難以想象的復(fù)雜工作。突然之間,帶有以百萬計數(shù)的記錄的表格在PC數(shù)據(jù)庫系統(tǒng)中不僅成為可能,而且可以非常容易地加以實現(xiàn),無需轉(zhuǎn)用其他比較昂貴的技術(shù);Rushmore最重要的優(yōu)點在于它是完全自動化的,不用用戶花費精力和時間。因為有了Rushmore技術(shù),再加上Fox天生的快速,即使在今天Visual FoxPro仍然是最快的桌面數(shù)據(jù)庫引擎。
SQL語句是FoxPro 2.0推出的另一項具有革命性意義的關(guān)鍵技術(shù)。Fox的開發(fā)人員首次用單一語句取代了整個程序過程,并且這種支持是內(nèi)含于Fox數(shù)據(jù)引擎之中的。SQL語言曾經(jīng)并且現(xiàn)在仍然是強大的數(shù)據(jù)語言。
FoxPro 2.0還推出了某種所見即所得的開發(fā)報表和屏幕的工具。
FoxPro 2.0確實具備了我們今天的Visual FoxPro擁有的一些出色的功能。GUI設(shè)計服務(wù)、SQL和極快的數(shù)據(jù)訪問,是它明顯的特征。
FoxPro 2.5有for DOS、for Windows版,不過那個Windows版只是具有看上去像“Windows”的DOS應(yīng)用程序的外觀。特別是那個DOS下的版本絕對是經(jīng)典之作,觀察身邊是不是還有很多這樣的系統(tǒng)在運行著。當時有人這樣評價:這個軟件已經(jīng)無法再快了,除非硬件升級……
直到1995年春天Visual FoxPro推出時,才出現(xiàn)了FoxPro的又一次重大改進(這時Microsoft已經(jīng)收購了Fox Software公司)。Visual FoxPro 3.0增加了一些人們企盼已久的特性,使PC數(shù)據(jù)庫開發(fā)界大為震驚。我們可以看到:Visual FoxPro與FoxPro是由很大差別的,不要再把Visual FoxPro成為FoxPro了。
這些特性是:
數(shù)據(jù)庫容器(Database Container),也叫DBC,它增加了開發(fā)人員多年盼望的對存儲過程的支持、與表格相關(guān)聯(lián)的數(shù)據(jù)規(guī)則和一系列的附加數(shù)據(jù)功能。
遠程數(shù)據(jù)的無縫連接。談到連接遠程數(shù)據(jù)的處理,大家往往會想到RDO、ADO、BDE等處理數(shù)據(jù)引擎,那么Visual FoxPro利用什么實現(xiàn)遠程數(shù)據(jù)的無縫連接?Visual FoxPro本身的數(shù)據(jù)處理引擎,這和其他任何開發(fā)工具都是不同的!Visual FoxPro數(shù)據(jù)處理引擎通過ODBC驅(qū)動程序與遠程數(shù)據(jù)庫服務(wù)器“通話”,遠程數(shù)據(jù)庫服務(wù)器的ODBC驅(qū)動程序能將Visual FoxPro數(shù)據(jù)轉(zhuǎn)化成可由他們解釋的數(shù)據(jù);相反,Visual FoxPro的ODBC驅(qū)動程序也能將遠程數(shù)據(jù)轉(zhuǎn)化成可由Visual FoxPro數(shù)據(jù)引擎處理的數(shù)據(jù)??梢姡灰h程數(shù)據(jù)庫有ODBC驅(qū)動程序,就可以用Visual FoxPro最為客戶端軟件。常見的SQL Server、Oracle、Access等數(shù)據(jù)庫都提供ODBC驅(qū)動程序。
在Visual FoxPro中實際操作遠程數(shù)據(jù)有兩種方法,遠程視圖和SPT技術(shù)。視圖(View)是可更新的SQL光標,增加了一整套的數(shù)據(jù)訪問方法,用于數(shù)據(jù)處理、GUI顯示和報表制作。它支持兩種類型的視圖,即本地視圖和遠程視圖。本地視圖是基于Visual FoxPro表格的視圖,遠程視圖是基于任何ODBC數(shù)據(jù)源的視圖。另外為了使Visual FoxPro成為完整的C/S開發(fā)環(huán)境,除視圖之外Visual FoxPro還支持SPT(SQL Pass Through)技術(shù)來完成視圖無法完成的工作,比如數(shù)據(jù)庫服務(wù)器的用戶管理、存儲過程調(diào)用等。View與SPT技術(shù)的產(chǎn)生后,Visual FoxPro就成為訪問遠程數(shù)據(jù)的主要工具。從總體來看,創(chuàng)建整個企業(yè)范圍內(nèi)的應(yīng)用程序和使用存儲在遠程數(shù)據(jù)源中的數(shù)據(jù),幾乎與使用Visual FoxPro表格本身一樣容易,處理在數(shù)據(jù)存取時增加了一些命令、函數(shù),數(shù)據(jù)處理與普通的Visual FoxPro編程沒有任何區(qū)別。再次指出:Remote View與SPT技術(shù)是由Visual FoxPro數(shù)據(jù)處理引擎直接支持的,這與在VB、VC++中的外部數(shù)據(jù)訪問技術(shù)不同(他們使用組件,如:DAO、RDO、ADO……),所以用Visual FoxPro訪問遠程數(shù)據(jù)的效率很高,并能把遠程數(shù)據(jù)與本地數(shù)據(jù)完美的融合在一起,最大程度地提高開發(fā)效率和程序運行效率。
完全支持面向?qū)ο蠹夹g(shù)(OOP)。充分而健壯的實現(xiàn)了面向?qū)ο蟮奶幚矸绞酱蟠蟾纳屏塑浖_發(fā)條件。健壯的對象模型和創(chuàng)建你自己的類及子類的所用的功能,形成了一種全新的軟件開發(fā)手段。
Visual FoxPro 5.0是3.0的升級版本,它是一個32位的系統(tǒng)。具備了使用和創(chuàng)建COM服務(wù)器的功能,并開始支持在Internet上發(fā)布Visual FoxPro。從這個版本開始,Visual FoxPro進入了Visual studio家族,并且Visual FoxPro將不再升級的謠言也是在這個時期出現(xiàn)。
在Visual FoxPro 6.0出現(xiàn)之前,微軟計劃推出DNA,演化到今天就是.NET,并承諾把Visual FoxPro發(fā)展成健壯的中間層工具,所以這以后Visual FoxPro的變化初級用戶就不太容易感覺了。
Visual FoxPro 6.0也沒有根本上的變化,不過有些變化還是相當明顯的。Access和Assign這兩種方法在控制放入你的對象中的數(shù)據(jù)方面很有創(chuàng)意。運用新的Component Gallery(組件庫)和Foundation Classes(基礎(chǔ)類),你能很容易地轉(zhuǎn)向創(chuàng)建面向?qū)ο蟮膽?yīng)用程序的工作。對COM支持的更好,在Server Pack 3后我們可以用Visual FoxPro創(chuàng)建多線程的COM組件。
Visual FoxPro 7是Fox第一個可視化版本——Visual FoxPro 3以后的最具有革命意義的一次產(chǎn)品升級換代。關(guān)于它的特性,稍候本文會有專門段落講解。
Visual FoxPro的語言是由Xbase、SQL、OOP構(gòu)成的。我不知道這樣分解是否合理,我只是從FoxPro的發(fā)展歷史得出以上結(jié)論的。其實以上三者在Visual FoxPro完美的融合在一起了,已經(jīng)與Visual FoxPro血脈相連、不可分割,很多語句、函數(shù)很難區(qū)分它屬于哪個門類(也沒必要)。再者Xbase這一叫法也不十分妥當,這樣容易讓人誤會,好像Visual FoxPro的語言是沒有發(fā)展的“死語言”、是十幾年前的“老古董”,其實在FoxPro每一次升級中(現(xiàn)在已是Visual FoxPro 7)都會對這部分語言進行修訂、增補。我看還是這樣:Visual FoxPro語言就叫它:“Visual FoxPro語言”,它既不同于任何以往的Xbase(最多有歷史淵源),也不同于其它的編程語言。這就象Delphi那樣,是Object Pascal語言,不是以前的Pascal;VB就是VB,不是以前的 Basic。
從Fox進入可視化的時代后,對COM技術(shù)的支持一直是Visual FoxPro在過去、現(xiàn)在、將來不斷改進的地方。面向?qū)ο蟪绦蛟O(shè)計(OOP)的最大的好處就在于代碼的重復(fù)使用。然而,OOP只是一種解決代碼重復(fù)使用的一種優(yōu)秀的方案(solution)。單純利用OOP技術(shù)不僅要求所有對象都必須用一種語言完成,并且你還需要得到原程序代碼嵌入應(yīng)用程序(就像我們在Visual FoxPro開發(fā)使用Class那樣)。如果對象是有你或你的公司完成的這些可能不是什么問題,但如果對象是由其他人或其他公司寫的這就是問題了……再者為了節(jié)省資源我們常希望把一對象放在遠程的計算機上供許多應(yīng)用程序使用,怎樣簡單、安全完成這個任務(wù)呢?看來,單有OOP是不行的!于是微軟提出了Component Object Model(COM)技術(shù),有了它我們就不需要把對象源程序嵌入我們的應(yīng)用程序中,就可以使用其他語言開發(fā)的對象,就可以分布的使用對象了。
COM技術(shù)提供四種不同的特性,Visual FoxPro支持所有的COM 特性。
ActiveX documents 允許用戶在一個應(yīng)用程序中編輯另一個應(yīng)用程序的document。我們把Word文檔嵌入或鏈接到Visual FoxPro中,就可以不離開Visual FoxPro編輯Word文檔了。
ActiveX controls 為開發(fā)人員提供了增加的系統(tǒng)功能的方法,典型的應(yīng)用就是各類ActiveX控件的使用來加強用戶界面。這里要說明的是Visual FoxPro不支持(7.0也不支持)“集裝箱式的”ActiveX 控件,比如Cool bar控件。
Automation 允許用戶在一個應(yīng)用程序中操縱另外一個應(yīng)用程序或組件,典型的應(yīng)用就是Visual FoxPro 與Office 的OLE-Automation應(yīng)用(與Word、Excel無縫連接)。
Remote Automation 或者稱 Distributed COM (DCOM)與Automation技術(shù)差不多,只是它支持組件的分布,這就是微軟的分布式應(yīng)用戰(zhàn)略。
Visual FoxPro 不支持Active controls(ActiveX)的開發(fā),但支持server components的開發(fā),也就是在Automation、Remote Automation中使用的組件都可以用Visual FoxPro來開發(fā)。Visual FoxPro的這種能力是從5.0開始具有的,到了6.0的SP 3已經(jīng)可以開發(fā)出多線程的組件了,這些在上文已經(jīng)有過論述。以后的 Visual FoxPro 版本一定會對Automation,特別是Remote Automation有更好的支持,無論是開發(fā)server components,還是由Visual FoxPro充當客戶程序。
綜上所述,Visual FoxPro是創(chuàng)建關(guān)鍵任務(wù)的、企業(yè)范圍的、面向?qū)ο蟮膯螌哟?、雙層次、多層次應(yīng)用程序的重要開發(fā)工具,這些應(yīng)用程序可以在本地或全球范圍內(nèi)進行配置。
Visual FoxPro已經(jīng)過時了嗎
恕我直言,這樣的問題我真的聽膩了。這個問題我聽了好幾年了。從謠言出現(xiàn)到今天Visual FoxPro的版本已經(jīng)生了兩次變化,就是Visual FoxPro 6.0 與2001年春天推出的Visual FoxPro 7.0。根據(jù)微軟的官方消息,Visual FoxPro 8(可能是這個名稱吧)已經(jīng)在研發(fā)之中了。我不敢保證是否會有Visual FoxPro 9.0(這就像我不敢保證微軟是否在那時還存在一樣)(注:實際上2004年的9.0以及2005年9.0SP1已經(jīng)發(fā)布)。可以這樣認為,只要不出意外情況(比如微軟倒閉、業(yè)界發(fā)生了重大的變革等),F(xiàn)ox就會平穩(wěn)地發(fā)展!
在國外,一個程序員、一家公司把他們使用的開發(fā)工具視作一項投資,作為Visual FoxPro的開發(fā)廠商微軟公司就必須保護客戶的投資權(quán)益,這是很基本的商業(yè)原則,微軟絕對不敢隨意淘汰有著50萬用戶的Fox,除非永遠不想賺這50萬用戶的錢了。
為什么會有Visual FoxPro 要淘汰的傳聞呢,我不是很清楚。但這兩年微軟對Visual FoxPro的不宣傳態(tài)度卻是為這股謠言起到了推波助瀾的作用。另外Visual FoxPro 確實是一個容易引起誤會的產(chǎn)品,初級用戶很容易對它產(chǎn)生“不怎么樣的”評判,于是加上那謠言就產(chǎn)生了“Visual FoxPro 就真的要淘汰了”的幻覺了。
為什么說Visual FoxPro是容易引起誤會的產(chǎn)品呢?我總結(jié)以下幾點原因:
面向?qū)ο笈c面向過程之爭
我們說Visual FoxPro是面向?qū)ο蠡恼Z言,是有根據(jù)的。面向?qū)ο蠡恼Z言必須具備四個特性:抽象(Abstraction)、封裝(Encapsulation)、繼承(Inheritance)、多態(tài)(Polymorphism)。對照一下Visual FoxPro,是不是支持這四大特性!
當然,Visual FoxPro 與C++和Object Pascal 一樣都是歷史悠久的語言,所以語言中有很多面向過程的語素。我知道很多學(xué)校在教學(xué)中,只是教導(dǎo)學(xué)生們使用Visual FoxPro的面向過程的語言特色,而忽視了面向?qū)ο蟮慕虒W(xué),同樣的問題也存在于廣大的 Visual FoxPro 程序員中。我們必須明白:不能因為我們沒有使用Visual FoxPro面向?qū)ο蟮膹姶蠊δ?,而說Visual FoxPro不是面向?qū)ο蟮恼Z言,這就像不能因為天下雨、沒有出太陽,而說太陽被天狗吃掉了——多么的幼稚可笑!
我們知道Visual FoxPro對數(shù)據(jù)的操作沿用了多年來的面向過程的做法,這與現(xiàn)在流行的開發(fā)工具有很大的不同。我覺得,微軟這樣做是有它的道理的:
第一、面向過程的數(shù)據(jù)處理,更能發(fā)揮XBase語言體系的靈活與隨意的特色。這一點,你用過其他的數(shù)據(jù)庫開發(fā)工具,然后再用用Visual FoxPro就明白了。
第二、不直接提供面向?qū)ο蟮臄?shù)據(jù)處理組件,不代表不允許用戶封裝自己的數(shù)據(jù)處理組件。很多優(yōu)秀的 Fox程序員,都會自己封裝專門數(shù)據(jù)處理組件,這才是Visual FoxPro編程的高尚境界!
面向記錄與面向集合之爭
根據(jù)筆者的淺薄認知,關(guān)系型數(shù)據(jù)庫處理可以分為面向記錄操作和面向集合操作。
各種開發(fā)工具支持的客戶端光標體系就是面向記錄操作的,它們支持記錄之間的絕對定位,更明白地說就是可以在記錄之間導(dǎo)航,諸如:SKIP、GO TOP之類的語句。Visual FoxPro 無疑是此道的絕對高手,20年的語言發(fā)展,聚集了大量面向記錄的語言要素。這是因為這樣,我們才會反復(fù)強調(diào):Visual FoxPro的Cursor 體系靈活、強大!
各類大型數(shù)據(jù)庫,如Oracle、SQL Server 是面向集合處理的代表,看看正統(tǒng)的SQL 語言,絕對沒有數(shù)據(jù)導(dǎo)航之說,數(shù)據(jù)記錄之間是平等的,一切都要講關(guān)系、擺條件!
隨著技術(shù)的發(fā)展,人們開始注意到,不能分割這兩種對數(shù)據(jù)的操作方式,于是大型數(shù)據(jù)庫支持了游標語素,F(xiàn)ox也支持符合規(guī)范的SQL 語言。
產(chǎn)品定位導(dǎo)致Visual FoxPro變化不易為人們感覺。微軟要把Visual FoxPro作為三層構(gòu)架(或是多層構(gòu)架)的中間層開發(fā)工具。
什么是三層構(gòu)架呢?第一層是用戶界面:它包含了用戶界面,讓使用者輸入,輸出,查詢等工作;第三層是資料層:它就是用來放資料的地方,一般是指后端數(shù)據(jù)庫,主要有包括 Oracle、SQL Server等,它主要是提供一個很大的地方,來有規(guī)則的存放數(shù)據(jù);第二層是商務(wù)邏輯層(中間層):有人要說了:存取資料,直接從第一層跳到第二層可不可以?當然可以,沒有人規(guī)定不能走捷徑,而且從數(shù)據(jù)庫直接抓資料,既快又好,那為什么搞出個第二層呢?
商務(wù)規(guī)則是經(jīng)常變化的,比如上班從8 點改為10 點,那電腦怎么知道老板因為不景氣少讓大家上二個小時班呢?它一定無法知道,你必須告訴它,這時問題就來了,如果你有很多部電腦,例如:100 臺,你就得一部部換新程序。如果這是一個掛在Internet上的網(wǎng)絡(luò)程序,難道總讓用戶download新程序不成?
更重要的是,在大量客戶存在的環(huán)境里,傳統(tǒng)的兩層構(gòu)架根本沒有能力承擔巨大的工作壓力,必須通過某種中間系統(tǒng)實現(xiàn)壓力平衡,這就是中間層的另一妙用!
中間層是沒有圖形界面設(shè)計的代碼編寫,并且是OOP方式的代碼編寫,不僅要熟悉后臺數(shù)據(jù)庫的特性,還要考慮前臺界面工具的特性,最重要的是商務(wù)邏輯的構(gòu)架,同時還要求懂得IIS、MTS(COM+)、NT的安全設(shè)置等復(fù)雜枯燥的東西。有趣的是,近年來 Visual FoxPro 的各種改進,更多的是在這些方面下功夫,到了最新版本的Visual FoxPro 7 更是在此方面增加了若干特性,下面就讓我用四個問題來說明Visual FoxPro 在開發(fā)中間層方面的貢獻:
問題一:Visual FoxPro能開發(fā)出穩(wěn)定、有效率的Server程序嗎?能,在1999年發(fā)布的Visual FoxPro SP 3中微軟賦予了Visual FoxPro開發(fā)多線程進程的內(nèi)組件的能力,并增加了新的運行時刻庫VFPnT.DLL(n代表版本號),支持其運行,在這個運行庫中,刪除了大量老式的和界面控制元素,使得它更小巧。但是由于Visual FoxPro6本身不是很穩(wěn)定(加打SP4或SP5才有所改善),所以這個很棒的功能在Visual FoxPro 6下并不能充分發(fā)揮,直到Visual FoxPro 7出現(xiàn)才使它的顯示出英雄本色!
問題二:分布式的事務(wù)、動態(tài)負載平衡怎么實現(xiàn)?Visual FoxPro 7對COM+有很好的支持,借由COM+就可以解決這兩個問題了!
問題三:作為Server程序,客戶程序怎樣與Server交換數(shù)據(jù)集合?這是Visual FoxPro 6開發(fā)的Server程序的致命弱點,我們知道Visual FoxPro是用來處理數(shù)據(jù)的,但不能與外界自由交換數(shù)據(jù)集合會大大降低開發(fā)、使用以及程序運行效率!在Visual FoxPro 7里我們XML就可以快速、輕易的傳遞大型數(shù)據(jù)集合,真正做到數(shù)據(jù)集的來去自由?,F(xiàn)在回想Visual FoxPro 6中我們用的那種“循環(huán)+屬性”的做法,真有天上與人間的感受!
問題四:能不能讓Visual FoxPro開發(fā)的Server任由客戶使用,叫干什么就干什么?可以的,在Visual FoxPro 7里提供了一個全新的函數(shù):ExecScript()。有了它,就可以一次執(zhí)行多條客戶端送來的符合Visual FoxPro規(guī)范的語句:你可以定義變量、做查詢、更新數(shù)據(jù)、修改表結(jié)構(gòu)……
微軟確實實踐著讓Visual FoxPro在中間層運行的承諾。但遺憾的是:由于國內(nèi)用戶的水平、國內(nèi)軟件應(yīng)用的領(lǐng)域,對大多數(shù)Fox Fans 無法感受Visual FoxPro日新月異的變化——對他們來說,Visual FoxPro確實“沒有改變”!
Visual FoxPro只能局限于桌面應(yīng)用程序的開發(fā)嗎?
技術(shù)在進步,軟件技術(shù)的應(yīng)用不斷在拓寬,Internet 已經(jīng)是眾多開發(fā)工具競相支持的應(yīng)用領(lǐng)域。Visual FoxPro 從版本 5 開始不斷擴充對Internet的支持,到最新的Visual FoxPro 7 更是增加了對Web Service的支持。我們可以把Visual FoxPro 對Internet的支持分為三大部分:
第一,簡單的HTML的轉(zhuǎn)換。Visual FoxPro 自帶的“Web 發(fā)布”就是這類型的工具,利用HTML和DHTML的模版,支持Visual FoxPro數(shù)據(jù)的Web化,這是一種全靜態(tài)的 Web 支持。
第二,適合于企業(yè)內(nèi)部使用的 Active Document 技術(shù)。是不是希望快速、簡單的把Visual FoxPro應(yīng)用程序轉(zhuǎn)變?yōu)閃eb 應(yīng)用程序,這個Active Document 技術(shù)就是最佳的選擇。它支持 App 程序運行在IE中,它的缺點是:在客戶端必須安裝Visual FoxPro的運行庫、客戶端與數(shù)據(jù)庫間依然是緊密的有狀態(tài)的關(guān)系,屬于F/S構(gòu)架——只是界面能夠運行在IE之中了。它的開發(fā)快速以及它依然基于傳統(tǒng)構(gòu)架,決定了這個技術(shù)只能運行在企業(yè)內(nèi)部,一般不能在廣域網(wǎng)絡(luò)中發(fā)布。
這技術(shù)是Visual FoxPro 6提出的,當時在 Tool 菜單里還有一個專門的菜單項。到了而今的Visual FoxPro 7,這個菜單項已經(jīng)取消了,但并不是說Visual FoxPro 7 不支持Active Document,只是這種并不出色的技術(shù)沒有必要再放在醒目的位置了。
第三,基于COM 的 Web 應(yīng)用。
Visual FoxPro 真正能被用于Web 開發(fā),就是通過 COM 支持的。
這里您要有個認識,作為數(shù)據(jù)庫開發(fā)工具,Visual FoxPro 不是FronPage這樣的用于開發(fā)Web 界面的工具(也許未來的 Visual FoxPro 會支持 Web 界面的開發(fā))。Visual FoxPro 完全是作為 Server 運行在網(wǎng)站的后臺,為各種應(yīng)用提供服務(wù)。使用 Visual FoxPro 編寫的 COM 組件能夠被IIS支持,壓在后臺進行各種運作——這就是真正意義上的Visual FoxPro 的Web應(yīng)用,也是典型的多層構(gòu)架的中間層!
這個階段,Visual FoxPro 對 Web的支持有可以劃分為三個層次:
FoxISAPI。
這是最先登場的技術(shù),當年 ASP 技術(shù)還沒有出現(xiàn)的時候,我們在 IIS 里就可以通過 ISAPI 技術(shù)實現(xiàn)動態(tài)網(wǎng)頁開發(fā)。
Web Server
ASP 技術(shù)出現(xiàn)了,我們知道 ASP 技術(shù)的一大特色就是支持服務(wù)器端的組件的應(yīng)用。用 Visual FoxPro 的編寫的 COM 組件就能運行在 IIS 里,供 ASP 調(diào)用。
Web Service
這是 Visual FoxPro 7 的新特性,也是當前最熱門的技術(shù)。它與Web Service的最大不同就是:Web Server 組件只能通過 ASP 程序調(diào)用,而Web Service可以供任何系統(tǒng)在全球范圍調(diào)用,無論客戶端的硬件平臺、軟件平臺,只要它支持SOAP、支持XML就可以了。
更夸張一點說:只要能上網(wǎng),就可以享用 Web Service 提供的服務(wù)!
有人也許會問:我可以用VB、VC++建立對象組件時,為何我要用Visual FoxPro 來建立相同的組件? 微軟對這一問題有專門的評論,大意為:快、重復(fù)使用性、跨語言重復(fù)使用性?!翱臁笔侵赣肰isual FoxPro開發(fā)的組件擷取、處理資料都極為迅速,并且Visual FoxPro能夠非常迅速的建立字符串。到底有多快,我想數(shù)據(jù)處理、存取的速度大家平時都領(lǐng)教過了,字符串生成速度我這里有個數(shù)據(jù)不妨一看,這是臺灣的一位高手做的試驗——將1M的數(shù)據(jù)寫入文本中,結(jié)果VC++ 6.0程序用了3.5秒、VB 6.0程序用了11秒、Java 1.1.5用了24秒、Visual FoxPro 6.0用了7秒;“重復(fù)使用性”是指Visual FoxPro具備OOP的功能;“跨語言重復(fù)使用性”是指Visual FoxPro編寫的對象編譯以后成為COM、COM+對象組件,這樣就可以在其他語言中使用它了。
不要以為Visual FoxPro是“低端產(chǎn)品",無論從數(shù)據(jù)庫(DBF Base)品質(zhì)還是開發(fā)環(huán)境評價Visual FoxPro,它都是一個“高端工具”。
許多人認為Visual FoxPro只能用來開發(fā)單用戶系統(tǒng)或是文件服務(wù)器構(gòu)架的小型網(wǎng)絡(luò)系統(tǒng)——這是謬誤——這種無知的言論在許多講C/S、三層構(gòu)架的書中都有(特別是一些VB、PB、Delphi的數(shù)據(jù)庫編程書)。我可以很負責任的告訴大家完全可以用Visual FoxPro開發(fā)C/S結(jié)構(gòu)的系統(tǒng)。這里說的C/S構(gòu)架絕對是正宗的,不是用什么F/S構(gòu)架在糊弄大家。在C/S構(gòu)架中我們常常選擇Visual FoxPro作為客戶端開發(fā)工具,以O(shè)racle、SQL Server等網(wǎng)絡(luò)數(shù)據(jù)庫壓在后臺,使用Visual FoxPro內(nèi)置的Remote View和SPT技術(shù),這樣就可以完美地解決問題。這里不能詳細展開,只特別介紹Visual FoxPro的本地引擎在開發(fā)中的作用。Visual FoxPro的本地引擎特別強大(上文我們說過處理百萬條記錄不費吹灰之力),我們在設(shè)計系統(tǒng)時可以十分簡單的將遠程數(shù)據(jù)與本地數(shù)據(jù)結(jié)合,很簡單、很有效地控制網(wǎng)絡(luò)數(shù)據(jù)流量、提高系統(tǒng)工作效率(我看過不少VB、Delphi、PB的書,他們很少在怎樣控制網(wǎng)絡(luò)數(shù)據(jù)流量、提高系統(tǒng)工作效率論述,不知是不屑一顧,還是其他什么原因)。
我認為Visual FoxPro的本地引擎在C/S構(gòu)架下起碼有三項偉大的用途。其一:非經(jīng)常變動數(shù)據(jù)的本地存儲。我國的郵政編碼與地區(qū)的關(guān)系是相對穩(wěn)定的數(shù)據(jù),而且數(shù)據(jù)量也不是太小,我想總有上千個記錄(我沒仔細考察過具體情況),我們把這些信息存儲在客戶端的計算機中,就可以在使用郵政編碼及其相關(guān)信息時從本地得到數(shù)據(jù),這樣能使高系統(tǒng)效率同時節(jié)省網(wǎng)絡(luò)資源(這是C/S開發(fā)的重要原則),只在郵政編碼發(fā)生變化時在服務(wù)器上統(tǒng)一更新,下載更新客戶機上的數(shù)據(jù)。如果用別的軟件實現(xiàn)同樣的功能,絕對比Visual FoxPro麻煩而且效果絕對不及Visual FoxPro,這因為Visual FoxPro的數(shù)據(jù)引擎直接支持遠程數(shù)據(jù)讀取,能很好的融合本地數(shù)據(jù)與遠程數(shù)據(jù);其二:離線數(shù)據(jù)包。單位里總有人出差,在千萬里路之外能不能拿著筆記本為客戶發(fā)訂單、與客戶簽合同,就像在自己的辦公室一樣?當他回到公司時只要把筆記本連到服務(wù)器中,發(fā)送更新就行了。Visual FoxPro的離線視圖是經(jīng)濟且高效安全的方案(當然您可以使用遠程撥入或建一個Web網(wǎng)站,這些Visual FoxPro可能干)。其實離線數(shù)據(jù)包還有一個重要的功能:當下載的數(shù)據(jù)是大量的(除非萬不得已請不要這樣設(shè)計系統(tǒng)),這種情況下使用離線視圖可以數(shù)據(jù)集自動轉(zhuǎn)化為物理表,充分利用Visual FoxPro的高速與靈活,完成后連線更新后端數(shù)據(jù)源——一切都很簡單。我認為:離線視圖絕對是Visual FoxPro在C/S系統(tǒng)中的一個賣點,雖然ADO也支持類似的東西,但肯定不及Visual FoxPro有效率;其三:數(shù)據(jù)驅(qū)動。您是否知道,Visual FoxPro中絕大多數(shù)文件格式實際上都是DBF文件,如DBC、SCX、FRX等,他們都可以由Visual FoxPro的本地引擎驅(qū)動完成復(fù)雜的任務(wù)。在設(shè)計C/S結(jié)構(gòu)時如果要存儲用戶設(shè)置、自定義文件格式,用Visual FoxPro的本地引擎幫忙絕對比其他軟件簡單,因為你用的是換湯不換藥的方法,但它簡單、有效率。
Visual FoxPro 開發(fā)C/S系統(tǒng)時,最與眾不同的特色就是對遠程數(shù)據(jù)的操控是通過本地數(shù)據(jù)庫來實現(xiàn)的,Remote View、Connection都作為本地數(shù)據(jù)庫的對象被管理起來,完美的銜接本地數(shù)據(jù)與遠程數(shù)據(jù)。這種在客戶端建立遠程數(shù)據(jù)邏輯的做法,與最新的ADO.NET有相似之處!
在三層構(gòu)架中,Visual FoxPro可以充當任意一層的任務(wù),但本人以為大中型系統(tǒng)的數(shù)據(jù)庫部分應(yīng)以網(wǎng)絡(luò)數(shù)據(jù)庫為主??蛻舳私缑嬗肰isual FoxPro也是可以的,但一般限于企業(yè)內(nèi)部,在Internet上我們通常使用IE作為客戶界面。在三層構(gòu)架中Visual FoxPro最勝任中間層的開發(fā),它簡單(開發(fā)難度與普通的Visual FoxPro項目相差不大)、快速的字符串生成、支持COM技術(shù)、它支持(MTS)COM+技術(shù)、它支持XML(Visual FoxPro 7.0提供3個與XML有關(guān)的函數(shù))、它具有強大本地數(shù)據(jù)引擎、靈活的數(shù)據(jù)處理方式、它支持多線程的服務(wù)組件的開發(fā)。
可能有人要問:用ASP+腳本語言一樣可以開發(fā)Web系統(tǒng),何必加個中間層。的確,目前在市面上與多討論Web的書都直接使用腳本語言來開發(fā)整個系統(tǒng),這是十分不正確的做法,甚至有寫書還說硬件越來越快,因此使用腳本語言來開發(fā)整個系統(tǒng)并沒有什么關(guān)系。會說出這樣話的作者通常都是沒有實際開發(fā)Web應(yīng)用經(jīng)驗的人。腳本語言,如VBScript是一種解釋性語言,運行效率很低,他們只合適作為膠水程序。開發(fā)Web系統(tǒng)正統(tǒng)的做法是:把應(yīng)用邏輯編寫成COM、DCOM對象,然后用少量的腳本語言來驅(qū)動/使用這些對象。這樣系統(tǒng)開發(fā)時工作量會大一些,但它符合開發(fā)任何數(shù)據(jù)庫應(yīng)用程序的最基本的原則:分離應(yīng)用邏輯與用戶界面。這樣系統(tǒng)就會變的容易維護了——你可以經(jīng)常變換那些膠水程序來改變Web頁面,應(yīng)用邏輯變換時你又可以改變某一個邏輯對象,而不用為雜亂且關(guān)系復(fù)雜的代碼發(fā)愁。再者,由于Visual FoxPro是高效、靈活的數(shù)據(jù)處理語言,任何商業(yè)邏輯都可以用它來代碼化,并且您可以獲得幾十倍甚至上百倍于ASP+腳本語言的運行效率,以及更為強健的執(zhí)行效果。
Visual FoxPro的語言看上去蠻難的。
人們在贊揚 Visual FoxPro 始終是褒揚他的易學(xué)易用,我不同意這種觀點(我不知道他們站在什么立場上說話)。我看問題的角度是“成為一名還過得去的 Visual FoxPro 程序員”,我的結(jié)論是Visual FoxPro 作為一個開發(fā)工具并不是好學(xué)的。這不是說Visual FoxPro的語法、概念像C那么繁復(fù),而是指:即使是簡單的應(yīng)用,也要掌握很多Visual FoxPro的概念、語法、函數(shù),可能還要較深入了解OOP——往往讓人摸不到深淺。比如,拿數(shù)據(jù)庫系統(tǒng)最重要的功能——查詢來講,Visual FoxPro就“花樣繁多”。我曾統(tǒng)計過,不算“List、Browse"等交互式命令,Visual FoxPro起碼支持4條命令(Find,Seek,Locate,Select-SQL)、3個函數(shù)(Lookup(),Seek(),Indexseek()),(當然其中有的已經(jīng)淘汰)這些命令的關(guān)鍵字、函數(shù)的參數(shù)眾多,有的要求索引, 有的可以用索引但要求優(yōu)化索引……而這在VB、Delphi中絕對就只是兩三個方法的事情。從上面的例子中如果您只看到了Visual FoxPro的繁雜,那么您就完全錯了:在VB、Delphi實現(xiàn)查詢功能的原理與Visual FoxPro應(yīng)是一樣的,但他們封裝了許多環(huán)節(jié),而Visual FoxPro就把許多東西更低階(當然不如VC++那么低層次,但是已經(jīng)比使用對象的語言難多了)的展示給我們,所以Visual FoxPro的開發(fā)者往往比使用其他的開發(fā)工具開發(fā)者更會思考、更懂得的數(shù)據(jù)庫開發(fā)的真諦,因為工具逼迫他們朝這個方向努力……
用Visual FoxPro有助于提高程序員對數(shù)據(jù)庫概念的理解。許多在Visual FoxPro程序員中不是問題的問題往往成為那些使用對象處理數(shù)據(jù)的程序員的噩夢。比如在Visual FoxPro中數(shù)據(jù)緩沖、事務(wù)處理都是重要的概念(事實上要干活就必須了解這些東西),在其他開發(fā)環(huán)境中一味強調(diào)方便快速往往忽視程序員的基本概念培養(yǎng),編出的東西要么效率不高、要么老出問題。讀書人都懂得:基本概念、基本理論是命根子,這就是Visual FoxPro帶給我們的好處。
有趣的是Visual FoxPro繁、難也就到這個程度了 ,他的學(xué)習難度曲線是所有語言中最平穩(wěn)的——不像在有些語言中,基礎(chǔ)開發(fā)十分容易,一旦深入?yún)s難度很高。在Visual FoxPro中初級應(yīng)用、中級應(yīng)用、高級應(yīng)用的難度差異很小——就是那些似曾相識的語句、易于理解的函數(shù)。Visual FoxPro的這種高級應(yīng)用不太難,初級應(yīng)用不十分容易的特性,對初入門者來講是無法體會其中的妙處的,這就造成了Visual FoxPro的不太友好形象;
同時,Visual FoxPro的難度卻帶來了很多的好處(前文我已談了很多),Visual FoxPro比其他語言在數(shù)據(jù)處理上更快速、更靈活,數(shù)據(jù)處理方式更多、更完備。設(shè)想一下用Visual FoxPro開發(fā)數(shù)據(jù)對象時,我們可以使用豐富多彩的語句、函數(shù),實現(xiàn)十分復(fù)雜、變化多端的功能,用其他語言開發(fā)數(shù)據(jù)對象,它們的功能只能是建立在已有的數(shù)據(jù)對象的功能之上(這叫繼承),變化就少了,功能就弱了,如果要實現(xiàn)Visual FoxPro的Xbase+SQL 那樣靈活、強大的功能恐怕要使用底層的API了——這太可怕了!
OOP不僅是指“面向?qū)ο蟆钡拈_發(fā)環(huán)境,更是一種開發(fā)思想、開發(fā)技術(shù),Visual FoxPro在后者上做得更好。
我們講過Visual FoxPro完全支持OOP的開發(fā),但有趣的是在數(shù)據(jù)處理方面,微軟實際上沒有提供什么現(xiàn)成的對象(FFC是Visual FoxPro 6.0才有的,且封裝性、適應(yīng)性都不盡如人意),這一點我不知是Visual FoxPro的福氣還是禍害。說“福氣”這將逼迫程序員掌握這門并不太簡單的技術(shù)(可能用“思想方法”更恰當),而不是簡單地使用對象。OOP對于中間層的開發(fā)來講是很重要的,因為COM組件必須是建立在OOP思想上的,要開發(fā)這種組件就必須掌握OOP技術(shù);講“禍害”這使Visual FoxPro變得不易于學(xué)習和使用了(就我個人而言,真正體會到“用Visual FoxPro應(yīng)會編制數(shù)據(jù)處理對象”這一問題也是在使用了Visual FoxPro好長時間之后的事情了)。事實上現(xiàn)在很多誹謗攻擊Visual FoxPro的人都沒有深刻的認識這一問題——他們只感到Visual FoxPro用起來不及Delphi、PB、VB容易,但他們從不想該怎樣開發(fā)數(shù)據(jù)處理對象,到編寫COM組件時就要他們的命了。那些“精英們”大多不懂OOP,他們只懂“點”操作符號——仿佛對象的使用就是OOP,他們有什么資格來批評我們呢?
Visual FoxPro的界面能力真的很差嗎?
我認為作為數(shù)據(jù)庫系統(tǒng)的開發(fā)工具微軟為我們提供的那些內(nèi)置控件加上十幾個附送的ActiveX控件已經(jīng)夠用了。
我們討論Visual FoxPro控件應(yīng)從兩方面入手,第一就是界面美觀問題,再就是數(shù)據(jù)處理、分析是否方便。很多人很在意的前一個問題,我倒是不以為然——控件不多特別是美化界面的控件不多并不代表Visual FoxPro就開發(fā)不出賞心悅目的軟件,我的感受是軟件界面的專業(yè)化程度、高級別的審美、整體的效果要比個別的界面特效重要千萬倍,實際效果可要好上千萬倍??纯磭庥肰isual FoxPro編制的程序您就會明白這個道理了;我對Visual FoxPro的不滿在于數(shù)據(jù)處理、分析控件不全,特別是缺少了一批數(shù)據(jù)分析控件。比如沒有可以與數(shù)據(jù)捆綁的圖表控件、沒有可以列示捆綁交叉表的表格控件、沒有可以捆綁數(shù)據(jù)的數(shù)據(jù)透視表格控件……在這個問題上Visual FoxPro確實應(yīng)該向Delphi、PB等軟件學(xué)習,這是我們對未來的Visual FoxPro的期望!
Visual FoxPro與OLE DB、ADO
ADO是Windows環(huán)境下主流的數(shù)據(jù)存取的解決方案,那些以對象操作數(shù)據(jù)的語言基本上都使用ADO實現(xiàn)數(shù)據(jù)存取,如:VC++、VB、Delphi。在Visual FoxPro的開發(fā)環(huán)境中好像看不到ADO的影子,是不是Visual FoxPro不支持ADO呢?ADO其實是一組COM對象,Visual FoxPro支持COM,當然支持ADO。
我認為:Visual FoxPro對ADO的支持只是停留在較低的水平。這并不是說Visual FoxPro限制了什么ADO的功能(所有功能都能用),而是指:用起來不方便,不像在VB、Delphi中方便。這種不方便主要體現(xiàn)在ADO的Recordset無法與Visual FoxPro的內(nèi)置控件捆綁。其原因是:Visual FoxPro 不認識ADO的Recordset,只能將記錄逐條讀取,而不是一下子認得整個Recordset。這樣數(shù)據(jù)就不能被捆綁了,同時也不能對ADO直接使用Visual FoxPro強大的數(shù)據(jù)處理功能(ADO是用來存取數(shù)據(jù)而處理數(shù)據(jù)還要靠客戶軟件)。
就象Visual FoxPro使用ODBC連接遠程數(shù)據(jù)源那樣,ADO通過OLE-DB與數(shù)據(jù)提供者對話。 (By the way: Visual FoxPro 7是OLE-DB提供者,這樣就可以 通過正宗的OLE-DB驅(qū)動程序在其他開發(fā)工具中使用ADO存取Visual FoxPro數(shù)據(jù)了 。)
ADO能為Visual FoxPro帶來什么?首先要注意的是:ADO與Visual FoxPro的數(shù)據(jù)引擎是毫無關(guān)系的系統(tǒng),從某種程度上講ADO的出現(xiàn)為Visual FoxPro提供了一種全新的遠程數(shù)據(jù)處理方式。
ADO是多層應(yīng)用程序中數(shù)據(jù)集合傳遞的最好解決方案。如果我們用Visual FoxPro開發(fā)了一個中間層系統(tǒng),用VB開發(fā)了用戶界面,當中間層要傳遞一個cursor到VB的客戶端就不可以使用Visual FoxPro的cursor或DBF,因為VB不認得他們。使用ADO的Recordset就可以解決問題,因為大家都認得他;Visual FoxPro 只能通過Visual FoxPro 7支持XML后才能彌補Visual FoxPro本地引擎在應(yīng)用程序傳遞數(shù)據(jù)集的不足。
ADO可以存取非關(guān)系型數(shù)據(jù)庫。ADO是微軟的Universal Data Access構(gòu)架的主將,它可以存取Excel等非關(guān)系型數(shù)據(jù)數(shù)據(jù)庫的數(shù)據(jù)。通過ODBC存取遠程數(shù)據(jù)的Visual FoxPro就無此能力了。但是我使用了ADO存取Excel后很失望,因為連接必須是獨占的,所以這種功能帶給我們的幫助只是有限的!
ADO可以彌補Visual FoxPro在遠程數(shù)據(jù)存取時的不足之處。譬如Visual FoxPro不認得SQL Server中nText、nVarchar、nChar等數(shù)據(jù)類型,但ADO可以。
在Visual FoxPro使用ADO存在如下缺點:
Visual FoxPro只能通過COM的方式識別ADO的Recordset,不能像表格那樣讀寫它,這樣就出現(xiàn)了兩個問題:Recordset無法與Visual FoxPro的內(nèi)置控件捆綁;無法直接使用Visual FoxPro強大的數(shù)據(jù)處理功能(ADO是用來存取數(shù)據(jù)而處理數(shù)據(jù)還要靠客戶軟件)。
Visual FoxPro中使用代碼實現(xiàn)ADO的全部功能,但代碼量大、書寫麻煩。
對待以上不足Visual FoxPro開發(fā)小組在Visual FoxPro 6推出不久后就發(fā)布了一個叫VFPCOM.DLL的組件,可以用它部分解決ADO的Recordset與Visual FoxPro的cursor的轉(zhuǎn)換和ADO事件的綁定 ,Visual FoxPro 更是內(nèi)置支持 COM 事件綁定。在本文的第一版中,筆者曾有這樣的希望:“Visual FoxPro 更具效率的支持ADO”。現(xiàn)在我的看法有了一些改變,我認為在 Visual FoxPro 處理數(shù)據(jù),無論是本地、還是遠程數(shù)據(jù),無論是什么構(gòu)架的系統(tǒng),最佳的解決方案認識內(nèi)置的數(shù)據(jù)引擎,而不是現(xiàn)在流行的ADO,現(xiàn)在 Visual FoxPro對ADO的支持程度已經(jīng)足夠了!
Visual FoxPro的數(shù)據(jù)引擎與ADO相比有什么優(yōu)勢呢?
Visual FoxPro數(shù)據(jù)引擎系統(tǒng)資源耗用小,ADO畢竟是COM組件要花用更多的資源。
作為系統(tǒng)共用組件,使用ADO可能會在不同應(yīng)用系統(tǒng)中產(chǎn)生ADO的版本問題,這就像我們常遇見的ActiveX的控件版本問題。
ADO只是數(shù)據(jù)存取組件,它沒有數(shù)據(jù)處理功能,要處理數(shù)據(jù)必須使用客戶應(yīng)用程序,如VB、Delphi。Visual FoxPro數(shù)據(jù)引擎同時支持數(shù)據(jù)存取、數(shù)據(jù)處理,我已多次強調(diào)Visual FoxPro在這兩方面的偉大功能;
ADO沒有本地數(shù)據(jù)庫作為強大的支持,有需要將遠端數(shù)據(jù)暫時存放在物理文件中ADO絕對不及Visual FoxPro。Visual FoxPro的數(shù)據(jù)庫是桌面數(shù)據(jù)庫中最好的,遠端數(shù)據(jù)暫存其中不僅方便,而且伸縮性強。
使用ADO從數(shù)據(jù)源獲得數(shù)據(jù)以后,再要對數(shù)據(jù)集合進行分組、查詢、匯總是非常麻煩的事情,但是Visual FoxPro支持對Cursor的數(shù)據(jù)處理,我們可以使用絕大多數(shù)XBase語言(除了ZAP和Pack之類的表維護語言之外),還可以對Cursor執(zhí)行SQL語句——這種強大的威力,絕非ADO所能比擬。
開發(fā)單機程序時,絕對不要使用ADO,這樣做既沒開發(fā)效率也沒運行效率;開發(fā)C/S系統(tǒng)時我們應(yīng)選用Visual FoxPro的SPT和Remote View,它們完全可以很完美的解決問題(已經(jīng)有很多很多成功經(jīng)驗),不需要舍近求遠地使用ADO;在中間層開發(fā)時,可以考慮使用ADO,我們?yōu)樵诖朔N情況下使用ADO的開發(fā)效率是蠻高的,因為這時所有的代碼都要我們用一句、一句的寫出來(在其他開發(fā)環(huán)境也一樣),Visual FoxPro的語法簡單再加上Visual FoxPro 7的極為強大Intellisense功能(真的很快并且可以由用戶自定義),也許我們還會占些便宜的。
雖然ADO與Visual FoxPro是完全無關(guān)的系統(tǒng),但他們卻有共同的母親——FoxPro 開發(fā)小組,原來ADO的光標集(Cursor Engine)是他們開發(fā)的。如果你同時了解ADO與Visual FoxPro,你會發(fā)現(xiàn)ADO的很多思路與Visual FoxPro一模一樣……我總是拿這個典故說服那些不相信Visual FoxPro的人:最流行的ADO的光標集是FoxPro 開發(fā)小組寫的,有什么理由懷疑Visual FoxPro的數(shù)據(jù)引擎——它是世界上最棒的!
Visual FoxPro是一種歷史悠久的產(chǎn)品,很多用戶是從FoxBASE到FoxPro到Visual FoxPro,這樣一步一步過來的。歷史的積淀多了,歷史的包袱也重了——許多程序員往往抓住老產(chǎn)品而忘了深入鉆研新產(chǎn)品的新特性,這是一種悲哀。
我遇到許多所謂會使用Visual FoxPro的人,還口口聲聲叫“Query Design”為“RQBE”,朋友那可是DOS時代的概念了。
很多人不仔細鉆研Visual FoxPro,只是從其他工具中看到某項功能,憑空想象就說:Visual FoxPro不支持的。Delphi中特別指出它有異構(gòu)數(shù)據(jù)關(guān)聯(lián)能力,比如:父表是SQL Server數(shù)據(jù),子表是Access數(shù)據(jù),要求建立關(guān)聯(lián),實現(xiàn)“一多關(guān)系”。在Delphi要求使用特別的SQL語法來實現(xiàn)該功能。Visual FoxPro的文檔里好像沒特別說明這項功能,是不是沒有呢?如果你深刻理解Visual FoxPro的遠程視圖及Cursor的用法,答案很容易得到。事實上,用Visual FoxPro能更直接、簡單實現(xiàn)的實現(xiàn):建兩條“連接”、兩個“遠程視圖”,對子表加索引,Set relation to,set skip to……
反過來Visual FoxPro能實現(xiàn)的功能,Delphi的BDE(Delphi的本地引擎)卻不能:Visual FoxPro的遠程視圖能夠?qū)⒍鄠€表關(guān)聯(lián)后的結(jié)果集設(shè)定為“可更新”,并在數(shù)據(jù)變動后自動產(chǎn)生Update子句分別更新后臺數(shù)據(jù)。例如:對SQL Server中Pubs數(shù)據(jù)庫建立連接,新建遠程視圖為:
CREATE SQL VIEW TEST VIEW REMOTE CONNECTION CONNECTION1 AS SELECT Publishers.pub_id, Publishers.pub_name, Titles.title_id, Titles.title, Titles.price, Authors.au_id, Authors.au_lname, Authors.au_fname, Authors.phone, Authors.address FROM dbo.publishers Publishers, dbo.titles Titles, dbo.titleauthor Titleauthor, dbo.authors Authors WHERE Titles.pub_id = Publishers.pub_id AND Titleauthor.title_id = Titles.title_id AND Authors.au_id = Titleauthor.au_id ORDER BY Publishers.pub_id
這是四個表間的關(guān)系,算是比較復(fù)雜的SQL語句。別擔心,這一切在Visual FoxPro只不過是用鼠標在“視圖設(shè)計器”點擊幾次就行了。在您對視圖進行“添加、刪除、修改”并發(fā)送更新時, Visual FoxPro會進行分析地智能,產(chǎn)生Update字句分別將變化更新到后端若干個表中。而Delphi的BDE只能對Xbase數(shù)據(jù)源有此的作用,對其他的數(shù)據(jù)源都無此功能。Visual FoxPro可以支持所有的ODBC數(shù)據(jù)源(只要數(shù)據(jù)源本身支持),如:Oracle、SQL Server,Access……當然在Delphi 5.X中可以通過ADO彌補此缺陷,但Visual FoxPro同樣支持ADO。Visual FoxPro的程序員要有這樣的信心:Visual FoxPro為我們提供了最好的本地引擎!
古人云:欲善其事、必先利其器。所以我們不要指責工具怎么、怎么,多看看自己用好了沒有!
Visual FoxPro與其他開發(fā)工具的比較
這其實是一個很傻的話題,選擇何種開發(fā)工具完全是由于程序員的面臨的任務(wù)以及個人的喜好決定的。只要您選用的工具能夠勝任您從事的項目,只要您對開發(fā)工具有足夠的造詣以應(yīng)付多變、復(fù)雜的工作,只要這個工具還在繼續(xù)升級,您就沒有理由更換工具,更沒有必要摻和到這種無聊的討論中去。
任何工具都有其優(yōu)勢與弱勢,產(chǎn)品定位更是各自不同,每個程序員都覺得自己的選擇是最好的,別人都是愚蠢的。以下的討論只是無聊的筆者發(fā)出的無聊的言論,您大可掠過不看。
談?wù)揤isual FoxPro,我們必須注意這樣一個問題:Visual FoxPro 是干什么用的。毋庸置疑,它是一種數(shù)據(jù)庫系統(tǒng)的開發(fā)工具。我個人認為,到目前為止在Microsoft公司的所有開發(fā)工具中,Visual FoxPro是開發(fā)數(shù)據(jù)庫應(yīng)用程序的最佳產(chǎn)品。我們必須承認這樣的事實:從一開始,Visual FoxPro 就是為處理數(shù)據(jù)而設(shè)計的,它運行速度快、功能強大、而且非常靈活。
有很多人老喜歡拿Access與Visual FoxPro 比較,對此我總不屑一顧,且讓我們看看微軟的評論吧!微軟原話如下:
“Microsoft Access 是 Office 中的數(shù)據(jù)庫,也是微軟所銷售的軟件中,使用最廣且最容易學(xué)習的數(shù)據(jù)庫工具。如果你是數(shù)據(jù)庫的新手,如果你要使用Microsoft Office 來建立應(yīng)用程序,或者你想要一個相當便利的交互式產(chǎn)品,那么就選擇Access。Visual FoxPro 是用來建立關(guān)系型數(shù)據(jù)庫應(yīng)用程序的一種功能強大的RAD工具。如果你是一位以建立關(guān)系型數(shù)據(jù)庫應(yīng)用程序維生的數(shù)據(jù)庫開發(fā)人員,而且你希望速度與功能都達到極限,那么請選擇Visual FoxPro。”
(這段話在今年Visual FoxPro 退出Visual Studio后,微軟又重復(fù)了一次,強調(diào)Visual FoxPro是專業(yè)開發(fā)人員的開發(fā)工具,而不是Access 那樣的普通用戶的辦公平臺。)
根據(jù)我的經(jīng)驗,Access的MDB數(shù)據(jù)庫適用于20萬條/表的數(shù)據(jù)量的應(yīng)用(它比Visual FoxPro數(shù)據(jù)庫的唯一長處是:所有的數(shù)據(jù)庫組件都在同一個MDB文件里,而Fox的數(shù)據(jù)庫可能有多個文件組成,顯得凌亂。),數(shù)據(jù)量再增加的話,不是說Access不能處理了,而是效率不行了——查詢、索引都很慢。Visual FoxPro能處理百萬計甚至上千萬計的數(shù)據(jù)量,這都是有實踐根據(jù),在過去的20多年里,特別是大型網(wǎng)絡(luò)數(shù)據(jù)庫沒有平民化的年代里,業(yè)界就是依靠DBF數(shù)據(jù)表來管理數(shù)據(jù)的,毫不夸張Visual FoxPro是能夠安全、高效處理大數(shù)據(jù)量的專業(yè)工具。
有多人拿Visual FoxPro與VB、Delphi甚至是VC++做比較,這是很幼稚的,后面三者是編程語言,而Visual FoxPro是數(shù)據(jù)庫 系統(tǒng)的開發(fā)工具,天生分工就不同。
我聽說過這樣的典故:Foxmail最初是用Visual FoxPro編寫的(所以叫做FoxMail),后來改用Delphi編寫。如果這是事實就很能說明問題,Visual FoxPro是數(shù)據(jù)庫開發(fā)工具以它編寫郵件客戶軟件有點勉為其難,即使成功了效率也不會很高,但如果是一個用Visual FoxPro寫的管理系統(tǒng)中要求有郵件功能,Visual FoxPro則完全可以做得很好。
Visual FoxPro作為數(shù)據(jù)庫開發(fā)工具,它為我們提供了十分強健、高效的數(shù)據(jù)引擎,它容量大、速度快、靈活、健壯,所以用Visual FoxPro開發(fā)單用戶數(shù)據(jù)庫絕對比其他所有軟件來的高效——曾經(jīng)有人嘲笑VB處理5、6萬條記錄就趴下,但我們的Visual FoxPro處理百萬條記錄也不覺吃力,所以Visual FoxPro的開發(fā)人員無論在什么時候都要注意發(fā)揮Visual FoxPro的數(shù)據(jù)引擎的威力,這樣才能立于不敗之地。VC++很厲害,但真正地用好它不容易, 開發(fā)效率也不高。如果使用VC++開發(fā)應(yīng)用程序還象VB那樣只會使用控件,那么還是別使用VC++了(這叫掛羊頭賣狗肉),再者Visual FoxPro本身是VC++編寫的,是歷代最優(yōu)秀的程序員智慧的結(jié)晶,為什么有了VC++還要花精力編寫Visual FoxPro,這本身就很說明問題。
又有人把Power Builder請出來與Visual FoxPro作比較,大家都是數(shù)據(jù)庫應(yīng)用程序開發(fā)環(huán)境,好像PB比Visual FoxPro厲害。 就數(shù)據(jù)庫系統(tǒng)的開發(fā)而言,Visial FoxPro 可以開發(fā)單用戶系統(tǒng)、網(wǎng)絡(luò)環(huán)境下的文件服務(wù)器系統(tǒng)、客戶機\服務(wù)器系統(tǒng)、Web Server、數(shù)據(jù)處理的COM組件、Web Service,可以說除了Web界面無法開發(fā)之外,凡是與數(shù)據(jù)庫系統(tǒng)有關(guān)的開發(fā)領(lǐng)域Visual FoxPro都很好的支持。PB的起點在客戶機\服務(wù)器系統(tǒng),也能很漂亮的完成工作,此中取舍全憑個人喜好;另外,PB的成本很高。據(jù)我所知它的價格十分昂貴(有人戲稱說PB是世界五百強才用的起的產(chǎn)品),而Visual FoxPro才賣幾千人民幣。當然,這個觀點您可以不接受——在中國軟件是沒有價值的,每張只賣5元人民幣;還有PB的開發(fā)方式與眾不同,用了他以后再改學(xué)別的會比較困難;最后退一萬步講,您要變換編程工具,我也不贊成改用PB,因為PB再好也是一個數(shù)據(jù)庫開發(fā)工具,從這上面講與Visual FoxPro是一個級別的東西,您想變換工具一定有更多的需求,我看用C#或Delphi會是更佳的選擇。
所有這些語言與Visual FoxPro相比,最大的區(qū)別就是:Visual FoxPro是程序設(shè)計語言與DBMS的完美結(jié)合,而Vc++、Delphi、Vb、PB都只是編程工具,而不是DBMS。Visual FoxPro的這一特性,決定了它更合適與任何類型的企事業(yè)單位,我無法想象——為了簡單的查詢還要用Vc++、Delphi、Vb、PB編寫一個Exe文件,使用Command窗口多好!
又有人把網(wǎng)絡(luò)數(shù)據(jù)庫如Oracle、SQL Server與Visual FoxPro相比較,說了Visual FoxPro一大通的壞話,這種人其實很傻,你大可對他嗤之以鼻。大型數(shù)據(jù)庫與桌面數(shù)據(jù)庫在系統(tǒng)開發(fā)中的作用是不一樣,兩者是相輔相成的。我們應(yīng)該把注意力放在“怎樣發(fā)揮兩者數(shù)據(jù)庫引擎最高效能的問題上”,而不是去爭論孰優(yōu)孰劣。這種爭論就好比是評論是男人漂亮、還是女人美麗那樣——毫無意義。
Visual FoxPro從Visual Studio中分離出來了
2001年2月26日,微軟宣布將Visual FoxPro 7從Visual Studio 中分離出來,這是一個好消息還是壞消息呢?我們來分析一下:
我們失去了什么
我們先來觀察,Visual FoxPro不成為.Net語言,在技術(shù)上損失的是:不能開發(fā)基于.Net的Web應(yīng)用程序。
Visual Studio.Net 是一種擅長于開發(fā)Web應(yīng)用程序的工具,過去與現(xiàn)在微軟霸占著"桌面應(yīng)用程序"應(yīng)用市場,現(xiàn)在微軟要吞噬現(xiàn)在由其他公司控制的大型網(wǎng)絡(luò)應(yīng)用市場,于是推出了.Net構(gòu)架,Visual Studio.Net就是開發(fā)基于.Net的應(yīng)用程序的RAD(快速開發(fā)環(huán)境)。
筆者認為:起碼在可知的一兩年內(nèi),我們這些用Visual FoxPro寫程序的人不會有用Visual FoxPro開發(fā)大型Web應(yīng)用需求,客觀上絕大多數(shù)企業(yè)也不會有自建一個電子商務(wù)網(wǎng)站的需求,我們并不會因為Visual FoxPro不是.Net語言而失去我們的市場--普通的企業(yè)級(單用戶構(gòu)架、File Server構(gòu)架、(兩層、三層)客戶機\服務(wù)器構(gòu)架)的應(yīng)用。等.Net真正熱起來,那將是幾年后的事情了!
當然作為.Net語言也可以開發(fā)桌面應(yīng)用程序,Visual FoxPro成為.Net語言不是更好嗎?筆者的看法是:不一定。一位網(wǎng)友說:VB.Net的語法像VC++又像JAVA,已經(jīng)完全不像BASIC語法了,等於是要重新學(xué)習另一套語言了,有這種感覺的VB程序員很多,聽說國外有很多VB程序員還"憂心忡忡"的。連微軟也承認:VB 6與VB.Net是差別很大的語言。
假設(shè)VB變化的只是語法特色(這已經(jīng)夠厲害的),那么如果Visual FoxPro現(xiàn)在成為.Net語言,其標志性功能的損失一定比VB更多!我們認為:這其中最不能讓大家容忍的就是:Visual FoxPro的數(shù)據(jù)引擎和數(shù)據(jù)處理手段將損失殆盡,說實話我們中多數(shù)人使用Visual FoxPro就是看中了它在數(shù)據(jù)處理上的無與倫比優(yōu)勢。.Net語言使用公共運行庫(Common Runtime Language),數(shù)據(jù)庫方面的功能是通過外掛ADO等組件完成的。在技術(shù)不成熟的現(xiàn)在,讓Visual FoxPro運行在CLR上,勢必只有三種選擇:取消Visual FoxPro的數(shù)據(jù)處理組件,讓它使用組件處理數(shù)據(jù);把Visual FoxPro的數(shù)據(jù)引擎加入公共運行庫;Visual FoxPro的數(shù)據(jù)引擎做成一個組件??梢娺@三種選擇沒有一種是合理的,即使成了,那么Visual FoxPro也就成為了一個四不像的東西。
Visual FoxPro與.Net
Visual FoxPro 能夠很好的支持XML、Web Service、COM。通過它們,Visual FoxPro就能與.Net整合在一起,并能開發(fā).Net中最最熱門的話題:Web Services。
客觀上,有利于Visual FoxPro的發(fā)展
Visual FoxPro作為Visual Studio的一員并不能很好的發(fā)展"Fox的事業(yè)",這個觀點是各國狐友的普遍共識。作為Visual Studio的一員,Visual FoxPro更多的像其他Visual Studio產(chǎn)品看齊,忽視自身特色的發(fā)展,忽視用戶的需求;產(chǎn)品升級、服務(wù)包的提供周期變長(要等其他產(chǎn)品的完工),如果Visual FoxPro 7不分離出來,發(fā)布期起碼要晚半年。將Visual FoxPro從Visual Studio.Net中分離出來,最起碼以上兩個問題會有很好的改觀,特別是Visual FoxPro會更重視用戶的需求。
獨立面對挑戰(zhàn)
Visual FoxPro從Visual Studio.Net中分離出來最大的壞處是:必須獨自面對市場。說白了就是:能不能賣的好?如果Visual FoxPro 7.0的生意還不錯,那么Visual FoxPro就會發(fā)展的很好--這是很簡單的道理。
在微軟所有的開發(fā)環(huán)境中,Visual FoxPro是唯一內(nèi)嵌數(shù)據(jù)引擎的——VC、VB都必須外掛數(shù)據(jù)處理引擎,如:DAO、ADO等,當然VC可以使用底層API調(diào)用來完成數(shù)據(jù)庫處理方面的任務(wù)——這就是Visual FoxPro的特色--為數(shù)據(jù)處理而生,但是如果現(xiàn)在盲目的把Visual FoxPro并入Visual Studio.Net的話,Visual FoxPro的這一特色必然不能保存,這對微軟、對用戶都是損失。VB、VC則沒有這個問題--反正它們不內(nèi)置數(shù)據(jù)引擎,只要.Net可以調(diào)用數(shù)據(jù)處理組件就可以了!
Visual FoxPro 7 的特性
前面已經(jīng)提到多次,Visual FoxPro 7 已經(jīng)在2001年5月中旬正式發(fā)布的,6月份在美國上市。現(xiàn)在不少網(wǎng)友已經(jīng)得到了Visual FoxPro 7的英語正式版,使用之后,產(chǎn)生了種種評判。在美國人們認為,Visual FoxPro 7是繼 Visual FoxPro 3以后 Fox 發(fā)展史上最具有“革命意義”的版本,評價是很高的;而在國內(nèi),不少嘗鮮者感嘆:這是微軟不好意思說SP的產(chǎn)品,簡直就是Visual FoxPro 6+SP6……兩種評價相差這么大,誰是誰非呢?
筆者在2000年底就得到了它的Bata 1版,2001年7月得到了英語正式版。初次見面確有失望之處——界面改觀太小了——除了幾個窗口可以停放、菜單上多了幾個圖標之外,幾乎與Visual FoxPro 6沒有區(qū)別,最無法容忍的是可視化控件一個也沒有增加……
我耐著性子讀著幫助了解Visual FoxPro 7的新特性,慢慢的我有了這樣的感受:有了Visual FoxPro 7我決不用Visual FoxPro 6,這也是我對Visual FoxPro 7的評判,雖然它不完美,有的地方不盡如人意,我還是覺得給它打個80分總是應(yīng)該的。接下來筆者就談?wù)勈褂玫母惺埽?br>
巨好的開發(fā)環(huán)境,這主要體現(xiàn)在六個方面:
IntelliSense(智能感知輸入提示)、Object Browse、Document View、Task List(任務(wù)列表)、最近使用過的文件記錄、窗口停放。
IntelliSense。我以前常常羨慕VB程序員,他們在VB 5時就擁有了IntelliSense工具,于是他們不必要記憶大量的命令、函數(shù)、在對外來的ActiveX、COM編程時也能輕易的得到對象的方法、屬性、事件。
在Visual FoxPro里,如果說記憶Visual FoxPro本身的東西還沒有什么困難的話,對ActiveX、COM得屬性、方法、常量就頭疼了?,F(xiàn)在Visual FoxPro 7支持IntelliSense了,并且提供了強大的用戶定義功能,在Visual FoxPro里這是一個可組態(tài)的工具;現(xiàn)在Visual FoxPro 7不僅支持對內(nèi)部對象、命令、函數(shù)的智能輸入導(dǎo)航,更支持對ActiveX、COM的智能輸入導(dǎo)航,令人興奮的是:Visual FoxPro的IntelliSense還支持最新的Web Service。完全可以自豪的說:Visual FoxPro的IntelliSense是最棒的,是可以由用戶定義的。
Object Browse。與IntelliSense一樣,在其他開發(fā)環(huán)境中早就有了,但并沒有因此降低我對它的興趣。首先,對COM對象、ActiveX的觀察工具確實很有用;最重要的是:Visual FoxPro 7的Object Browse與Visual FoxPro開發(fā)環(huán)境緊密結(jié)合在一起--可以很簡單的從Object Browse中拖逸COM對象接口到程序中,很簡單的就可以“實作”COM對象的接口。
Document View。這是一個程序編輯的輔助工具,它可以列出文件中所有的過程、方法、函數(shù)、宏定義、頭文件,幫助程序員在大量代碼中快速導(dǎo)航。
Task List(任務(wù)列表)是一項貼心設(shè)計,它的功能有點像“書簽”。但比“書簽”強大的地方在于:一旦關(guān)閉文件“書簽”就釋放了,而Task List 不會。任何時候點擊Task List 項目就可以快速打開相關(guān)文件,導(dǎo)航到相關(guān)的地點。
就像Word那樣,Visual FoxPro 會記憶用戶最近使用過文件,這樣就能減少用戶查找文件的時間。
窗口停放。顯示器越來越大、分辨率越來越高,程序員的桌面空間越來越小——開發(fā)環(huán)境對內(nèi)部工具窗體的管理很要緊——合理組合,提供更大工作空間。在我用過的開發(fā)工具中,我最喜歡Visual FoxPro的環(huán)境配置,不滿意的是:命令窗口、數(shù)據(jù)工作期窗口、屬性窗口的凌亂?,F(xiàn)在好了——Visual FoxPro 7支持了工具窗口停放,達到了節(jié)約空間的目的。
Visual FoxPro 7 對開發(fā)環(huán)境的改善有細微之處的變化、更有大部頭的作品。它吸收了各種開發(fā)環(huán)境的優(yōu)點,融入了Fox自己的特色,值得稱道。
數(shù)據(jù)庫事件
Visual FoxPro 7 最亮麗的特色是60個左右的數(shù)據(jù)庫事件,這是自Visual FoxPro 3以來一次最大的對數(shù)據(jù)庫引擎的改善。這些事件對管理整個數(shù)據(jù)庫有很重大的意義,我們可以把維護數(shù)據(jù)庫的代碼寫在事件中,只要有相應(yīng)的操作就會觸發(fā),這樣就網(wǎng)羅了所有的相關(guān)動作,而不是像以前那樣寫在應(yīng)用程序中!數(shù)據(jù)庫的事件應(yīng)用面可能很廣,發(fā)揮它的作用還得靠大家的智慧!
XML與Web Service
Visual FoxPro 7 支持 XML 文檔與 Fox 光標的轉(zhuǎn)換,真是一件令人興奮的事情,以前我們開發(fā)COM應(yīng)用程序時總為數(shù)據(jù)集合傳遞感到頭疼——本人的解決方案是——模仿ADO的做法,讓客戶程序以循環(huán)的方式得到記錄集;當COM組件要得到記錄集時,好像就更麻煩了……現(xiàn)在好了,業(yè)界新標準——XML可以文本(字符串)的方式傳遞數(shù)據(jù)集合,真是一件美事!
Visual FoxPro 7 支持XML,同時對SOAP也有內(nèi)置的支持,這樣就使得Visual FoxPro 7成為.NET構(gòu)架下的工具了,我們可以使用Visual FoxPro7輕松的開發(fā)、發(fā)布Web Service,這樣我們的應(yīng)用程序就可以在任何時間、任何地點被任何支持Internet的設(shè)備調(diào)用,為它們提供服務(wù)。
Web Service可是當前業(yè)界最最熱門的話題,Visual FoxPro是微軟公司推出的第一個能開發(fā)Web Service的工具。支持 Web Service,使得Visual FoxPro 程序員具備了開發(fā)新型分布式應(yīng)用程序的能力。
COM以及COM+
COM組件開發(fā)的感覺特爽,不僅是開發(fā)效率的提高,更是COM組件運行的效果明顯改善。Visual FoxPro 是從5.0開始支持COM組件的開發(fā),6.0版本開始走向成熟,6.0的SP3以后支持多線程組件的開發(fā),7.0版本中開發(fā)COM組件明顯比6.0版本運行效果好,可以說是成熟、完美的技術(shù)了。
我以為Visual FoxPro 7對COM的支持可以分為兩個部分:Visual FoxPro充當COM的客戶程序、Visual FoxPro作為COM服務(wù)程序。
Visual FoxPro 7 支持COM組件的“Interface”實作,支持早期綁定。這都是偉大的革新,我們知道COM本身不支持“繼承”,所以我們無法寫出基于某個COM組件的“子類”,但我們可以通過“實作”COM組件的“Interface”,來實現(xiàn)多重“繼承”……
同時用Visual FoxPro 7編寫的COM組件,比以往任何一個版本的Fox都可靠,并且完全支持Windows 2000的COM+規(guī)范。微軟在宣傳Visual FoxPro 7時指出:Visual FoxPro的COM組件可以被用作工業(yè)現(xiàn)場的無界面數(shù)據(jù)處理,可見其穩(wěn)定性。
Install Shield Express For Visual FoxPro
Install Shield 是主流的安裝程序制作軟件,在Visual FoxPro 7 里微軟就用 Install Shield Express For Visual FoxPro 限制功能版代替了原先的安裝向?qū)А8少F的是,這個版本的Install Shield提供了中文語言包,也就是說可以生成中文界面的安裝程序了。有了Install Shield ,我們就能做出最合乎潮流的安裝程序。
新特性還有不少,您就自己看吧!還可以參看筆者撰寫的《Visual FoxPro 7漫談》一文。
軟件的升級對我們用戶是否有好處,主要是看他為您解決了多少難題、減輕了多少痛苦。Visual FoxPro 7對于高級用戶可能更有吸引力,當然普通用戶也一定會對它的超級開發(fā)環(huán)境有興趣。
Visual FoxPro 7 SP1
2002年1月16日,微軟發(fā)布了Visual FoxPro 7的SP1。這是一個徹底的補丁包——幾乎沒有推出任何新特性。
加裝SP1能夠改善Visual FoxPro 7對XML的支持,根據(jù)筆者測試,再不安裝SP1的時候,XMLTOCURSOR()函數(shù)無法正確解析中文字符,而安裝了SP1以后,這個問題就解決了!
我們的 Visual FoxPro 8
當我們還在討論Visual FoxPro 7的時候,Visual FoxPro 8已經(jīng)像我們走來了!
Visual FoxPro 8的產(chǎn)品代號是"Toledo" ,是有FoxPro社區(qū)選出來的。
已經(jīng)看到的Visual FoxPro 8 的新特性
2001年9月初,在美國舉行的“VFP DevCon 2001” 會議中,微軟Fox小組成員召集了名為“Visual FoxPro 7.0 and Beyond”的主題演講,Calvin Hsia 為到會的開發(fā)人員演示了幾個已經(jīng)完成的Visual FoxPro 8的新特性,雖然都是些不大的改進。筆者個人覺得2003年Visual FoxPro 8將正式發(fā)行,但至于那是他叫不叫Visual FoxPro 8我就不知道了,也許微軟會為它改個名字……
支持自增長字段。
用一個屬性實現(xiàn),表格控件當前行的突出色彩現(xiàn)實,并且在表格失去光標時,依然高亮度顯示當前行。
頁框控件的得頁標頭支持上、下、左、右四個方位的放置。
控件的ToolTip支持多行顯示。
所有控件支持Windows XP的界面風格。
微軟對Visual FoxPro 8的定位
在FoxPro Advisor雜志里,有一篇名為《Memo from Microsoft》 的文章,登載了微軟Visual FoxPro 產(chǎn)品經(jīng)理 Ken Levy 對2002年 Visual FoxPro 發(fā)展的計劃,其中專門提到了Visual FoxPro 8 的產(chǎn)品定位,原文是:
The main top-down goals for Toledo are to provide a better rich client, improve distributed Web client features, improve developer productivity, and increase discoverability for ease of use. You can see that the product direction focuses on features VFP developers have requested.
Visual FoxPro 8 將在客戶端開發(fā)上做重大的改進、加強,這與當年微軟對 Visual FoxPro 5、6 的定位截然不同——強調(diào)Visual FoxPro 在Visual Studio中的作用,強調(diào)Visual FoxPro開發(fā)中間層應(yīng)用、COM組件?,F(xiàn)在Visual FoxPro 離開了Visual Studio,產(chǎn)品重新定位,順應(yīng)開發(fā)者的需求,提出了 Rich Client(胖客戶端)定位!
還有就是Visual FoxPro 8可能可以開發(fā)Web Form了,也就是所謂的 distributed Web client features。
Visual FoxPro 8 不會是.Net語言
Ken Levy 還表示,Visual FoxPro 8將堅持現(xiàn)有的體系構(gòu)架,而不會運行在.NET common language runtime (CLR) engine 上,成為.Net語言。
我對Visual FoxPro 8 的期望
以下只是筆者一家之言。
遠程數(shù)據(jù)訪問
Fox歷史上的每一次重要升級都與數(shù)據(jù)引擎有關(guān),比如2.0時加入了內(nèi)置的SQL語句和Rushmore技術(shù);3.0時提出了完整的數(shù)據(jù)庫概念,加入了遠程數(shù)據(jù)處理的技術(shù);7.0推出了數(shù)據(jù)庫事件的概念。筆者以為,Visual FoxPro 8可能在遠程數(shù)據(jù)的處理上有改進,我們知道現(xiàn)在的Visual FoxPro是通過ODBC對遠程數(shù)據(jù)實現(xiàn)訪問的,ADO主要使用OLE DB來訪問遠程數(shù)據(jù),PB這樣的軟件更是有底層通道訪問各種主流數(shù)據(jù)庫;最新的ADO.NET中,微軟更增加了對SQL Server 7.0及2000的直接(底層)訪問,當然對其它數(shù)據(jù)庫仍然采用OLE DB來訪問?,F(xiàn)在我們在Visual FoxPro中,要想通過OLE-DB訪問遠程數(shù)據(jù)必須使用ADO組件,但從實際應(yīng)用來看ADO并非是Fox訪問遠程數(shù)據(jù)的主流方法,所以Visual FoxPro 8 應(yīng)該會在訪問遠程數(shù)據(jù)方面提出更加具備效率的方法:或是對SQL Server的底層通道,或是使用OLE DB連接到遠程數(shù)據(jù)……(哈哈,這時我去年寫的,今年已經(jīng)從微軟得到證實:Fox 小組正在改進Visual FoxPro與SQL Server的通訊??磥?,我的感覺蠻準的?。?br>
無論訪問怎么通道變化,對用戶是感覺不到的,就像現(xiàn)在用戶感覺不到我正在通過ODBC連接SQL Server的數(shù)據(jù)一樣,只是效果更好。 (注:ODBC仍然是絕對主流、穩(wěn)定的遠程數(shù)據(jù)訪問方式,只是速度略微慢于OLE DB;但它的兼容性絕對好于OLE DB下的ADO。所以未來的幾年中ODBC仍然是值得信賴的遠程數(shù)據(jù)訪問的解決方案,特別是Visual FoxPro用戶)。
當然,隨著Fox用戶越來越多的使用SQL Server作為后臺數(shù)據(jù)庫,Visual FoxPro 8 會在加強開發(fā)環(huán)境,例如:數(shù)據(jù)字典,用戶可以方便的查看、維護數(shù)據(jù)源的表、視圖、存儲過程、觸發(fā)器等對象,以提高開發(fā)效率。
報表工具
Visual FoxPro 8將會對報表工具進行大幅度的改進,首先是將報表最為一個對象處理,是報表變得很容易訪問、控制;再就是提升報表的性能,例如多細節(jié)帶區(qū)報表……;報表預(yù)覽更自由,預(yù)覽窗口將不再是模式窗口,由于窗口可以是任意指定的表單……;報表顯示的數(shù)據(jù)可以與報表一起保存,這樣報表就可以作為一份歷史文檔……
當然,微軟也有可能將Crystal Report內(nèi)置到Visual FoxPro里去,但我堅信:Visual FoxPro 8一定會在報表問題上給我們一個答復(fù)!
調(diào)用API更方便
我覺得直接調(diào)用API不是最佳的編程方法,但有時沒有辦法,只得調(diào)用。Visual FoxPro 8會支持“結(jié)構(gòu)”這樣的數(shù)據(jù)類型,可視控件都會帶有句柄屬性,這樣就可以在Visual FoxPro中簡便的使用API的各項功能,不像現(xiàn)在明明是很常見的API調(diào)用,在Visual FoxPro中卻很麻煩……
界面的改進
我直言不諱:Visual FoxPro的界面效果簡直是微軟的恥辱!如果Visual FoxPro 8在這方面會為我們帶來一些清新空氣的話,這里有兩種可能:我想微軟會在現(xiàn)有的基礎(chǔ)上升級整個界面以及內(nèi)置的可視化控件,使他們符合Window的發(fā)展潮流,更規(guī)范、更流行;也可能Visual FoxPro 8將加入.Net系統(tǒng),繼承那個公共運行庫提供的美好的界面。筆者以為:如果微軟準備改善Visual FoxPro難看的界面,采取第一種方案的可能更大。(哈哈,我有猜得差不多?。?br>
以上的猜想(更是美好的愿望)在加上編譯加密的愿望可能是所有用戶對微軟的期望,就讓我們看看,微軟會為我們帶來什么吧!
選擇Visual FoxPro
筆者是一名程序員,不是搞行政的、做推銷的,說話辦事總講個實在、一就是一、虛夸是不喜歡的。說心里話,Visual FoxPro在它的應(yīng)用領(lǐng)域既不像那些大吹大擂的人說的那樣神奇、世界第一,更不像社會上那些一知半解、不懂裝懂的人講的那樣不濟,我的觀點是用好Visual FoxPro足以與任何當前流行的開發(fā)工具抗衡,其中關(guān)鍵是:您是不是高手,您是不是把Visual FoxPro用在了它合適的領(lǐng)域。
我們?yōu)槭裁催x擇Visual FoxPro作為我們的開發(fā)工具,因為他對我們有用,別的工具對我們來說用的沒有它的得心應(yīng)手,用了Visual FoxPro我們能夠開發(fā)出經(jīng)得起比較、經(jīng)得起市場風浪、經(jīng)得起生產(chǎn)實踐考驗的系統(tǒng),這對我們來說就足夠了!??!
在本文的即將結(jié)束之際,筆者想讓大家看看用亞馬遜網(wǎng)站(www.amazon.com)上Visual FoxPro 7的一段英文介紹,雖然有廣告色彩,這段文字卻真實、全面的概括了 Visual FoxPro 的特色、用途:
Microsoft Visual FoxPro 7.0 enables you to build high-performance desktop, client/server, and Web database applications with its database development system. Employ its powerful data engine to manage large volumes of data, its object-oriented programming to reuse components across applications, and its built-in XML support to quickly manipulate data. Visual FoxPro 7.0 provides the tools and powerful data engine developers need to manage large volumes of data, whether they are organizing tables of information, running queries, or building full-featured database applications for end users. It helps developers achieve maximum productivity through a powerful development environment and easy-to-use visual design tools, and provides the flexibility to build all types of database applications, and to build and consume COM+ components and Web Services.
Make applications accessible to third-party tools, such as screen readers, voice-recognition devices, and automated test harnesses. You can also make Visual FoxPro data easily accessible to non-Visual FoxPro-based clients. Build interoperable applications and components through the ability to represent Visual FoxPro data as XML and to import XML data into Visual FoxPro tables. Control user actions with code that executes when databases are opened, closed, or modified. You will reduce coding time by obtaining powerful, extensible language assistance as you type. View and quickly navigate to procedures, functions, and methods in source code, dock common tools such as command, data session, and debug windows. You can create setups for your custom applications using a special version of the popular InstallShield Express developed exclusively for Visual FoxPro. The enhanced code editor reduces coding time with support for bookmarks and shortcuts, find capabilities, and case conversion.
最后,我想告訴大家一個好消息:2001年9月24日,微軟的CEO Steve Ballmer 發(fā)表了關(guān)于 Visual FoxPro 7.0的講話。他除了介紹Visial FoxPro 7的新特性之外,還代表微軟承諾:微軟將繼續(xù)推動Visual FoxPro的發(fā)展,為全球開發(fā)人員提供更好的支持!
原文如下:
Hi, I‘m Steve Ballmer from Microsoft, and it‘s my great pleasure to be able to talk to you about a newly released version 7 of Visual FoxPro. Visual FoxPro 7 is a great tool for building database solutions of all sizes. From multi-tiered database applications, to data-intensive COM components, and XML Web services.
I hope you‘ve heard by now about .NET, Microsoft‘s platform for next generation XML Web services. Visual FoxPro 7‘s support for XML standards, such as SOAP and WSDL, make it easy to create .NET Web services in the same environment you know and love today.
Along with full support for WindowsXP, Visual FoxPro 7‘s XML support allows integration with .NET Enterprise Servers such as SQL Server 2000 and our BizTalk Server. And XML support in OfficeXP makes it easier than ever for Visual FoxPro 7 developers to import and export spreadsheets. Microsoft is committing to improve Visual FoxPro and continue to serve the needs of FoxPro developers worldwide.
The developer community is core of us. We value the bet you‘re making on us. The time and energy you put into building great Visual FoxPro applications for Windows, and we won‘t let you down.
We‘re committed to continually improving our tools to match your evolving demands as application builders. We think we‘ve got exactly the right line up with Visual FoxPro and Visual Studio .NET, allowing you to continue to innovate and do incredible things for the customers we all serve.
I hope you agree with us that Visual FoxPro 7 is an exciting release. And I hope you join me in supporting Ken Levy and the rest of the Fox team here at Microsoft as we build a bigger, and better, and a more successful FoxPro developer community. Thanks a lot.
因此,我們的看法是:如果你想開發(fā)出色的應(yīng)用程序并想保護你的投資,那么選用Visual FoxPro準沒錯。