2

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 クライアント コンピュータで実行されないのはなぜですか?

4

1 に答える 1

2

Firebird のクライアント ライブラリ "fbclient.dll" (または "gds32.dll" に名前が変更された可能性があります) は、ステートメントを解析し、使用されている SQL キーワードを検証します。

サーバーをクライアント マシンにインストールする必要はありません。

何が起こったのかというと、マシンが "COALESCE" キーワードを認識しない古いバージョンのクライアント ライブラリ (おそらく BDE は古い "gds32.dll" と共に配布されている) で実行されていたということです。サーバー バージョン 2.1.1 をインストールすると、更新されたクライアント モジュールもインストールされ、システム ディレクトリ内の古い "gds32.dll" が "fbclient.dll" (サーバー インストーラーでデフォルトでチェックされているオプション) と互換性があるものに置き換えられる可能性があります。 「gds32.dll」に名前が変更された Firebird 2.1。

問題の再現を試み、ワークステーションで「fbclient.dll」と「gds32.dll」のすべてのコピーを検索し、それらが本当に古いバージョンであるかどうかを確認し、サーバーをインストールせずに、この特定のファイルのみを置き換えてみてください。クライアントマシンで。

于 2012-05-25T04:53:29.733 に答える