Microsoft Visual FoxPro

Visual FoxPro は、マイクロソフトが開発販売しているデータ中心型オブジェクト指向/手続き型プログラミング言語である。1984年、Fox Softwareが開発した FoxPro（当初の名称は FoxBASE）から発展した製品である（Fox社は1992年にマイクロソフトに吸収合併された）。

**歴史**

**FoxPro**
FoxPro はテキストベースの手続き型プログラミング言語でありDBMSである。当初 Fox Software が開発販売し、後にマイクロソフトに引き継がれた。対応プラットフォームとしては、MS-DOS、Microsoft Windows、Macintosh、UNIX があった。
FoxPro は一般に「xBase言語」と呼ばれる言語の一種であり、その文法はdBASEプログラミング言語に基づいている。xBase言語とされるものには他に Clipper がある。xBase言語の初期の歴史については、dBASEを参照。
FoxProはデータベース管理システムだが、表間の関係をサポートしていない。つまり、関係データベースではないし、トランザクション処理能力もない。
最終版はFoxPro 2.6で、それ以降はVisual FoxProに引き継がれた。既に販売終了していてマイクロソフトもサポートしていないが、FoxProユーザーのコミュニティは現在も活動中である。FoxPro 2.6 for UNIX (FPU26)はIntel Binary Compatibility Standard (ibcs2) サポートライブラリを使ってLinuxやFreeBSDにインストール可能である。
FoxPro 2では、"Rushmore" という最適化エンジンが搭載され、データ検索や更新が高速化されている。Rushmoreは全てのデータ関係文を調べてフィルタ式を探し出す。フィルタ式が使われると、同じ式にマッチするインデックスを探す。また、FoxPro 2は当初WatCOM C++で書かれており、これには自前のメモリ拡張機能（当時の最新技術）があった。FoxPro 2は拡張メモリにアクセスでき、DOSが管理可能なほぼ全てのメモリを使うことができた。HIMEM.SYSがロードされていない場合、FoxPro 2は自前の拡張機構を起動するようになっていた。

**Visual FoxPro**
Visual FoxProとしての最初のバージョンは3.0で、対応プラットフォームはMacintoshとWindowsのみに限定され、さらに後のバージョンではWindowsのみとなった。現在のVisual FoxProはCOMベースであり、マイクロソフトはMicrosoft .NET版を開発する予定はないとしている。
Visual FoxPro（VFPと略記されることが多い）は関係データベースエンジンと密に結合されている。この関係データベースはFoxProのxBase機能を拡張し、SQLクエリ/データ操作を追加サポートしている。多くのデータベース管理システムとは異なり、Visual FoxProは完全な動的プログラミング言語であり、追加の汎用プログラミング環境を必要としない。ファットクライアントのアプリケーション開発だけでなく、ミドルウェアやウェブアプリケーションも開発可能である。

**最近の動向**
2002年末、Visual FoxProをWineを使って Linuxで利用可能であることが示された。2003年、これを受けてマイクロソフトはWindows以外の上でFoxProを動作させることはライセンス契約に違反していると指摘した。
2005年12月、TIOBEの Programming Community IndexにVFP（正確にはFoxPro/xBase）が初めて上位20位以内にランキングされた。2007年3月には19位、2007年8月には22位、2008年4月には17位と推移している。
2007年3月、マイクロソフトはVFP 10は開発されないことを発表した。従って、2004年12月17日にリリースされたVFP 9が最後の商用バージョンとなる。VFP 9 のサポートはサービスパックの形式で行われている（2005年12月と2007年10月にリリース）。
その発表と同時に、開発されていた次期バージョンSedna（コード名）が発表された。これはVFP 9へのアドオンであり、SQL Server 2005、.NET Framework、Windows Vista、Office 2007、Windows Search、Team Foundation Server (TFS) などとの連携機能をサポートしている。マイクロソフトはこれをシェアードソースライセンスでCodePlex上でリリースした。ただし、VFPの中核部分は依然としてクローズドソースである。Sednaのリリースは2008年1月25日に行われた。2008年3月現在、VFP 9 SP2（Sednaを含む）のXBaseコンポーネントは全てCodePlexから開発用に利用可能である。
2007年3月、FoxProのスペイン語コミュニティ MasFoxProで草の根運動が始まり、マイクロソフトに対してVisual FoxProの開発継続か全ソースのオープンソース化を求める活動を展開した。2007年4月3日、この運動は業界メディアでも報道された。これに対してマイクロソフトは2007年4月3日、声明を発表した。それによると、新たなバージョンは開発せず、2015年までサポートを継続するとのこと。また、オープンソース化については最善の選択としているが、中核部のオープンソース化の具体的な予定は発表されていない。

**バージョン情報**

**FoxPro**

**Visual FoxPro**

**コード例**
Hello World の例:
MESSAGEBOX("Hello World")

**オブジェクト**
loForm = CREATEOBJECT("HiForm")
loForm.Show(1)
DEFINE CLASS HiForm AS Form
AutoCenter = .T.
Caption = "Hello, World"
ADD OBJECT lblHi as Label WITH ;
Caption = "Hello, World!"
ENDDEFINE
loMine = CREATEOBJECT("MyClass")
? loMine.cProp1   && これは動作する（'&'が2つで行末までコメント）
? loMine.cProp2   && プログラムエラー: Property CPROP2 is not found.
? loMine.MyMethod1()  && これは動作する。
? loMine.MyMethod2()  && プログラムエラー: Property MYMETHOD2 is not found.
DEFINE CLASS MyClass AS Custom
cProp1 = "My Property"    && パブリック・プロパティ
HIDDEN cProp2     && プライベート・プロパティ
PROCEDURE Init()    && クラス・コンストラクタ
This.cProp2 = "This is a hidden property."
ENDPROC
PROCEDURE MyMethod1()- This is a public method, calling a hidden method that returns- the value of a hidden property.
RETURN This.MyMethod2()
ENDPROC
HIDDEN PROCEDURE MyMethod2()  && プライベート・メソッド
RETURN This.cProp2
ENDPROC
ENDDEFINE

**データハンドリング**
&& テーブル生成
CREATE TABLE randData (iData I)
&& xBase と SQL DML コマンドを使ってランダムなデータを格納
FOR i = 1 TO 50
APPEND BLANK
REPLACE iData WITH (RAND() * 100)
INSERT INTO randData (iData) VALUES (RAND() * 100)
ENDFOR
&& データ上に構造化インデックスを配置
INDEX ON iData TAG iData
CLOSE ALL
&& xBase風コマンドでソートしたデータを表示
USE randData
SET ORDER TO iData
GO TOP
LIST NEXT 10  && First 10 
SKIP 81
LIST NEXT 10  && Last 10
CLOSE ALL
&& SQL DML コマンドでソート済みデータをブラウズ
SELECT * ;
FROM randData ;
ORDER BY iData DESCENDING

**SQLパススルーを使ったODBCアクセス**
&& ODBCデータソースに接続
LOCAL nHnd
nHnd = SQLCONNECT ("ODBCDSN", "user", "pwd")
&& SQL コマンドを実行
LOCAL nResult
nResult = SQLEXEC (nHnd, "USE master")
IF nResult 

**脚注**

**外部リンク**

**マイクロソフト**
  Main Visual FoxPro Microsoft page-  MSDN FoxPro support board-  VFP's online help file-  Microsoft VFP 9 support-  Visual FoxPro Essential Downloads page

**その他**
  Visual FoxPro Wiki -  A site devoted to the history of FoxPro
**  History of FoxPro - Timeline-  Using Win32 (WinAPI) functions in Visual FoxPro-  User-defined functions Visual FoxPro (written in C)-  VFPx VFP 9.0 のオープンソースのアドオンを開発しようとしているコミュニティ-  ProFox VFP関連のメーリングリスト-  Virtual FoxPro User Group-  Microsoft: FoxPro (old versions 1 to 2.6) Forum-  FoxPro FAQs