LAN 経由でデプロイされた Firebird 2.1.1 データベースがあります。最近のアップグレードでは、FB 内部関数 (COALESCE) を使用しました。開発マシンで Delphi アプリをテストしていたとき、問題はありませんでした。
しかし、本番マシンでクエリを実行しようとすると、関数 (COALESCE) が利用できないというエラー メッセージが表示されました。
Coalesce は、FB に組み込まれている内部関数です。UDF やストアド プロシージャではなく、組み込まれています。
Q: Coalesce を使用したクエリが開発マシンでは機能するのに、本番マシンでは機能しないのはなぜですか?
いくつかの詳細情報:
- 両方の XP pro SP2
- 私のプログラムは、BDE を使用して Delphi 3.0 で開発されています。
- ところで: ワークステーション (本番マシン) に FB サーバーをインストールしましたが、驚くことに、Coaclesce を使用したクエリが機能します。Coaclesce は内部機能だと思っていた?! すべてのマシンに FB サーバーをインストールする必要はありません。3 つの異なる場所に 70 を超えるワークステーションがあります。
通常、XP を実行している 1 台のマシンに FB (ver 2.1.1) をインストールしています。これは私が指定したデータベース サーバーです。アプリを実行しているすべてのワークステーションは、このサーバーからデータを取得します。アプリをアップグレードし、クライアント側アプリが使用するサーバーに常駐する FB データベースのスキーマを変更しました。私が行った変更の 1 つは、FB 内部関数を初めて使用することです。具体的には、関数 COALESCE を使用しています。ワークステーションでアプリを実行すると、次のエラー メッセージが表示されます。
興味深い点は次のとおりです。COALESCE を含むクエリは、私の開発マシン (ネットワーク上の別のワークステーション) では正常に実行されましたが、ユーザーのワークステーション (実稼働マシン) では実行されませんでした。そこで、「私の開発用コンピューターはどこが違うのか?」と自問自答しました。その上にFBサーバーがあります。そこで、ユーザーのワークステーションに FB サーバーをインストールしました (FB は現在、私たちのサーバー + アプリを実行しているワークステーションにあります)。私のアプリはまだサーバーのデータベース (ワークステーションのデータベースではありません) を使用していますが、クライアント ワークステーションに完全な FB サーバーを配置することで、アプリが内部の FB 関数を見つけることができるようです。
私は、FB の内部機能はサーバーのインストールの一部であると想定しています。ワークステーションにコピーする必要はなく、宣言する必要もありません。それらは、SUM、MIN、MAX、または AVG のようなものです。
Q: Firebird の内部関数が Firebird クライアント コンピュータで実行されないのはなぜですか?