1

何をしても、FireDAC を使用して Firebird 2.5 組み込みデータベースに接続できないようです。面白いのは、昨日はうまくいったように見えたのに、突然うまくいかなくなったということです。

なぜ突然機能しなくなったのか頭をかきむしるよりも、何が起こっているのかを段階的に把握できるように、クリーンなプロジェクトの再構築を開始しました。もちろん、Firebird からダウンロードしたパッケージの内容全体をアプリケーション ディレクトリとデータベース自体に追加 (コピー) しました。

フォルダーの問題を回避するために、すべてのファイル (および exe) を同じディレクトリに配置するように Delphi 環境オプションを設定しました。次に、Firebird の *.doc フォルダーにある提案を使用して、fbembed.dll の名前を fbclient.dll に変更しました。(この問題に関するいくつかの FireDAC Q&A で、Firedac には fbembed.dll ファイルが必要であると読みました。まあ、両方の方法を試しましたが、いずれにしても機能しません)。しかし、fbclient.dll の最初の問題に固執させてください。

接続を確立するために、データモジュールに FDPhysFBDriverLink1 と FDConnection1 をドロップしました。

今度は FDPhysFBDriverLink1: BaseDriverID は FB です。DriverID については、両方の提案を試しました。最初に 'FB' を使用し、次に fbclient.dll へのフル パスを指定します。どれも違いを生むようには見えません。

Firedac 接続エディタにアクセスしてデータベース ファイルへのパスを入力すると、「ベンダー ライブラリ (fbclient.dll または fbembed.dll) を読み込めません」というエラーが表示されます。ただし、これらのファイルは両方ともアプリケーションの exe フォルダーにあります (Embarcadero サイトで提案されているように)。では、FireDAC はどこでファイルを探しているのでしょうか? Firebird と FireDAC には、接続を成功させるために何をしなければならないかを簡単に説明できないので、少しうんざりしています。彼らが提供するのは、どれも機能しないいくつかのあいまいなオプションだけです。これを追加して、最後に失敗します。

したがって、誰かが簡単な回答でこれを行う方法について経験がある場合(リンクはありません。すべてを見て試してみました)、とても感謝しています。簡単な接続を確立するために何日も試みるのは、本当にばかげています。同様の結果でUniDACでも試しました。接続を完了するにはどうすればよいですか?

4

2 に答える 2

8

問題はこれだったようです: FDPhysFBDriverLink1 にはこの情報が必要です:

BaseDriverID=FB
DriverID=FB 
VendorLib=C:\Users\***\Documents\Delphi\FIREBIRD\fbembed.dll

これを設定した後、これらのパラメーターを使用して FDConnection1 を接続できました。

DriverID=FB
Database=C:\Users\***\Documents\Delphi\FIREBIRD\MYDB.FDB
User_Name=sysdba
Password=masterkey 
Protocol=local
于 2014-08-16T17:01:05.677 に答える
2

Firebird はクライアント サーバー システムです。サーバー部分 (fbserver.exe または fb_inet_server.exe) とクライアント部分 (fbclient.dll) があります。そのため、Firebird の通常の (埋め込まれていない) インスタンスに接続するときは、fbclient.dll をクライアント ライブラリとして指定する必要があります。

Embedded Firebird は、単一の dll にサーバーとクライアントを組み合わせたものです。両方とも fbembed.dll にコンパイルされています (そのサイズを見て、fbclient.dll と比較できます)。

組み込みサーバーを使用する場合、クライアント ライブラリとして fbembed.dll を指定する必要があります。その結果、Firebird サーバー (つまり、SQL クエリの処理を担当するコード) がコードに組み込まれます。

FireDAC でベンダー ライブラリを指定しない場合、FireDAC は最初に利用可能な dll をロードしようとします。これは、(System32 からの) fbclient.dll である可能性が最も高いです。

FireDAC は、他のクライアント コンポーネントと同様に、使用している Firebird のアーキテクチャを認識しません。指定された dll をロードし、その API を呼び出すだけです。クライアント ライブラリを 1 回変更する (および接続文字列を調整する) だけで、Embedded、または SuperServer/Classic/SuperClassic インスタンスに接続できるという優れた柔軟性が得られます。

明白ではありますが、言及すべき重要なこと - Embedded はリモート接続には使用できません (次のような接続文字列を使用: サーバー名:ディスク:\パス\データベース.fdb)。

于 2014-08-18T06:19:38.690 に答える