| ビジュアルフォックスプロ | |
|---|---|
Windows XPで動作する Visual FoxPro v9 | |
| 開発者 | マイクロソフト |
| 最終リリース | |
| オペレーティング·システム | Windows 2000、Windows XP、Windows Server 2003 [ 3 ] |
| プラットフォーム | IA-32 [ 4 ] |
| 入手可能な | IDE:英語、ドイツ語、スペイン語ランタイム:上記に加え、フランス語、中国語、ロシア語、チェコ語、韓国語 |
| タイプ | 統合開発環境、プログラミング言語 |
| ライセンス | 商用プロプライエタリソフトウェア |
| Webサイト | msdn |
Visual FoxProは、 Microsoftによって開発されたプログラミング言語です。オブジェクト指向プログラミング(OOP)機能 を備えた、データ中心かつ手続き型のプログラミング言語です。
これは、1984年以降Fox Software社によって開発されたFoxPro(FoxBASEから派生)から派生したものです。Fox Technologies社は1992年にMicrosoft社と合併し、その後、このソフトウェアはさらに多くの機能と接頭辞「Visual」を獲得しました。 [ 5 ] FoxPro 2.6は、 Mac OS、DOS、Windows、Unixで動作しました。
最初の「ビジュアル」バージョンであるVisual FoxPro 3.0では、サポートプラットフォームがMac [ 6 ]とWindowsのみに縮小され、その後のバージョン5、6、7、8、9はWindowsのみとなりました。Visual FoxProの現在のバージョンはCOMベースであり、MicrosoftはMicrosoft .NETバージョンを開発する予定はないと表明しています。
2004年12月にリリースされ、2007年10月にSP2パッチでアップデートされたバージョン9.0が製品の最終バージョンとなった。サポートは2010年1月に終了し、2015年1月に延長サポートが開始された。[ 7 ]
Visual FoxProは、 dBaseプログラミング言語に基づいた構文を持つ、一般的に「 xBase 」言語と呼ばれる言語クラスの一員として誕生しました。xBase言語ファミリーの他のメンバーには、 ClipperやRecital(データベース)などがあります。
Visual FoxPro(一般的にVFPと略される)は、独自のリレーショナルデータベースエンジンと緊密に統合されており、FoxProのxBase機能を拡張してSQLクエリとデータ操作をサポートします。多くのデータベース管理システムとは異なり、Visual FoxProはフル機能の動的プログラミング言語であり、追加の汎用プログラミング環境を必要としません。従来の「ファットクライアント」アプリケーションだけでなく、ミドルウェアやWebアプリケーションの作成にも使用できます。
2002年後半、Visual FoxProがWindows互換スイート「Wine」を用いてLinux上で動作することが実証されました。2003年、Microsoftはこれに対し苦情を申し立てました。Windows以外のマシンにFoxProのランタイムコードを展開することは、エンドユーザーライセンス契約に違反すると主張したのです。[ 8 ]
Visual FoxProの人気は、 TIOBEプログラミングコミュニティインデックスで測定すると、急激に上昇と下降を繰り返した。[ 9 ] 2005年12月、VFPは初めてトップ20にランクインした。2006年6月には12位まで上昇し、当時は「B」言語とされた。2025年5月現在、Visual FoxProはTIOBEインデックスで29位に位置している。[ 10 ]
2007年3月、マイクロソフトはVFP 10はリリースしないと発表しました。[ 11 ]これにより、VFP9(2004年12月17日に製造部門にリリース)がマイクロソフトからの最後の商用VFPリリースとなりました。Microsoft Visual FoxPro 9.0のService Pack 2は2007年10月16日にリリースされました。[ 12 ]バージョン9のサポートは2015年1月13日に終了しました。[ 7 ]
サポート終了の発表時点では、VFP9 コードベース上に構築された、コードネーム Sedna (最近発見された準惑星にちなんで名付けられた) という次のリリースの作業が既に開始されていました。「Sedna」は、 SQL Server 2005、.NET Framework、Windows Vista、Office 2007、Windows Search、Team Foundation Server (TFS) など、さまざまな Microsoft テクノロジとのいくつかの相互運用シナリオをサポートするための、xBase コンポーネントの VFP 9.0 へのアドオンのセットです。Microsoft は、 CodePlexサイトで共有ソースライセンスの下で Sedna をリリースしました。Microsoft は、VFP コアは引き続きクローズド ソースのままであると明言しました。Sedna は 2008 年 1 月 25 日にリリースされました。[ 13 ] 2008 年 3 月の時点で、VFP 9 SP2 のすべての xBase コンポーネント (Sedna を含む) が CodePlex でコミュニティ開発に利用可能でした。
2007年3月下旬、スペイン語圏のFoxProコミュニティがMásFoxPro [ 14 ](英語では「MoreFoxPro」)で草の根運動を開始し、Microsoftに対しVisual FoxProのアップデートを継続するか、オープンソースとしてコミュニティに公開するよう求める嘆願書に署名を求めた。2007年4月3日、この運動は技術系メディアで取り上げられた。[ 15 ]
2007年4月3日、マイクロソフトはアラン・グリバー氏の声明でこの請願に応えた。[ 15 ]
「私たちはFoxProコミュニティのことを非常によく理解しており、それが3月13日の発表に大きく影響しました。製品の次バージョンをリリースしないことを発表するのは決して容易な決断ではなく、非常に慎重に検討した上での決断です。」
FoxProの終了を発表するわけではありません。もちろん、FoxProアプリケーションは引き続き動作します。社内の推計によると、FoxPro 2.6で動作するアプリケーションの数はVFPで動作するアプリケーション数を上回っており、FoxPro 2.6は長年サポートされていません。Visual FoxPro 9は、2015年までMicrosoftによってサポートされます。
マイクロソフトがFoxProベースの進化を継続していくためには、64ビット開発環境の構築を検討する必要がありますが、これにはコア製品のほぼ完全な書き換えが必要になります。また、SQL Server(無償提供のSQL Server Express Editionを含む)を使用したスケーラブルなデータベースの構築にも投資してきました。サードパーティとの提携に関しては、多くの大手FoxPro顧客から、承認ベンダーの製品ではなくなるため、FoxProを使い続けることが不可能になるという声が寄せられています。コミュニティと大手顧客の両方のニーズをバランスよく満たすCodePlex上でオープンソース環境を構築することが、今後の最善の道だと判断しました。
記載されているバージョンはすべてWindows用です。[ 16 ]
| バージョン | 発売日 |
|---|---|
| ビジュアルフォックスプロ3.0 | 1995年6月 |
| ビジュアルフォックスプロ5.0 | 1996年10月 |
| ビジュアルフォックスプロ5.0a | 1997年10月 |
| ビジュアルフォックスプロ6.0 | 1998年5月18日 |
| ビジュアルフォックスプロ7.0 | 2001年6月27日 |
| ビジュアルフォックスプロ8.0 | 2003年2月1日 |
| Visual FoxPro 8.0 サービス パック 1 | 2003年10月7日 |
| ビジュアルフォックスプロ9 | 2004年12月20日 |
| Visual FoxPro 9 サービス パック 1 | 2005年12月8日 |
| Visual FoxPro 9 サービス パック 2 | 2007年10月16日 |
FoxPro 言語には、BASIC などの他のプログラミング言語と非常によく似たコマンドが含まれています。
基本的な構文のサンプルをいくつか示します。
FOR i = 1 ~ 10 x = x + 6.5 NEXT && 「NEXT」の代わりに「ENDFOR」も使用できます。i = 25 の 場合、i = i + 1 の 場合、そうでない場合、i = i + 3 の 場合、ENDIFx = 1 DO WHILE x < 50 x = x + 1 ENDDOx = 1 DO WHILE .T. x = x + 1 IF x < 50 LOOP ELSE EXIT ENDIF ENDDOnMonth = MONTH ( DATE ()) DO CASE CASE nMonth <= 3 MESSAGEBOX ( "Q1" ) CASE nMonth <= 6 メッセージボックス( "Q2" ) CASE nMonth <= 9 メッセージボックス( "Q3" ) それ以外の場合、メッセージボックス(「Q4」) ENDCASEFOR EACH oコントロールIN THISFORM .Controls MESSAGEBOX (oコントロール.Name ) ENDFORf = 階乗(10) 関数階乗(n) ローカルi, r r = 1 FOR i = n TO 1 STEP -1 r = r * i NEXT && ここで「NEXT」の代わりに「ENDFOR」を使用することもできますRETURN r ENDFUNCHello World の例:
* 現在の場所での出力 ?「Hello World」* 指定された場所に出力 @ 1,1 SAY "Hello World"* 別のウィンドウに出力され、入力時にクリアされますWAIT WINDOW "Hello World"* 標準ダイアログボックスに出力され、OKでクリアされますMESSAGEBOX ( "Hello World" ) 
* 定義されたウィンドウに出力loForm = CREATEOBJECT ( "HiForm" )loForm .表示( 1 )クラスHiForm をFormとして定義するオートセンター= . T .キャプション= "Hello, World"オブジェクトlblHi をラベルとして追加します。キャプション= "Hello, World! "ENDDEFINEloMine = CREATEOBJECT ( "MyClass" ) ? loMine.cProp1 && これで動作します。(二重アンパサンドは行末コメントを示します)? loMine.cProp2 && プログラム エラー: プロパティ CPROP2 は外部に隠されているため見つかりません。? loMine.MyMethod1() && これは動作します。? loMine.MyMethod2() && プログラム エラー: プロパティ MYMETHOD2 は外部的に隠されているため見つかりません。クラス MyClass をCustomとして定義するcProp1 = "My Property" && これはパブリックプロパティですHIDDEN cProp2 && これはプライベート(隠し)プロパティですdProp3 = {} && 別のパブリックプロパティ手順Init() && クラスコンストラクタこの.cProp2 = "これは非表示のプロパティです。"手順dProp3_Access && プロパティゲッター返却日() PROCEDURE dProp3_As sign (vNewVal) && プロパティセッターはプロパティ名に「_assign」タグを使用しますIF VARTYPE (vNewVal) = "D"これ.dProp3 = vNewVal ENDIF手順MyMethod1() * これはパブリックメソッドであり、戻り値を返す隠しメソッドを呼び出します。* 隠しプロパティの値。これを返す.MyMethod2() 隠しプロシージャ MyMethod2() && これはプライベート(隠し)メソッドですこの.cProp2 を返すENDDEFINEこの言語には、データベース操作とインデックス作成のコマンドが豊富に用意されています。VFP 9のコマンド一覧「ヘルプ」には、数百ものコマンドと関数が解説されています。以下の例は、テーブルの作成とインデックス作成のコーディング方法を示していますが、VFPにはテーブルビルダーとデータベースビルダーの画面が用意されており、コードを書かずにテーブルとインデックスを作成できます。

* テーブルを作成するCREATE TABLE randData (iData I) * xBaseとSQL DMLコマンドを使用してランダムデータを入力しますi = 1 から 50 まで 空白 を追加iDataを( RAND ()*100) に置き換えますrandData (iData) に値を挿入( RAND () * 100) エンドフォール* データに構造インデックスを配置するiDataタグの インデックスiDataCLOSE DATA && 開いているライブラリなどを閉じない* xBaseスタイルのコマンドを使用して順序付けられたデータを表示するrandData を使用するiDataに注文 を設定LOCATE && GO TOPの代わりに使用します。TOPの検索にインデックスの使用を強制します。 次の10件 と最初の10件をリスト下 へスキップ-10 リスト残り && 最後の10データ を閉じる* SQL DMLコマンドを使用して順序付けられたデータを参照する選択* ;randDataから;iData降順で 並べ替えPRIVATE cAuthorID, cAuthorName && プライベート変数は、同じ名前の以前のグローバル変数またはプライベート変数を置き換えます。LOCAL nHnd, nResult && ローカル変数はここでのみ表示されます* ODBCデータソースに接続するnHnd = SQLCONNECT ( "ODBCDSN" , "user" , "pwd" ) * エラーが発生した場合に接続を閉じるコードに終了できるようにループを入力しますDO WHILE .T.* SQLコマンドを実行するnResult = SQLEXEC (nHnd, "USE master" ) nResult < 0 の 場合メッセージボックス( 「MASTER データベースが存在しません!」 ) EXIT && 接続を閉じるにはENDIF* リモートサーバーからデータを取得し、ローカルデータカーソルに保存しますnResult = SQLEXEC (nHnd, "SELECT * FROM authors" , "QAUTHORS" ) nResult < 0 の 場合メッセージボックス( 「リモート SQL SELECT コマンドを実行できません!」 ) EXIT && 接続を閉じるにはENDIF* パラメータを使用してリモートテーブルのレコードを更新するcAuthorID = "1001"cAuthorName = "新しい名前"nResult = SQLEXEC (nHnd, "UPDATE authors SET auth_name = ?cAuthorName WHERE auth_id = ?cAuthorID" ) nResult < 0 の 場合メッセージボックス( 「リモート SQL UPDATE コマンドを実行できません!」 ) EXIT && 接続を閉じるにはENDIF* ここまで来れば、すべて回収に成功したことになるEXIT && 無条件に終了エンドド* 接続を閉じるSQLDISCONNECT (nHnd)