| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5006 人关注过本帖
标题:【轉貼】Visual FoxPro 漫談
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏
 问题点数:0 回复次数:12 
【轉貼】Visual FoxPro 漫談
借花敬佛,我不知道這篇文章是否曾在這裏出現過,轉貼過來供大家參考一下:

Visual FoxPro 漫談



作品來源:BOE 資料網路工作室

創建日期:2001年02月23日

最後更新:2002年07月21日

作者姓名:陳純

版權聲明:版權屬於BOE 資料網路工作室  



細節描述:作為市場上最靈活和功能最強大的資料庫管理系統,Visual FoxPro擁有悠久而輝煌的發展歷史。它初創時是Fox Software公司的FoxBASE產品,“Fox”(這是國際程式設計界對她的稱呼)一種可靠、便捷和高效的程式師用的資料庫產品而名聞遐邇。世界上沒有一種產品像 Visual FoxPro 那樣運行,她是獨一無二的!

前言
這篇文章可以說是BOE資料網路工作室的開山之作了。它的動工是從2000年國慶日開始的,寫寫停停,直到那年的農曆春節才完成初稿……

後來我有幾次修改,算在2002年4月的這個版本,應該是第四版了!

當初,我寫這篇文章的動機是:平靜的表達我的觀點。作為一名 Visual FoxPro 的程式師經常受到別人的質疑、甚至是批駁、挖苦,我不是一個擅長口舌爭鬥的人,更不敢冒犯“眾怒”。於是我就用鍵盤陸續敲擊一些文字,表達我對 Visual FoxPro 的認識,同時表達對各類問題的看法……

近兩年來,就我本人來說發生了很多變化:由於工作的關係,我接觸了很多其他的開發工具,其中有大家廣為熟悉的Delphi,也有國內不見經傳的Rapid Plus、InTouch、InSQL、InTruck。體會過種種、經歷過許多,我覺得我更有能力完成此文了,我希望站在公正的立場上看待Visual FoxPro,而不是社會上一味的批評、鄙夷,更不是Fox Fans的“天下我是老大”的心態!希望大家能在文章中感到BOE的成熟和進步。

網友們特別喜歡這篇文章,我知道Fox 的 Fans能在此處得到共鳴,其實我寫這篇文章也就是要把平時大家關心的話題總結歸納一下,去粗取精、去偽存真……

去年春天 Visual FoxPro 7 就正式發行,好多狐友都在等待簡體中文版,很遺憾的是,微軟並沒有漢化它。我覺得,沒有任何必要使用簡體中文版的Visual FoxPro 7,原因如此:功能上講,中文版與英文版完全相同;Visual FoxPro 7的IDE與以前版本沒有什麼區別,所以對於熟悉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可比擬的,升級開發工具是必然的。所以,希望各位,升級到Visual FoxPro 7吧!

Visual FoxPro是什麼
作為市場上最靈活和功能最強大的資料庫管理系統,Visual FoxPro擁有悠久而輝煌的發展歷史。它初創時是Fox Software公司的FoxBASE產品,“Fox”(這是國際程式設計界對它的稱呼)一種可靠、便捷和高效的程式師用的資料庫產品而名聞遐邇。 世界上沒有一種產品像 Visual FoxPro 那樣運行,它是獨一無二的!

許多人在享受了Visual FoxPro的服務後卻說不清它是什麼。就讓我們沿著它的發展軌跡瞭解瞭解它吧!這會使您能對它有更深刻的認識。

FoxPro隸屬於一種名為Xbase的DBMS類別。Xbase這個術語很常見,他表示諸如FoxPro、dBASEIII PLUS、dBASEIV、FoxBASE+以及ARAGO的語言。Xbase最初起源於一個大型機使用的DBMS,這個DBMS叫做JPLDIS(噴射推動實驗室資料庫管理和資訊檢索系統)。這個DBMS 是由美國人Jeb Long在1972年開發成功的。到目前為止全世界的開發者和程式師已經編寫了幾千萬行的Xbase代碼。

追溯到80年代末,FoxBASE是dBase的克隆系統。只要是dBASEIII能做的工作,FoxBASE就能做得更好更快。FoxBASE雖然擁有某些全新的特徵,但它並沒有真正重大的技術突破,只是為了運行得更快更好,而更重要的是它與dBASEIII相容。

FoxPro 1.0首先背離了與相容的原則。它開始在圖形化使用者介面的設計和軟體發展方法中採用一些新的思路,從而使它領先於當時年前景已不妙的dBASEIV。

從2.0開始,FoxPro才真正形成了它自己的特色。當FoxPro 2.0推出時,它包含了若干項關鍵技術,給PC資料庫開發市場帶來了革命性的變化。這些技術是:

加入了Rushmore技術,它能從事許多難以想像的複雜工作。突然之間,帶有以百萬計數的記錄的表格在PC資料庫系統中不僅成為可能,而且可以非常容易地加以實現,無需轉用其他比較昂貴的技術;Rushmore最重要的優點在於它是完全自動化的,不用用戶花費精力和時間。因為有了Rushmore技術,再加上Fox天生的快速,即使在今天Visual FoxPro仍然是最快的桌面資料庫引擎。

SQL語句是FoxPro 2.0推出的另一項具有革命性意義的關鍵技術。Fox的開發人員首次用單一語句取代了整個程式過程,並且這種支援是內含於Fox資料引擎之中的。SQL語言曾經並且現在仍然是強大的資料語言。

FoxPro 2.0還推出了某種所見即所得的開發報表和螢幕的工具。

FoxPro 2.0確實具備了我們今天的Visual FoxPro擁有的一些出色的功能。GUI設計服務、SQL和極快的資料訪問,是它明顯的特徵。

FoxPro 2.5有for DOS、for Windows版,不過那個Windows版只是具有看上去像“Windows”的DOS應用程式的外觀。特別是那個DOS下的版本絕對是經典之作,觀察身邊是不是還有很多這樣的系統在運行著?當時有人這樣評價:這個軟體已經無法再快了,除非硬體升級……

直到1995年春天Visual FoxPro推出時,才出現了FoxPro的又一次重大改進(這時Microsoft已經收購了Fox Software公司)。Visual FoxPro 3.0增加了一些人們企盼已久的特性,使PC資料庫開發界大為震驚。我們可以看到:Visual FoxPro與FoxPro是由很大差別的,不要再把Visual FoxPro成為FoxPro了。這些特性是:

資料庫容器(Database Container),也叫DBC,它增加了開發人員多年盼望的對存儲過程的支援、與表格相關聯的資料規則和一系列的附加資料功能。

遠端資料的無縫連接。談到連接遠端資料的處理,大家往往會想到RDO、ADO、BDE等處理資料引擎,那麼Visual FoxPro利用什麼實現遠端資料的無縫連接?Visual FoxPro本身的資料處理引擎,這和其他任何開發工具都是不同的!Visual FoxPro資料處理引擎通過ODBC驅動程式與遠端資料庫伺服器“通話”,遠端資料庫伺服器的ODBC驅動程式能將Visual FoxPro資料轉化成可由他們解釋的資料;相反,Visual FoxPro的ODBC驅動程式也能將遠端資料轉化成可由Visual FoxPro資料引擎處理的資料。可見,只要遠端資料庫有ODBC驅動程式,就可以用Visual FoxPro最為用戶端軟體。常見的SQL Server、Oracle、Access等資料庫都提供ODBC驅動程式。

在Visual FoxPro中實際操作遠端資料有兩種方法,遠端視圖和SPT技術。視圖(View)是可更新的SQL游標,增加了一整套的資料存取方法,用於資料處理、GUI顯示和報表製作。它支援兩種類型的視圖,即本地視圖和遠端視圖。本地視圖是基於Visual FoxPro表格的視圖,遠端視圖是基於任何ODBC資料來源的視圖。另外為了使Visual FoxPro成為完整的C/S開發環境,除視圖之外Visual FoxPro還支援SPT(SQL Pass Through)技術來完成視圖無法完成的工作,比如資料庫伺服器的使用者管理、存儲程序呼叫等。View與SPT技術的產生後,Visual FoxPro就成為訪問遠端資料的主要工具。從總體來看,創建整個企業範圍內的應用程式和使用存儲在遠端資料來源中的資料,幾乎與使用Visual FoxPro表格本身一樣容易,處理在資料存取時增加了一些命令、函數,資料處理與普通的Visual FoxPro程式設計沒有任何區別。再次指出:Remote View與SPT技術是由Visual FoxPro資料處理引擎直接支援的,這與在VB、VC++中的外部資料訪問技術不同(他們使用元件,如:DAO、RDO、ADO……),所以用Visual FoxPro訪問遠端資料的效率很高,並能把遠端資料與本地資料完美的融合在一起,最大程度地提高開發效率和程式運行效率。

完全支援物件導向技術(OOP)。充分而健壯的實現了物件導向的處理方式大大改善了軟體發展條件。健壯的物件模型和創建你自己的類及子類的所用的功能,形成了一種全新的軟體發展手段。

Visual FoxPro 5.0是3.0的升級版本,它是一個32位元的系統。具備了使用和創建COM伺服器的功能,並開始支援在Internet上發佈Visual FoxPro。從這個版本開始,Visual FoxPro進入了Visual studio家族,並且Visual FoxPro將不再升級的謠言也是在這個時期出現。

在Visual FoxPro 6.0出現之前,微軟計畫推出DNA,演化到今天就是.NET,並承諾把Visual FoxPro發展成健壯的中間層工具,所以這以後Visual FoxPro的變化初級用戶就不太容易感覺了。

Visual FoxPro 6.0也沒有根本上的變化,不過有些變化還是相當明顯的。Access和Assign這兩種方法在控制放入你的物件中的資料方面很有創意。運用新的Component Gallery(元件庫)和Foundation Classes(基礎類),你能很容易地轉向創建物件導向的應用程式的工作。對COM支持的更好,在Server Pack 3後我們可以用Visual FoxPro創建多執行緒的COM元件。

Visual FoxPro 7是Fox第一個視覺化版本——Visual FoxPro 3以後的最具有革命意義的一次產品升級換代。關於它的特性,稍候本文會有專門段落講解。

Visual FoxPro的語言是由Xbase、SQL、OOP構成的。我不知道這樣分解是否合理,我只是從FoxPro的發展歷史得出以上結論的。其實以上三者在Visual FoxPro完美的融合在一起了,已經與Visual FoxPro血脈相連、不可分割,很多語句、函數很難區分它屬於哪個門類(也沒必要)。再者Xbase這一叫法也不十分妥當,這樣容易讓人誤會,好像Visual FoxPro的語言是沒有發展的“死語言”、是十幾年前的“老古董”,其實在FoxPro每一次升級中(現在已是Visual FoxPro 7)都會對這部分語言進行修訂、增補。我看還是這樣:Visual FoxPro語言就叫它:“Visual FoxPro語言”,它既不同於任何以往的Xbase(最多有歷史淵源),也不同於其它的程式設計語言。這就象Delphi那樣,是Object Pascal語言,不是以前的Pascal;VB就是VB,不是以前的 Basic。

從Fox進入視覺化的時代後,對COM技術的支持一直是Visual FoxPro在過去、現在、將來不斷改進的地方。物件導向程式設計(OOP)的最大的好處就在於代碼的重複使用。然而,OOP只是一種解決代碼重複使用的一種優秀的方案(solution)。單純利用OOP技術不僅要求所有物件都必須用一種語言完成,並且你還需要得到原程式碼嵌入應用程式(就像我們在Visual FoxPro開發使用Class那樣)。如果物件是有你或你的公司完成的這些可能不是什麼問題,但如果物件是由其他人或其他公司寫的這就是問題了……再者為了節省資源我們常希望把一物件放在遠端的電腦上供許多應用程式使用,怎樣簡單、安全完成這個任務呢?看來,單有OOP是不行的!於是微軟提出了Component Object Model(COM)技術,有了它我們就不需要把物件來源程式嵌入我們的應用程式中,就可以使用其他語言開發的物件,就可以分佈的使用物件了。

COM技術提供四種不同的特性,Visual FoxPro支援所有的COM 特性。

ActiveX documents 允許使用者在一個應用程式中編輯另一個應用程式的document。我們把Word文檔嵌入或連結到Visual FoxPro中,就可以不離開Visual FoxPro編輯Word文檔了。

ActiveX controls 為開發人員提供了增加的系統功能的方法,典型的應用就是各類ActiveX控制項的使用來加強使用者介面。這裡要說明的是Visual FoxPro不支持(7.0也不支持)“集裝箱式的”ActiveX 控制項,比如Cool bar控制項。

Automation 允許使用者在一個應用程式中操縱另外一個應用程式或元件,典型的應用就是Visual FoxPro 與Office 的OLE-Automation應用。

Remote Automation 或者稱 Distributed COM (DCOM)與Automation技術差不多,只是它支援組件的分佈,這就是微軟的分散式應用戰略。

Visual FoxPro 不支援Active controls(ActiveX)的開發,但支援server components的開發,也就是在Automation、Remote Automation中使用的元件都可以用Visual FoxPro來開發。Visual FoxPro的這種能力是從5.0開始具有的,到了6.0的SP 3已經可以開發出多執行緒的元件了,這些在上文已經有過論述。以後的 Visual FoxPro 版本一定會對Automation,特別是Remote Automation有更好的支持,無論是開發server components,還是由Visual FoxPro充當客戶程式。

綜上所述,Visual FoxPro是創建關鍵任務的、企業範圍的、物件導向的單層次、雙層次、多層次應用程式的重要開發工具,這些應用程式可以在本地或全球範圍內進行配置。

Visual FoxPro 已經過時了嗎
恕我直言,這樣的問題我真的聽膩了。這個問題我聽了好幾年了。從謠言出現到今天Visual FoxPro的版本已經生了兩次變化,就是Visual FoxPro 6.0 與2001年春天推出的Visual FoxPro 7.0。根據微軟的官方消息,Visual FoxPro 8(可能是這個名稱吧)已經在研發之中了。我不敢保證是否會有Visual FoxPro 9.0(這就像我不敢保證微軟是否在那時還存在一樣)。可以這樣認為,只要不出意外情況(比如微軟倒閉、業界發生了重大的變革等),Fox就會平穩地發展!

在國外,一個程式師、一家公司把他們使用的開發工具視作一項投資,作為Visual FoxPro的開發廠商微軟公司就必須保護客戶的投資權益,這是很基本的商業原則,微軟絕對不敢隨意淘汰有著50萬用戶的Fox,除非永遠不想賺這50萬用戶的錢了。

為什麼會有Visual FoxPro 要淘汰的傳聞呢,我不是很清楚。但這兩年微軟對Visual FoxPro的不宣傳態度卻是為這股謠言起到了推波助瀾的作用。另外Visual FoxPro 確實是一個容易引起誤會的產品,初級使用者很容易對它產生“不怎麼樣的”評判,於是加上那謠言就產生了“Visual FoxPro 就真的要淘汰了”的幻覺了。

為什麼說Visual FoxPro 是容易引起誤會的產品呢?我總結以下幾點原因:

物件導向與面向過程之爭

我們說Visual FoxPro是物件導向化的語言,是有根據的。物件導向化的語言必須具備四個特性:抽象(Abstraction)、封裝(Encapsulation)、繼承(Inheritance)、多態(Polymorphism)。對照一下Visual FoxPro,是不是支持這四大特性!

當然,Visual FoxPro 與C++和Object Pascal 一樣都是歷史悠久的語言,所以語言中有很多面向過程的語素。我知道很多學校在教學中,只是教導學生們使用Visual FoxPro的面向過程的語言特色,而忽視了物件導向的教學,同樣的問題也存在于廣大的 Visual FoxPro 程式師中。我們必須明白:不能因為我們沒有使用Visual FoxPro物件導向的強大功能,而說Visual FoxPro不是物件導向的語言,這就像不能因為天下雨、沒有出太陽,而說太陽被天狗吃掉了——多麼的幼稚可笑!

我們知道Visual FoxPro對資料的操作沿用了多年來的面向過程的做法,這與現在流行的開發工具有很大的不同。我覺得,微軟這樣做是有它的道理的:

第一,面向過程的資料處理,更能發揮XBase語言體系的靈活與隨意的特色。這一點,你用過其他的資料庫開發工具,然後再用用Visual FoxPro就明白了。

第二,不直接提供物件導向的資料處理元件,不代表不允許使用者封裝自己的資料處理元件。很多優秀的 Fox程式師,都會自己封裝專門資料處理元件,這才是Visual FoxPro程式設計的高尚境界!

面向記錄與面向集合之爭

根據筆者的淺薄認知,關係型數據庫處理可以分為面向記錄操作和面向集合操作。

各種開發工具支援的用戶端游標體系就是面向記錄操作的,它們支援記錄之間的絕對定位,更明白地說就是可以在記錄之間導航,諸如:SKIP、GO TOP之類的語句。Visual FoxPro 無疑是此道的絕對高手,20年的語言發展,聚集了大量面向記錄的語言要素。這是因為這樣,我們才會反復強調:Visual FoxPro的Cursor 體系靈活、強大!

各類大型資料庫,如Oracle、SQL Server 是面向集合處理的代表,看看正統的SQL 語言,絕對沒有資料導航之說,資料記錄之間是平等的,一切都要講關係、擺條件!

隨著技術的發展,人們開始注意到,不能分割這兩種對資料的操作方式,於是大型資料庫支援了游標語素,Fox也支援符合規範的SQL 語言。

產品定位導致Visual FoxPro變化不易為人們感覺。微軟要把Visual FoxPro作為三層構架(或是多層構架)的中間層開發工具。

什麼是三層構架呢?第一層是使用者介面:它包含了使用者介面,讓使用者輸入、輸出、查詢等工作;第三層是資料層:它就是用來放資料的地方,一般是指後端資料庫,主要有包括 Oracle、SQL Server 等,它主要是提供一個很大的地方,來有規則的存放資料;第二層是商務邏輯層(中間層):有人要說了:存取資料、直接從第一層跳到第二層可不可以?當然可以,沒有人規定不能走捷徑,而且從資料庫直接抓資料,既快又好,那為什麼搞出個第二層呢?

商務規則是經常變化的,比如上班從8 點改為10 點,那電腦怎那麼知道老闆因為不景氣少讓大家上二個小時班呢?它一定無法知道,你必須告訴它,這時問題就來了,如果你有很多部電腦,例如:100 台,你就得一部部換新程式。如果這是一個掛在Internet上的網路程式,難道總讓使用者download新程式不成?

更重要的是,在大量客戶存在的環境裡,傳統的兩層構架根本沒有能力承擔巨大的工作壓力,必須通過某種中間系統實現壓力平衡,這就是中間層的另一妙用!

中間層是沒有圖形介面設計的代碼編寫,並且是OOP方式的代碼編寫,不僅要熟悉後臺資料庫的特性,還要考慮前臺介面工具的特性,最重要的是商務邏輯的構架,同時還要求懂得IIS、MTS(COM+)、NT的安全設置等複雜枯燥的東西。有趣的是,近年來 Visual FoxPro 的各種改進,更多的是在這些方面下功夫,到了最新版本的Visual FoxPro 7 更是在此方面增加了若干特性,下面就讓我用四個問題來說明Visual FoxPro 在開發中間層方面的貢獻:

問題一:Visual FoxPro能開發出穩定、有效率的Server程式嗎?能,在1999年發佈的Visual FoxPro SP 3中微軟賦予了Visual FoxPro開發多執行緒進程的內元件的能力,並增加了新的運行時刻庫VFPnT.DLL(n代表版本號),支持其運行,在這個運行庫中,刪除了大量老式的和介面控制元素,使得它更小巧。但是由於Visual FoxPro6本身不是很穩定(加打SP4或SP5才有所改善),所以這個很棒的功能在Visual FoxPro 6下並不能充分發揮,直到Visual FoxPro 7出現才使它的顯示出英雄本色!

問題二:分散式的事務、動態負載平衡怎麼實現?Visual FoxPro 7對COM+有很好的支持,借由COM+就可以解決這兩個問題了!

問題三:作為Server程式,客戶程式怎樣與Server交換資料集合?這是Visual FoxPro 6開發的Server程式的致命弱點,我們知道Visual FoxPro是用來處理資料的,但不能與外界自由交換資料集合會大大降低開發、使用以及程式運行效率!在Visual FoxPro 7裡我們XML就可以快速、輕易的傳遞大型資料集合,真正做到資料集的來去自由。現在回想Visual FoxPro 6中我們用的那種“迴圈+屬性”的做法,真有天上與人間的感受!

問題四:能不能讓Visual FoxPro開發的Server任由客戶使用,叫幹什麼就幹什麼?可以的,在Visual FoxPro 7裡提供了一個全新的函數:ExecScript()。有了它,就可以一次執行多條用戶端送來的符合Visual FoxPro規範的語句:你可以定義變數、做查詢、更新資料、修改表結構……

微軟確實實踐著讓Visual FoxPro在中間層運行的承諾。但遺憾的是:由於國內使用者的水準、國內軟體應用的領域,對大多數Fox Fans 無法感受Visual FoxPro日新月異的變化——對他們來說,Visual FoxPro確實“沒有改變”!
搜索更多相关主题的帖子: 工作室 管理系 文章 作者 姓名 
2011-07-15 18:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
Visual FoxPro 只能局限于桌面應用程式的開發嗎?

技術在進步,軟體技術的應用不斷在拓寬,Internet 已經是眾多開發工具競相支援的應用領域。Visual FoxPro 從版本 5 開始不斷擴充對Internet的支持,到最新的Visual FoxPro 7 更是增加了對Web Service的支持。我們可以把Visual FoxPro 對Internet的支持分為三大部分:

第一,簡單的HTML的轉換。Visual FoxPro 自帶的“Web 發佈”就是這類型的工具,利用HTML和DHTML的模版,支援Visual FoxPro資料的Web化,這是一種全靜態的 Web 支援。

第二,適合於企業內部使用的 Active Document 技術。是不是希望快速、簡單的把Visual FoxPro應用程式轉變為Web 應用程式,這個Active Document 技術就是最佳的選擇。它支援 App 程式運行在IE中,它的缺點是:在用戶端必須安裝Visual FoxPro的運行庫、用戶端與資料庫間依然是緊密的有狀態的關係,屬於F/S構架——只是介面能夠運行在IE之中了。它的開發快速以及它依然基於傳統構架,決定了這個技術只能運行在企業內部,一般不能在廣域網路絡中發佈。

這技術是Visual FoxPro 6提出的,當時在Tool功能表裡還有一個專門的功能表項目。到了而今的Visual FoxPro 7,這個功能表項目已經取消了,但並不是說Visual FoxPro 7不支持Active Document,只是這種並不出色的技術沒有必要再放在醒目的位置了。

第三,基於COM 的 Web 應用。

Visual FoxPro真正能被用於Web開發,就是通過 COM 支持的。

這裡您要有個認識,作為資料庫開發工具,Visual FoxPro 不是FronPage這樣的用於開發Web 介面的工具(也許未來的 Visual FoxPro 會支援 Web 介面的開發)。Visual FoxPro 完全是作為 Server 運行在網站的後臺,為各種應用提供服務。使用 Visual FoxPro 編寫的 COM 元件能夠被IIS支援,壓在後臺進行各種運作——這就是真正意義上的Visual FoxPro 的Web應用,也是典型的多層構架的中間層!

這個階段,Visual FoxPro對Web的支持有可以劃分為三個層次:

FoxISAPI

這是最先登場的技術,當年ASP技術還沒有出現的時候,我們在IIS裡就可以通過ISAPI技術實現動態網頁開發。

Web Server

ASP技術出現了,我們知道ASP技術的一大特色就是支援伺服器端的組件的應用。用Visual FoxPro的編寫的COM組件就能運行在IIS裡,供ASP調用。

Web Service

這是Visual FoxPro 7的新特性,也是當前最熱門的技術。它與Web Service的最大不同就是:Web Server 元件只能通過ASP程式調用,而Web Service可以供任何系統在全球範圍調用,無論用戶端的硬體平臺、軟體平臺,只要它支援SOAP、支援XML就可以了。更誇張一點說:只要能上網,就可以享用 Web Service 提供的服務!

有人也許會問:我可以用VB、VC++建立物件元件時,為何我要用Visual FoxPro 來建立相同的組件? 微軟對這一問題有專門的評論,大意為:快、重複使用性、跨語言重複使用性。“快”是指用Visual FoxPro開發的元件擷取、處理資料都極為迅速,並且Visual FoxPro能夠非常迅速的建立字串。到底有多快,我想資料處理、存取的速度大家平時都領教過了,字串生成速度我這裡有個資料不妨一看,這是臺灣的一位高手做的試驗——將1M的資料寫入文本中,結果VC++ 6.0程式用了3.5秒、VB 6.0程式用了11秒、Java 1.1.5用了24秒、Visual FoxPro 6.0用了7秒;“重複使用性”是指Visual FoxPro具備OOP的功能;“跨語言重複使用性”是指Visual FoxPro編寫的對象編譯以後成為COM、COM+物件元件,這樣就可以在其他語言中使用它了。

不要以為Visual FoxPro是“低端產品",無論從資料庫(DBF Base)品質還是開發環境評價Visual FoxPro,它都是一個“高端工具”。

許多人認為Visual FoxPro只能用來開發單使用者系統或是檔案伺服器構架的小型網路系統——這是謬誤——這種無知的言論在許多講C/S、三層構架的書中都有(特別是一些VB、PB、Delphi的資料庫程式設計書)。我可以很負責任的告訴大家完全可以用Visual FoxPro開發C/S結構的系統。這裡說的C/S構架絕對是正宗的,不是用什麼F/S構架在糊弄大家。在C/S構架中我們常常選擇Visual FoxPro作為用戶端開發工具,以Oracle、SQL Server等網路資料庫壓在後臺,使用Visual FoxPro內置的Remote View和SPT技術,這樣就可以完美地解決問題。這裡不能詳細展開,只特別介紹Visual FoxPro的本地引擎在開發中的作用。Visual FoxPro的本地引擎特別強大(上文我們說過處理百萬條記錄不費吹灰之力),我們在設計系統時可以十分簡單的將遠端資料與本地資料結合,很簡單、很有效地控制網路資料流程量、提高系統工作效率(我看過不少VB、Delphi、PB的書,他們很少在怎樣控制網路資料流程量、提高系統工作效率論述,不知是不屑一顧,還是其他什麼原因)。

我認為Visual FoxPro的本地引擎在C/S構架下起碼有三項偉大的用途。其一:非經常變動資料的本機存放區。我國的郵遞區號與地區的關係是相對穩定的資料,而且資料量也不是太小,我想總有上千個記錄(我沒仔細考察過具體情況),我們把這些資訊存儲在用戶端的電腦中,就可以在使用郵遞區號及其相關資訊時從本地得到資料,這樣能使高系統效率同時節省網路資源(這是C/S開發的重要原則),只在郵遞區號發生變化時在伺服器上統一更新,下載更新客戶機上的資料。如果用別的軟體實現同樣的功能,絕對比Visual FoxPro麻煩而且效果絕對不及Visual FoxPro,這因為Visual FoxPro的資料引擎直接支援遠端資料讀取,能很好的融合本地資料與遠端資料;其二:離線數據包。單位裡總有人出差,在千萬裡路之外能不能拿著筆記本為客戶發訂單、與客戶簽合同,就像在自己的辦公室一樣?當他回到公司時只要把筆記本連到伺服器中,發送更新就行了。Visual FoxPro的離線視圖是經濟且高效安全的方案(當然您可以使用遠端撥入或建一個Web網站,這些Visual FoxPro可能幹)。其實離線資料包還有一個重要的功能:當下載的資料是大量的(除非萬不得已請不要這樣設計系統),這種情況下使用離線視圖可以資料集自動轉化為物理表,充分利用Visual FoxPro的高速與靈活,完成後連線更新後端資料來源——一切都很簡單。我認為:離線視圖絕對是Visual FoxPro在C/S系統中的一個賣點,雖然ADO也支援類似的東西,但肯定不及Visual FoxPro有效率;其三:資料驅動。您是否知道,Visual FoxPro中絕大多數檔案格式實際上都是DBF檔,如DBC、SCX、FRX等,他們都可以由Visual FoxPro的本地引擎驅動完成複雜的任務。在設計C/S結構時如果要存儲使用者設置、自訂檔案格式,用Visual FoxPro的本地引擎幫忙絕對比其他軟體簡單,因為你用的是換湯不換藥的方法,但它簡單、有效率。

Visual FoxPro 開發C/S系統時,最與眾不同的特色就是對遠端資料的操控是通過本地資料庫來實現的,Remote View、Connection都作為本地資料庫的物件被管理起來,完美的銜接本地資料與遠端資料。這種在用戶端建立遠端資料邏輯的做法,與最新的有相似之處!

在三層構架中,Visual FoxPro可以充當任意一層的任務,但本人以為大中型系統的資料庫部分應以網路資料庫為主。用戶端介面用Visual FoxPro也是可以的,但一般限於企業內部,在Internet上我們通常使用IE作為客戶介面。在三層構架中Visual FoxPro最勝任中間層的開發,它簡單(開發難度與普通的Visual FoxPro專案相差不大)、快速的字串生成、支援COM技術、它支援(MTS)COM+技術、它支援XML(Visual FoxPro 7.0提供3個與XML有關的函數)、它具有強大本地資料引擎、靈活的資料處理方式、它支援多執行緒的服務元件的開發。

可能有人要問:用ASP+指令碼語言一樣可以開發Web系統,何必加個中間層。的確,目前在市面上與多討論Web的書都直接使用指令碼語言來開發整個系統,這是十分不正確的做法,甚至有寫書還說硬體越來越快,因此使用指令碼語言來開發整個系統並沒有什麼關係。會說出這樣話的作者通常都是沒有實際開發Web應用經驗的人。指令碼語言,如VBScript是一種解釋性語言,運行效率很低,他們只合適作為膠水程式。開發Web系統正統的做法是:把應用邏輯編寫成COM、DCOM物件,然後用少量的指令碼語言來驅動/使用這些物件。這樣系統開發時工作量會大一些,但它符合開發任何資料庫應用程式的最基本的原則:分離應用邏輯與使用者介面。這樣系統就會變的容易維護了——你可以經常變換那些膠水程式來改變Web頁面,應用邏輯變換時你又可以改變某一個邏輯物件,而不用為雜亂且關係複雜的代碼發愁。再者,由於Visual FoxPro是高效、靈活的資料處理語言,任何商業邏輯都可以用它來代碼化,並且您可以獲得幾十倍甚至上百倍於ASP+指令碼語言的運行效率,以及更為強健的執行效果。

Visual FoxPro 的語言看上去蠻難的。
人們在讚揚Visual FoxPro始終是褒揚他的易學易用,我不同意這種觀點(我不知道他們站在什麼立場上說話)。我看問題的角度是“成為一名還過得去的 Visual FoxPro 程式師”,我的結論是Visual FoxPro 作為一個開發工具並不是好學的。這不是說Visual FoxPro的語法、概念像C那麼繁複,而是指:即使是簡單的應用,也要掌握很多Visual FoxPro的概念、語法、函數,可能還要較深入瞭解OOP——往往讓人摸不到深淺。比如,拿資料庫系統最重要的功能——查詢來講,Visual FoxPro就“花樣繁多”。我曾統計過,不算“List、Browse”等互動式命令,Visual FoxPro起碼支援4條命令(Find,Seek,Locate,Select-SQL)、3個函數(Lookup(),Seek(),Indexseek()),(當然其中有的已經淘汰)這些命令的關鍵字、函數的參數眾多,有的要求索引, 有的可以用索引但要求優化索引……而這在VB、Delphi中絕對就只是兩三個方法的事情。從上面的例子中如果您只看到了Visual FoxPro的繁雜,那麼您就完全錯了:在VB、Delphi實現查詢功能的原理與Visual FoxPro應是一樣的,但他們封裝了許多環節,而Visual FoxPro就把許多東西更低階(當然不如VC++那麼低層次,但是已經比使用物件的語言難多了)的展示給我們,所以Visual FoxPro的開發者往往比使用其他的開發工具開發者更會思考、更懂得的資料庫開發的真諦,因為工具逼迫他們朝這個方向努力……

用Visual FoxPro有助於提高程式師對資料庫概念的理解。許多在Visual FoxPro程式師中不是問題的問題往往成為那些使用物件處理資料的程式師的噩夢。比如在Visual FoxPro中資料緩衝、交易處理都是重要的概念(事實上要幹活就必須瞭解這些東西),在其他開發環境中一味強調方便快速往往忽視程式師的基本概念培養,編出的東西要麼效率不高、要麼老出問題。讀書人都懂得:基本概念、基本理論是命根子,這就是Visual FoxPro帶給我們的好處。

有趣的是Visual FoxPro繁、難也就到這個程度了 ,他的學習難度曲線是所有語言中最平穩的——不像在有些語言中,基礎開發十分容易,一旦深入卻難度很高。在Visual FoxPro中初級應用、中級應用、高級應用的難度差異很小——就是那些似曾相識的語句、易於理解的函數。Visual FoxPro的這種高級應用不太難,初級應用不十分容易的特性,對初入門者來講是無法體會其中的妙處的,這就造成了Visual FoxPro的不太友好形象;

同時,Visual FoxPro的難度卻帶來了很多的好處(前文我已談了很多),Visual FoxPro比其他語言在資料處理上更快速、更靈活,資料處理方式更多、更完備。設想一下用Visual FoxPro開發資料物件時,我們可以使用豐富多彩的語句、函數,實現十分複雜、變化多端的功能,用其他語言開發資料物件,它們的功能只能是建立在已有的資料物件的功能之上(這叫繼承),變化就少了,功能就弱了。如果要實現Visual FoxPro的Xbase+SQL 那樣靈活、強大的功能恐怕要使用底層的API了——這太可怕了!

OOP不僅是指“物件導向”的開發環境,更是一種開發思想、開發技術,Visual FoxPro 在後者上做得更好。

我們講過Visual FoxPro完全支援OOP的開發,但有趣的是在資料處理方面,微軟實際上沒有提供什麼現成的物件(FFC是Visual FoxPro 6.0才有的,且封裝性、適應性都不盡如人意),這一點我不知是Visual FoxPro的福氣還是禍害。說“福氣”這將逼迫程式師掌握這門並不太簡單的技術(可能用“思想方法”更恰當),而不是簡單地使用物件。OOP對於中間層的開發來講是很重要的,因為COM元件必須是建立在OOP思想上的,要開發這種元件就必須掌握OOP技術;講“禍害”這使Visual FoxPro變得不易於學習和使用了(就我個人而言,真正體會到“用Visual FoxPro應會編制資料處理物件”這一問題也是在使用了Visual FoxPro好長時間之後的事情了)。事實上現在很多誹謗攻擊Visual FoxPro的人都沒有深刻的認識這一問題——他們只感到Visual FoxPro用起來不及Delphi、PB、VB容易,但他們從不想該怎樣開發資料處理物件,到編寫COM元件時就要他們的命了。那些“精英們”大多不懂OOP,他們只懂“點”操作符號——仿佛對象的使用就是OOP,他們有什麼資格來批評我們呢?

Visual FoxPro的介面能力真的很差嗎?
我認為作為資料庫系統的開發工具微軟為我們提供的那些內置控制項加上十幾個附送的ActiveX控制項已經夠用了。

我們討論Visual FoxPro控制項應從兩方面入手,第一就是介面美觀問題,再就是資料處理、分析是否方便。很多人很在意的前一個問題,我倒是不以為然——控制項不多特別是美化介面的控制項不多並不代表Visual FoxPro就開發不出賞心悅目的軟體,我的感受是軟體介面的專業化程度、高級別的審美、整體的效果要比個別的介面特效重要千萬倍,實際效果可要好上千萬倍。看看國外用Visual FoxPro編制的程式您就會明白這個道理了;我對Visual FoxPro的不滿在於資料處理、分析控制項不全,特別是缺少了一批資料分析控制項。比如沒有可以與資料捆綁的圖表控制項、沒有可以列示捆綁交叉表的表格控制項、沒有可以捆綁資料的樞紐分析表格控制項……在這個問題上Visual FoxPro確實應該向Delphi、PB等軟體學習,這是我們對未來的Visual FoxPro的期望!

Visual FoxPro與OLE DB、ADO
ADO是Windows環境下主流的資料存取的解決方案,那些以物件運算元據的語言基本上都使用ADO實現資料存取,如:VC++、VB、Delphi。在Visual FoxPro的開發環境中好像看不到ADO的影子,是不是Visual FoxPro不支持ADO呢?ADO其實是一組COM物件,Visual FoxPro支援COM,當然支持ADO。

我認為:Visual FoxPro對ADO的支持只是停留在較低的水準。這並不是說Visual FoxPro限制了什麼ADO的功能(所有功能都能用),而是指:用起來不方便,不像在VB、Delphi中方便。這種不方便主要體現在ADO的Recordset無法與Visual FoxPro的內置控制項捆綁。其原因是:Visual FoxPro 不認識ADO的Recordset,只能將記錄逐條讀取,而不是一下子認得整個Recordset。這樣資料就不能被捆綁了,同時也不能對ADO直接使用Visual FoxPro強大的資料處理功能(ADO是用來存取資料而處理資料還要靠客戶軟體)。

就象Visual FoxPro使用ODBC連接遠端資料來源那樣,ADO通過OLE-DB與資料提供者對話。 (By the way: Visual FoxPro 7是OLE-DB提供者,這樣就可以 通過正宗的OLE-DB驅動程式在其他開發工具中使用ADO存取Visual FoxPro資料了。)

ADO能為Visual FoxPro帶來什麼?首先要注意的是:ADO與Visual FoxPro的資料引擎是毫無關係的系統,從某種程度上講ADO的出現為Visual FoxPro提供了一種全新的遠端資料處理方式。

ADO是多層應用程式中資料集合傳遞的最好解決方案。如果我們用Visual FoxPro開發了一個中間層系統,用VB開發了使用者介面,當中間層要傳遞一個cursor到VB的用戶端就不可以使用Visual FoxPro的cursor或DBF,因為VB不認得他們。使用ADO的Recordset就可以解決問題,因為大家都認得他;Visual FoxPro 只能通過Visual FoxPro 7支持XML後才能彌補Visual FoxPro本地引擎在應用程式傳遞資料集的不足。

ADO可以存取非關係型數據庫。ADO是微軟的Universal Data Access構架的主將,它可以存取Excel等非關聯式資料資料庫的資料。通過ODBC存取遠端資料的Visual FoxPro就無此能力了。但是我使用了ADO存取Excel後很失望,因為連接必須是獨佔的,所以這種功能帶給我們的幫助只是有限的!

ADO可以彌補Visual FoxPro在遠端資料存取時的不足之處。譬如Visual FoxPro不認得SQL Server中nText、nVarchar、nChar等資料類型,但ADO可以。

在Visual FoxPro使用ADO存在如下缺點:

Visual FoxPro只能通過COM的方式識別ADO的Recordset,不能像表格那樣讀寫它,這樣就出現了兩個問題:Recordset無法與Visual FoxPro的內置控制項捆綁;無法直接使用Visual FoxPro強大的資料處理功能(ADO是用來存取資料而處理資料還要靠客戶軟體)。

Visual FoxPro中使用代碼實現ADO的全部功能,但代碼量大、書寫麻煩。

對待以上不足Visual FoxPro開發小組在Visual FoxPro 6推出不久後就發佈了一個叫VFPCOM.DLL的元件,可以用它部分解決ADO的Recordset與Visual FoxPro的cursor的轉換和ADO事件的綁定,Visual FoxPro 更是內置支持COM事件綁定。在本文的第一版中,筆者曾有這樣的希望:“Visual FoxPro 更具效率的支援ADO”。現在我的看法有了一些改變,我認為在 Visual FoxPro 處理資料,無論是本地、還是遠端資料,無論是什麼構架的系統,最佳的解決方案認識內置的資料引擎,而不是現在流行的ADO,現在 Visual FoxPro對ADO的支持程度已經足夠了!

Visual FoxPro的資料引擎與ADO相比有什麼優勢呢?

Visual FoxPro資料引擎系統資源耗用小,ADO畢竟是COM組件要花用更多的資源。

作為系統共用元件,使用ADO可能會在不同應用系統中產生ADO的版本問題,這就像我們常遇見的ActiveX的控制項版本問題。

ADO只是資料存取元件,它沒有資料處理功能,要處理資料必須使用客戶應用程式,如VB、Delphi。Visual FoxPro資料引擎同時支援資料存取、資料處理,我已多次強調Visual FoxPro在這兩方面的偉大功能;

ADO沒有本地資料庫作為強大的支援,有需要將遠端資料暫時存放在物理檔中ADO絕對不及Visual FoxPro。Visual FoxPro的資料庫是桌面資料庫中最好的,遠端資料暫存其中不僅方便,而且伸縮性強。

使用ADO從資料來源獲得資料以後,再要對資料集合進行分組、查詢、匯總是非常麻煩的事情,但是Visual FoxPro支援對Cursor的資料處理,我們可以使用絕大多數XBase語言(除了ZAP和Pack之類的表維護語言之外),還可以對Cursor執行SQL語句——這種強大的威力,絕非ADO所能比擬。

開發單機程式時,絕對不要使用ADO,這樣做既沒開發效率也沒運行效率;開發C/S系統時我們應選用Visual FoxPro的SPT和Remote View,它們完全可以很完美的解決問題(已經有很多很多成功經驗),不需要捨近求遠地使用ADO;在中間層開發時,可以考慮使用ADO,我們為在此種情況下使用ADO的開發效率是蠻高的,因為這時所有的代碼都要我們用一句、一句的寫出來(在其他開發環境也一樣),Visual FoxPro的語法簡單再加上Visual FoxPro 7的極為強大Intellisense功能(真的很快並且可以由用戶自訂),也許我們還會占些便宜的。

雖然ADO與Visual FoxPro是完全無關的系統,但他們卻有共同的母親——FoxPro 開發小組,原來ADO的游標集(Cursor Engine)是他們開發的。如果你同時瞭解ADO與Visual FoxPro,你會發現ADO的很多思路與Visual FoxPro一模一樣……我總是拿這個典故說服那些不相信Visual FoxPro的人:最流行的ADO的游標集是FoxPro 開發小組寫的,有什麼理由懷疑Visual FoxPro的資料引擎——它是世界上最棒的!

Visual FoxPro是一種歷史悠久的產品,很多使用者是從FoxBASE到FoxPro到Visual FoxPro,這樣一步一步過來的。歷史的積澱多了,歷史的包袱也重了——許多程式師往往抓住老產品而忘了深入鑽研新產品的新特性,這是一種悲哀。

我遇到許多所謂會使用Visual FoxPro的人,還口口聲聲叫“Query Design”為“RQBE”,朋友那可是DOS時代的概念了。

很多人不仔細鑽研Visual FoxPro,只是從其他工具中看到某項功能,憑空想像就說:Visual FoxPro不支持的。Delphi中特別指出它有異構資料關聯能力,比如:父表是SQL Server資料,子表是Access資料,要求建立關聯,實現“一多關係”。在Delphi要求使用特別的SQL語法來實現該功能。Visual FoxPro的文檔裡好像沒特別說明這項功能,是不是沒有呢?如果你深刻理解Visual FoxPro的遠端視圖及Cursor的用法,答案很容易得到。事實上,用Visual FoxPro能更直接、簡單實現的實現:建兩條“連接”、兩個“遠端視圖”,對子表加索引,Set relation to,set skip to……

反過來Visual FoxPro能實現的功能,Delphi的BDE(Delphi的本地引擎)卻不能:Visual FoxPro的遠端視圖能夠將多個表關聯後的結果集設定為“可更新”,並在資料變動後自動產生Update子句分別更新後臺資料。例如:對SQL Server中Pubs資料庫建立連接,新建遠端視圖為:

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

這是四個表間的關係,算是比較複雜的SQL語句。別擔心,這一切在Visual FoxPro只不過是用滑鼠在“視圖設計器”點擊幾次就行了。在您對視圖進行“添加、刪除、修改”並發送更新時, Visual FoxPro會進行分析地智慧,產生Update字句分別將變化更新到後端若干個表中。而Delphi的BDE只能對Xbase資料來源有此的作用,對其他的資料來源都無此功能。Visual FoxPro可以支援所有的ODBC資料來源(只要資料來源本身支援),如:Oracle、SQL Server,Access……當然在Delphi 5.X中可以通過ADO彌補此缺陷,但Visual FoxPro同樣支持ADO。Visual FoxPro的程式師要有這樣的信心:Visual FoxPro為我們提供了最好的本地引擎!

古人雲:欲善其事、必先利其器。所以我們不要指責工具怎麼、怎麼,多看看自己用好了沒有!

Visual FoxPro與其他開發工具的比較
這其實是一個很傻的話題,選擇何種開發工具完全是由於程式師的面臨的任務以及個人的喜好決定的。只要您選用的工具能夠勝任您從事的專案,只要您對開發工具有足夠的造詣以應付多變、複雜的工作,只要這個工具還在繼續升級,您就沒有理由更換工具,更沒有必要摻和到這種無聊的討論中去。

任何工具都有其優勢與弱勢,產品定位更是各自不同,每個程式師都覺得自己的選擇是最好的,別人都是愚蠢的。以下的討論只是無聊的筆者發出的無聊的言論,您大可掠過不看。

談論Visual FoxPro,我們必須注意這樣一個問題:Visual FoxPro 是幹什麼用的。毋庸置疑,它是一種資料庫系統的開發工具。我個人認為,到目前為止在Microsoft公司的所有開發工具中,Visual FoxPro是開發資料庫應用程式的最佳產品。我們必須承認這樣的事實:從一開始,Visual FoxPro 就是為處理資料而設計的,它運行速度快、功能強大、而且非常靈活。

有很多人老喜歡拿Access與Visual FoxPro 比較,對此我總不屑一顧,且讓我們看看微軟的評論吧!微軟原話如下:“Microsoft Access 是 Office 中的資料庫,也是微軟所銷售的軟體中,使用最廣且最容易學習的資料庫工具。如果你是資料庫的新手,如果你要使用Microsoft Office來建立應用程式,或者你想要一個相當便利的互動式產品,那麼就選擇Access。Visual FoxPro 是用來建立關係型數據庫應用程式的一種功能強大的RAD工具。如果你是一位元以建立關係型數據庫應用程式維生的資料庫開發人員,而且你希望速度與功能都達到極限,那麼請選擇Visual FoxPro。”(這段話在今年Visual FoxPro 退出Visual Studio後,微軟又重複了一次,強調Visual FoxPro是專業開發人員的開發工具,而不是Access 那樣的普通用戶的辦公平臺。)

根據我的經驗,Access的MDB資料庫適用于20萬條/表的資料量的應用(它比Visual FoxPro資料庫的唯一長處是:所有的資料庫元件都在同一個MDB檔裡,而Fox的資料庫可能有多個檔組成,顯得淩亂。),資料量再增加的話,不是說Access不能處理了,而是效率不行了——查詢、索引都很慢。Visual FoxPro能處理百萬計甚至上千萬計的資料量,這都是有實踐根據,在過去的20多年裡,特別是大型網路資料庫沒有平民化的年代裡,業界就是依靠DBF資料表來管理資料的,毫不誇張Visual FoxPro是能夠安全、高效處理大資料量的專業工具。

有很多人拿Visual FoxPro與VB、Delphi甚至是VC++做比較,這是很幼稚的,後面三者是程式設計語言,而Visual FoxPro是資料庫系統的開發工具,天生分工就不同。

我聽說過這樣的典故:Foxmail最初是用Visual FoxPro編寫的(所以叫做FoxMail),後來改用Delphi編寫。如果這是事實就很能說明問題,Visual FoxPro是資料庫開發工具以它編寫郵件客戶軟體有點勉為其難,即使成功了效率也不會很高,但如果是一個用Visual FoxPro寫的管理系統中要求有郵件功能,Visual FoxPro則完全可以做得很好。

Visual FoxPro作為資料庫開發工具,它為我們提供了十分強健、高效的資料引擎,它容量大、速度快、靈活、健壯,所以用Visual FoxPro開發單使用者資料庫絕對比其他所有軟體來的高效——曾經有人嘲笑VB處理5、6萬條記錄就趴下,但我們的Visual FoxPro處理百萬條記錄也不覺吃力,所以Visual FoxPro的開發人員無論在什麼時候都要注意發揮Visual FoxPro的資料引擎的威力,這樣才能立於不敗之地。VC++很厲害,但真正地用好它不容易, 開發效率也不高。如果使用VC++開發應用程式還象VB那樣只會使用控制項,那麼還是別使用VC++了(這叫掛羊頭賣狗肉),再者Visual FoxPro本身是VC++編寫的,是歷代最優秀的程式師智慧的結晶,為什麼有了VC++還要花精力編寫Visual FoxPro,這本身就很說明問題。

又有人把Power Builder請出來與Visual FoxPro作比較,大家都是資料庫應用程式開發環境,好像PB比Visual FoxPro厲害。就資料庫系統的開發而言,Visial FoxPro可以開發單使用者系統、網路環境下的檔案伺服器系統、客戶機\伺服器系統、Web Server、資料處理的COM元件、Web Service,可以說除了Web介面無法開發之外,凡是與資料庫系統有關的開發領域Visual FoxPro都很好的支持。PB的起點在客戶機\伺服器系統,也能很漂亮的完成工作,此中取捨全憑個人喜好;另外,PB的成本很高。據我所知它的價格十分昂貴(有人戲稱說PB是世界五百強才用的起的產品),而Visual FoxPro才賣幾千人民幣。當然,這個觀點您可以不接受——在中國軟體是沒有價值的,每張只賣5元人民幣;還有PB的開發方式與眾不同,用了他以後再改學別的會比較困難;最後退一萬步講,您要變換程式設計工具,我也不贊成改用PB,因為PB再好也是一個資料庫開發工具,從這上面講與Visual FoxPro是一個級別的東西,您想變換工具一定有更多的需求,我看用C#或Delphi會是更佳的選擇。

所有這些語言與Visual FoxPro相比,最大的區別就是:Visual FoxPro是程式設計語言與DBMS的完美結合,而Vc++、Delphi、Vb、PB都只是程式設計工具,而不是DBMS。Visual FoxPro的這一特性,決定了它更合適與任何類型的企事業單位,我無法想像——為了簡單的查詢還要用Vc++、Delphi、Vb、PB編寫一個Exe檔,使用Command視窗多好!

又有人把網路資料庫如Oracle、SQL Server與Visual FoxPro相比較,說了Visual FoxPro一大通的壞話,這種人其實很傻,你大可對他嗤之以鼻。大型資料庫與桌面資料庫在系統開發中的作用是不一樣,兩者是相輔相成的。我們應該把注意力放在“怎樣發揮兩者資料庫引擎最高效能的問題上”,而不是去爭論孰優孰劣。這種爭論就好比是評論是男人漂亮、還是女人美麗那樣——毫無意義。  

Visual FoxPro 從Visual Studio 中分離出來了
2001年2月26日,微軟宣佈將Visual FoxPro 7從Visual Studio 中分離出來,這是一個好消息還是壞消息呢?我們來分析一下:

我們失去了什麼

我們先來觀察,Visual FoxPro不成為.Net語言,在技術上損失的是:不能開發基於.Net的Web應用程式。

Visual 是一種擅長于開發Web應用程式的工具,過去與現在微軟霸佔著"桌面應用程式"應用市場,現在微軟要吞噬現在由其他公司控制的大型網路應用市場,於是推出了.Net構架,Visual 就是開發基於.Net的應用程式的RAD(快速開發環境)。

筆者認為:起碼在可知的一兩年內,我們這些用Visual FoxPro寫程式的人不會有用Visual FoxPro開發大型Web應用需求,客觀上絕大多數企業也不會有自建一個電子商務網站的需求,我們並不會因為Visual FoxPro不是.Net語言而失去我們的市場——普通的企業級(單用戶構架、File Server構架、(兩層、三層)客戶機\伺服器構架)的應用。等.Net真正熱起來,那將是幾年後的事情了!

當然作為.Net語言也可以開發桌面應用程式,Visual FoxPro成為.Net語言不是更好嗎?筆者的看法是:不一定。一位網友說:的語法像VC++又像JAVA,已經完全不像BASIC語法了,等於是要重新學習另一套語言了,有這種感覺的VB程式師很多,聽說國外有很多VB程式師還“憂心忡忡”的。連微軟也承認:VB 6是差別很大的語言。

假設VB變化的只是語法特色(這已經夠厲害的),那麼如果Visual FoxPro現在成為.Net語言,其標誌性功能的損失一定比VB更多!我們認為:這其中最不能讓大家容忍的就是:Visual FoxPro的資料引擎和資料處理手段將損失殆盡,說實話我們中多數人使用Visual FoxPro就是看中了它在資料處理上的無與倫比優勢。.Net語言使用公共運行庫(Common Runtime Language),資料庫方面的功能是通過外掛ADO等元件完成的。在技術不成熟的現在,讓Visual FoxPro運行在CLR上,勢必只有三種選擇:取消Visual FoxPro的資料處理元件,讓它使用元件處理資料;把Visual FoxPro的資料引擎加入公共運行庫;Visual FoxPro的資料引擎做成一個元件。可見這三種選擇沒有一種是合理的,即使成了,那麼Visual FoxPro也就成為了一個四不像的東西。

Visual FoxPro
Visual FoxPro 能夠很好的支持XML、Web Service、COM。通過它們,Visual FoxPro就能整合在一起,並能開中最最熱門的話題:Web Services。

客觀上,有利於Visual FoxPro 的發展

Visual FoxPro作為Visual Studio的一員並不能很好的發展“Fox的事業”,這個觀點是各國狐友的普遍共識。作為Visual Studio的一員,Visual FoxPro更多的像其他Visual Studio產品看齊,忽視自身特色的發展,忽視用戶的需求;產品升級、服務包的提供週期變長(要等其他產品的完工),如果Visual FoxPro 7不分離出來,發佈期起碼要晚半年。將Visual FoxPro從Visual 中分離出來,最起碼以上兩個問題會有很好的改觀,特別是Visual FoxPro會更重視用戶的需求。

獨立面對挑戰

Visual FoxPro從Visual 中分離出來最大的壞處是:必須獨自面對市場。說白了就是:能不能賣的好?如果Visual FoxPro 7.0的生意還不錯,那麼Visual FoxPro就會發展的很好--這是很簡單的道理。

在微軟所有的開發環境中,Visual FoxPro是唯一內嵌資料引擎的——VC、VB都必須外掛資料處理引擎,如:DAO、ADO等,當然VC可以使用底層API調用來完成資料庫處理方面的任務——這就是Visual FoxPro的特色--為資料處理而生,但是如果現在盲目的把Visual FoxPro併入Visual 的話,Visual FoxPro的這一特色必然不能保存,這對微軟、對用戶都是損失。VB、VC則沒有這個問題--反正它們不內置資料引擎,只要.Net可以調用資料處理元件就可以了!

Visual FoxPro 7 的特性
前面已經提到多次,Visual FoxPro 7 已經在2001年5月中旬正式發佈的,6月份在美國上市。現在不少網友已經得到了Visual FoxPro 7的英語正式版,使用之後,產生了種種評判。在美國人們認為,Visual FoxPro 7是繼 Visual FoxPro 3以後 Fox 發展史上最具有“革命意義”的版本,評價是很高的;而在國內,不少嘗鮮者感歎:這是微軟不好意思說SP的產品,簡直就是Visual FoxPro 6+SP6……兩種評價相差這麼大,誰是誰非呢?

筆者在2000年底就得到了它的Bata 1版,2001年7月得到了英語正式版。初次見面確有失望之處——介面改觀太小了——除了幾個視窗可以停放、功能表上多了幾個圖示之外,幾乎與Visual FoxPro 6沒有區別,最無法容忍的是視覺化控制項一個也沒有增加……

我耐著性子讀著幫助瞭解Visual FoxPro 7的新特性,慢慢的我有了這樣的感受:有了Visual FoxPro 7我決不用Visual FoxPro 6,這也是我對Visual FoxPro 7的評判,雖然它不完美,有的地方不盡如人意,我還是覺得給它打個80分總是應該的。接下來筆者就談談使用的感受:

巨好的開發環境,這主要體現在六個方面:

IntelliSense(智慧感知輸入提示)、Object Browse、Document View、Task List(任務列表)、最近使用過的檔記錄、視窗停放。

IntelliSense。我以前常常羡慕VB程式師,他們在VB 5時就擁有了IntelliSense工具,於是他們不必要記憶大量的命令、函數、在對外來的ActiveX、COM程式設計時也能輕易的得到物件的方法、屬性、事件。

在Visual FoxPro裡,如果說記憶Visual FoxPro本身的東西還沒有什麼困難的話,對ActiveX、COM得屬性、方法、常量就頭疼了。現在Visual FoxPro 7支援IntelliSense了,並且提供了強大的用戶定義功能,在Visual FoxPro裡這是一個可組態的工具;現在Visual FoxPro 7不僅支援對內建物件、命令、函數的智慧輸入導航,更支援對ActiveX、COM的智慧輸入導航,令人興奮的是:Visual FoxPro的IntelliSense還支持最新的Web Service。完全可以自豪的說:Visual FoxPro的IntelliSense是最棒的,是可以由用戶定義的。

Object Browse。與IntelliSense一樣,在其他開發環境中早就有了,但並沒有因此降低我對它的興趣。首先,對COM物件、ActiveX的觀察工具確實很有用;最重要的是:Visual FoxPro 7的Object Browse與Visual FoxPro開發環境緊密結合在一起--可以很簡單的從Object Browse中拖逸COM物件介面到程式中,很簡單的就可以“實作”COM物件的介面。

Document View。這是一個程式編輯的輔助工具,它可以列出檔中所有的過程、方法、函數、巨集定義、標頭檔,説明程式師在大量代碼中快速導航。

Task List(任務列表)是一項貼心設計,它的功能有點像“書簽”。但比“書簽”強大的地方在於:一旦關閉檔“書簽”就釋放了,而Task List 不會。任何時候點擊Task List 專案就可以快速打開相關檔,導航到相關的地點。

就像Word那樣,Visual FoxPro會記憶用戶最近使用過檔,這樣就能減少用戶查找檔的時間。

窗口停放。顯示器越來越大、解析度越來越高,程式師的桌面空間越來越小——開發環境對內部工具表單的管理很要緊——合理組合,提供更大工作空間。在我用過的開發工具中,我最喜歡Visual FoxPro的環境配置,不滿意的是:命令視窗、資料工作期視窗、屬性視窗的淩亂。現在好了——Visual FoxPro 7支援了工具視窗停放,達到了節約空間的目的。

Visual FoxPro 7 對開發環境的改善有細微之處的變化、更有大部頭的作品。它吸收了各種開發環境的優點,融入了Fox自己的特色,值得稱道。

資料庫事件

Visual FoxPro 7 最亮麗的特色是60個左右的資料庫事件,這是自Visual FoxPro 3以來一次最大的對資料庫引擎的改善。這些事件對管理整個資料庫有很重大的意義,我們可以把維護資料庫的代碼寫在事件中,只要有相應的操作就會觸發,這樣就網羅了所有的相關動作,而不是像以前那樣寫在應用程式中!資料庫的事件應用面可能很廣,發揮它的作用還得靠大家的智慧!

XML與Web Service

Visual FoxPro 7支持XML文檔與Fox游標的轉換,真是一件令人興奮的事情,以前我們開發COM應用程式時總為資料集合傳遞感到頭疼——本人的解決方案是——模仿ADO的做法,讓客戶程式以迴圈的方式得到記錄集;當COM元件要得到記錄集時,好像就更麻煩了……現在好了,業界新標準——XML可以文本(字串)的方式傳遞資料集合,真是一件美事!

Visual FoxPro 7 支持XML,同時對SOAP也有內置的支持,這樣就使得Visual FoxPro 7成為.NET構架下的工具了,我們可以使用Visual FoxPro7輕鬆的開發、發佈Web Service,這樣我們的應用程式就可以在任何時間、任何地點被任何支援Internet的設備調用,為它們提供服務。

Web Service可是當前業界最最熱門的話題,Visual FoxPro是微軟公司推出的第一個能開發Web Service的工具。支援 Web Service,使得Visual FoxPro 程式師具備了開發新型分散式應用程式的能力。

COM以及COM+

COM元件開發的感覺特爽,不僅是開發效率的提高,更是COM元件運行的效果明顯改善。Visual FoxPro 是從5.0開始支援COM元件的開發,6.0版本開始走向成熟,6.0的SP3以後支援多執行緒元件的開發,7.0版本中開發COM元件明顯比6.0版本運行效果好,可以說是成熟、完美的技術了。

我以為Visual FoxPro 7對COM的支援可以分為兩個部分:Visual FoxPro充當COM的客戶程式、Visual FoxPro作為COM服務程式。

Visual FoxPro 7 支援COM組件的“Interface”實作,支持早期繫結。這都是偉大的革新,我們知道COM本身不支持“繼承”,所以我們無法寫出基於某個COM元件的“子類”,但我們可以通過“實作”COM元件的“Interface”,來實現多重“繼承”……

同時用Visual FoxPro 7編寫的COM元件,比以往任何一個版本的Fox都可靠,並且完全支援Windows 2000的COM+規範。微軟在宣傳Visual FoxPro 7時指出:Visual FoxPro的COM元件可以被用作工業現場的無介面資料處理,可見其穩定性。

Install Shield Express For Visual FoxPro

Install Shield 是主流的安裝程式製作軟體,在Visual FoxPro 7 裡微軟就用 Install Shield Express For Visual FoxPro 限制功能版代替了原先的安裝嚮導。更可貴的是,這個版本的Install Shield提供了中文語言包,也就是說可以生成中文介面的安裝程式了。有了Install Shield ,我們就能做出最合乎潮流的安裝程式。

新特性還有不少,您就自己看吧!還可以參看筆者撰寫的《Visual FoxPro 7漫談》一文。

軟體的升級對我們使用者是否有好處,主要是看他為您解決了多少難題、減輕了多少痛苦。Visual FoxPro 7對於高級用戶可能更有吸引力,當然普通用戶也一定會對它的超級開發環境有興趣。

Visual FoxPro 7 SP1
2002年1月16日,微軟發佈了Visual FoxPro 7的SP1。這是一個徹底的補丁包——幾乎沒有推出任何新特性。

加裝SP1能夠改善Visual FoxPro 7對XML的支援,根據筆者測試,再不安裝SP1的時候,XMLTOCURSOR()函數無法正確解析中文字元,而安裝了SP1以後,這個問題就解決了!

我們的 Visual FoxPro 8
當我們還在討論Visual FoxPro 7的時候,Visual FoxPro 8已經向我們走來了!

Visual FoxPro 8的產品代號是“Toledo”,是由FoxPro社區選出來的。

已經看到的Visual FoxPro 8 的新特性

2001年9月初,在美國舉行的“VFP DevCon 2001” 會議中,微軟Fox小組成員召集了名為“Visual FoxPro 7.0 and Beyond”的主題演講,Calvin Hsia 為到會的開發人員演示了幾個已經完成的Visual FoxPro 8的新特性,雖然都是些不大的改進。筆者個人覺得2003年Visual FoxPro 8將正式發行,但至於那是他叫不叫Visual FoxPro 8我就不知道了,也許微軟會為它改個名字……

支持自增長欄位。

用一個屬性實現,表格控制項當前行的突出色彩現實,並且在表格失去游標時,依然高亮度顯示當前行。

頁框控制項的得頁標頭支持上、下、左、右四個方位的放置。

控制項的ToolTip支援多行顯示。

所有控制項支援Windows XP的介面風格。

微軟對Visual FoxPro 8的定位
在 FoxPro Advisor 雜誌裡,有一篇名為《Memo from Microsoft》 的文章,登載了微軟Visual FoxPro 產品經理 Ken Levy 對2002年 Visual FoxPro 發展的計畫,其中專門提到了Visual FoxPro 8 的產品定位,原文是:

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 將在用戶端開發上做重大的改進、加強,這與當年微軟對 Visual FoxPro 5、6 的定位截然不同——強調Visual FoxPro 在Visual Studio中的作用,強調Visual FoxPro開發中間層應用、COM元件。現在Visual FoxPro 離開了Visual Studio,產品重新定位,順應開發者的需求,提出了 Rich Client(胖用戶端)定位!

還有就是Visual FoxPro 8可能可以開發Web Form了,也就是所謂的 distributed Web client features。

Visual FoxPro 8 不會是.Net語言

Ken Levy 還表示,Visual FoxPro 8將堅持現有的體系構架,而不會運行在.NET common language runtime (CLR) engine 上,成為.Net語言。

我對Visual FoxPro 8 的期望
以下只是筆者一家之言。

遠端資料訪問

Fox歷史上的每一次重要升級都與資料引擎有關,比如2.0時加入了內置的SQL語句和Rushmore技術;3.0時提出了完整的資料庫概念,加入了遠端資料處理的技術;7.0推出了資料庫事件的概念。筆者以為,Visual FoxPro 8可能在遠端資料的處理上有改進,我們知道現在的Visual FoxPro是通過ODBC對遠端資料實現訪問的,ADO主要使用OLE DB來訪問遠端資料,PB這樣的軟體更是有底層通道訪問各種主流資料庫;最新的中,微軟更增加了對SQL Server 7.0及2000的直接(底層)訪問,當然對其它資料庫仍然採用OLE DB來訪問。現在我們在Visual FoxPro中,要想通過OLE-DB訪問遠端資料必須使用ADO元件,但從實際應用來看ADO並非是Fox訪問遠端資料的主流方法,所以Visual FoxPro 8 應該會在訪問遠端資料方面提出更加具備效率的方法:或是對SQL Server的底層通道,或是使用OLE DB連接到遠端資料……(哈哈,這時我去年寫的,今年已經從微軟得到證實:Fox 小組正在改進Visual FoxPro與SQL Server的通訊。看來,我的感覺蠻准的!)

無論訪問怎麼通道變化,對用戶是感覺不到的,就像現在用戶感覺不到我正在通過ODBC連接SQL Server的資料一樣,只是效果更好。(注:ODBC仍然是絕對主流、穩定的遠端資料訪問方式,只是速度略微慢於OLE DB;但它的相容性絕對好於OLE DB下的ADO。所以未來的幾年中ODBC仍然是值得信賴的遠端資料訪問的解決方案,特別是Visual FoxPro用戶)。

當然,隨著Fox用戶越來越多的使用SQL Server作為後臺資料庫,Visual FoxPro 8 會在加強開發環境,例如:資料字典,使用者可以方便的查看、維護資料來源的表、視圖、存儲過程、觸發器等物件,以提高開發效率。

報表工具

Visual FoxPro 8將會對報表工具進行大幅度的改進,首先是將報表最為一個物件處理,是報表變得很容易訪問、控制;再就是提升報表的性能,例如多細節帶區報表……;報表預覽更自由,預覽視窗將不再是強制回應視窗,由於視窗可以是任意指定的表單……;報表顯示的資料可以與報表一起保存,這樣報表就可以作為一份歷史文檔……

當然,微軟也有可能將Crystal Report內置到Visual FoxPro裡去,但我堅信:Visual FoxPro 8一定會在報表問題上給我們一個答覆!

調用API更方便

我覺得直接調用API不是最佳的程式設計方法,但有時沒有辦法,只得調用。Visual FoxPro 8會支援“結構”這樣的資料類型,可視控制項都會帶有控制碼屬性,這樣就可以在Visual FoxPro中簡便的使用API的各項功能,不像現在明明是很常見的API調用,在Visual FoxPro中卻很麻煩……

介面的改進

我直言不諱:Visual FoxPro的介面效果簡直是微軟的恥辱!如果Visual FoxPro 8在這方面會為我們帶來一些清新空氣的話,這裡有兩種可能:我想微軟會在現有的基礎上升級整個介面以及內置的視覺化控制項,使他們符合Window的發展潮流,更規範、更流行;也可能Visual FoxPro 8將加入.Net系統,繼承那個公共運行庫提供的美好的介面。筆者以為:如果微軟準備改善Visual FoxPro難看的介面,採取第一種方案的可能更大。(哈哈,我有猜得差不多!)

以上的猜想(更是美好的願望)在加上編譯加密的願望可能是所有用戶對微軟的期望,就讓我們看看,微軟會為我們帶來什麼吧!

選擇Visual FoxPro
筆者是一名程式師,不是搞行政的、做推銷的,說話辦事總講個實在、一就是一、虛誇是不喜歡的。說心裡話,Visual FoxPro在它的應用領域既不像那些大吹大擂的人說的那樣神奇、世界第一,更不像社會上那些一知半解、不懂裝懂的人講的那樣不濟,我的觀點是用好Visual FoxPro足以與任何當前流行的開發工具抗衡,其中關鍵是:您是不是高手,您是不是把Visual FoxPro用在了它合適的領域。

我們為什麼選擇Visual FoxPro作為我們的開發工具,因為他對我們有用,別的工具對我們來說用的沒有它的得心應手,用了Visual FoxPro我們能夠開發出經得起比較、經得起市場風浪、經得起生產實踐考驗的系統,這對我們來說就足夠了!!!

在本文的即將結束之際,筆者想讓大家看看用亞馬遜網站(www.)上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 發表了關於 Visual FoxPro 7.0的講話。他除了介紹Visial FoxPro 7的新特性之外,還代表微軟承諾:微軟將繼續推動Visual FoxPro的發展,為全球開發人員提供更好的支援!

原文如下:

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.

因此,我們的看法是:如果你想開發出色的應用程式並想保護你的投資,那麼選用Visual FoxPro准沒錯。

授人以渔,不授人以鱼。
2011-07-15 18:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
重覆内容刪除

[ 本帖最后由 TonyDeng 于 2011-7-17 18:42 编辑 ]

授人以渔,不授人以鱼。
2011-07-15 18:16
muyubo
Rank: 9Rank: 9Rank: 9
来 自:山东莱芜
等 级:蜘蛛侠
威 望:3
帖 子:471
专家分:1017
注 册:2011-3-6
收藏
得分:0 
支持Visual FoxPro
2011-07-15 19:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其實,我很久沒寫Fox程序了。以前最開始是用FoxBase,後來轉用一種可以編譯成EXE的仿dBASE(語法是dBASE和C混合)的數據庫語言,與C++搭配使用,然後一跳就到VFP9。早些時候,我還在爲自己仍用Fox類語言覺得驚奇,感覺現在應該沒多少人用了,但到這裏一看,居然還有不少人在用,總算有點安慰,呵呵~不過我想,這裏三分之二左右是學生吧?專門針對作業的問題可是佔大頭。

現在學校考VFP6的,教材仍在講舊式FoxBase的思維,無法發揮VFP的強大威力,我想那些學生,無非是爲混個文憑罷了。

眞正用VFP搞工作的,有多少人呢?統計一下,應該有點意思。

授人以渔,不授人以鱼。
2011-07-15 19:35
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
支持楼主的见解!对于去除某些赶时髦、跟风、不且实际应用、或无知状态的人的想法,的确很重要。各种语言都有其侧重,关键要看干什么事。不同的工具会有不同的用途。不能因为流行的网站技术,来否定桌面的复杂数据、多重的事物的处理技术。后者的用途是前者替代不了的。直到目前为止,VFP 在后者的能力上仍然领先。
2011-07-16 00:26
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
呵呵,你的帖子又发重复了。仔细看完了整篇文章,对VFP有了更深的了解,虽然有些涉及到COM、API、ADO之类的看不懂。
其实现在国内用VFP的人还是有不少人的,梅子论坛,CSDN里面就可以看到很多以此为职业的程序员,当然,学生也很多,不过这并不是什么坏事,我当学生的时候学习过VFP,所以现在工作要用首先想到的也是VFP。VFP现在还是作为计算机二级考试备选科目,这也无形中为VFP积攒了更多的用户。
2011-07-16 21:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
COM、API、ADO之類的其實是細枝末節。

VFP7相對於VFP6的革命性改變,是終于朝真正的面向對象語言靠攏了一大步,剩下需要補充的不多了,可以滿足編程要求,這是我當時沒有採用VFP6的主要原因。VFP8的改進,是視圖卡控件(CursorAdapter),它將以前各種各樣訪問遠程數據庫的技術細節,封裝起來呈現出與訪問本地數據一樣的編程接口,這樣原先針對本地數據的程序就可以很容易地轉換為遠程訪問形式,這主要得益於VFP7改進的面向對象語言技術,在VFP6,這是非常難實現的目標;其次是語言方面的小改進,增加了對象實例化後仍然可以編寫該對象專用方法的語法(BINDEVENTS()函數),這樣就方便某些不喜歡編寫自定義類代碼的人在程序運行過程中臨時掛靠一段方法代碼,以及各種各樣稀奇古怪的需求,這個語法也提供了用代碼主動激發某些事件的能力。VFP9在語言和數据庫方面的改動不大,只是加強了報表對象的功能,這與其新提供的GDI+圖形接口有關,ReportListener是調用GDI+函數生成報表的,所以能夠更精確、更隨心地編寫千變萬化的報表。

因此,VFP6與VFP7的差異是本質上的,前者基本上是結構化語言的極限,後者卻是成功轉向面向對象語言的開始,從此VFP的編程思維,可以與C++統一了——除了無法進行算符和命令的重構,VFP具備面向對象語言所必需的技術條件。壇上有人問過VFP6和VFP9的差別到底在哪?我說就在這裡!

面向對象的數據庫,在計算機界仍然是一種美好目標,目前還未實現,不過,這應該是VFP未來的發展方向,如果它搶先一步推出這種技術,前途無可限量。

[ 本帖最后由 TonyDeng 于 2011-7-17 14:48 编辑 ]

授人以渔,不授人以鱼。
2011-07-17 14:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
VFP内嵌的SQL語言,屬於所謂的第四代語言,是VFP在自己的内核引擎之外加挂的數據庫處理功能,正如主帖文章所說,VFP已經成功地把兩者結合在一起(不過由此引起的不兼容性作者並無提及,即VFP9擴張了的SQL語法特性,只能在VFP中使用,不是標準SQL語法,拿到別的數據庫上運行,如SQL Server等,可能被認爲是不合法的語句)。SQL是面向數據集的,但VFP自身的數據庫引擎是面向記錄的,它們的差別請參閲主帖相關論述。VFP提供兩种數據庫處理引擎,是爲了提高靈活性,不是爲了讓編程人員改用SQL語法取代其自身的數據庫處理語法。

第四代語言有優越性,我想無需贅述,但它有什麽缺點,卻未必為大家熟知。根據1988年的國家軟件開發規範和相關指南資料介紹,第四代語言有如下缺點:

1.缺少統一的行業標準,各式各樣的第四代語言產品花樣繁多,此外,所連接的數據庫管理軟件往往也不同。因此使用這些第四代語言來開發的應用不易移植。
2.第四代語言的嚴重缺點是“狠吃”計算機資源。它比第三代語言多消耗50%到150%的CPU和磁盤資源,這在一定程度上抵消了使用第四代語言帶來的生産效益。
3.運行效率低,響應時間長,而且,如不很好控制應用的增長,會危害公共數據庫的完整性。
4.它不宜於科學計算,不宜於高速實時需求的應用系統。也不宜於開發複雜的大容量的應用系統,因爲要求過多的過程邏輯,必然減少第四代語言提供的繌的生産效益。

對上面四點,我分別補充如下:
1.現在幾乎是由SQL規範第四代數據庫語法了,但必須盡量用ANSI標準的語法,這將犧牲VFP9給我們的更強大的功能。
2.當代硬件資源基本上不成問題,但作爲環保思維,還是要考慮這方面因素的。
3.SQL查詢操作在磁盤上生成大量的臨時文件,這是很嚴重的隱患,硬盤垃圾數據將會因此迅速龐大,超越服務器限制的空間,垃圾數據不及時處理,也同樣會洩露信息。
4.其實不用大容量的複雜應用系統,昨天lyxc34提出的那個查詢問題,就幾乎是SQL無法處理的,即使處理了也未必那麽如意。

[ 本帖最后由 TonyDeng 于 2011-7-17 16:09 编辑 ]

授人以渔,不授人以鱼。
2011-07-17 15:52
Bunny008
Rank: 1
等 级:新手上路
帖 子:185
专家分:6
注 册:2011-7-27
收藏
得分:0 
依稀记得以前数据库课本上学SQL Server的时候提到过FoxPro,pascal,delphi 然后就一带而过了。不过现在工作需要用它,才开始慢慢啃,小辛苦的~ 不知道哪里有好的实例教程之类的可以学习
2011-07-29 00:30
快速回复:【轉貼】Visual FoxPro 漫談
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031128 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved