-2

私は Firebird 2.5 (Embedded) と Delphi XE2 を使用しています。
以下のファイルをアプリケーションのルート dir に保存しました。

  • C:\myapp\app.exe
  • C:\myapp\fbclient.dll
  • C:\myapp\icudt30.dll
  • C:\myapp\icuin30.dll
  • C:\myapp\icuuc30.dll
  • C:\myapp\dbxfb.dll

そして私の接続設定:

procedure TMainForm.Button1Click(Sender: TObject);
var Con: TSQLConnection;
 begin
  Con := TSQLConnection.Create(Self); 
    With Con Do
     Begin
       Connected := False;
       DriverName := 'FirebirdConnection';

       Params.Clear;
       Params.Add('DriverName=' + DriverName);
       Params.Add('User_Name=SYSDBA');
       Params.Add('Password=masterkey');
       Params.Add('Database=C:\GHARARDAD.FDB');
       Params.Add('SQLDialect=3');

       LoginPrompt := False;
       ConnectionName := 'Gharardad';
       LibraryName := 'dbxfb.dll';
       VendorLib := 'C:\fbclient.dll'; // Renamed fbembed.dll to fbclient.dll
       GetDriverFunc := 'getSQLDriverInterBase'; 
       Connected := True;
     End;
    End;

私の操作システムは次のとおりです:Win 7 64 bit
そして、FBのembedde verは次のとおりです:Firebird-2.5.1.26351-0_Win32_embed

そして、私のアプリは32ビットでコンパイルされました

DLL サイズ :

 fbembed.dll  ----->  size    3,784,704 bytes

 dbxfb.dll     -----> size    288,768 bytes


しかし、アプリケーションを実行したいとき、次のエラーが発生します:

DBX エラー: ドライバーが正しく動作しませんでした。クライアントが間違っているか、正しくインストールされていないか、バージョンが間違っているか、システム パスからドライバが失われている可能性があります。


私は何を間違っていますか?

4

4 に答える 4

4
  1. 次のように Database パラメータを指定する必要があります。

    Params.Add('Database=C:\Full\Path\GHARARDAD.FDB');

  2. 組み込みバージョンを使用したいようです。fbclient.dll の代わりにfbembed.dllを使用する必要があります

于 2012-08-02T07:40:14.433 に答える
2

データベースの User_Name パスワードを既に指定しているのに、なぜ ConnectionName を使用するのかわかりません。

私はこのようなものを好むだろう:

 Con := TSQLConnection.Create(Self); 
    With Con Do
     Begin
       Connected := False;
       DriverName := 'FirebirdConnection';      
       LibraryName := 'dbxfb.dll';
       VendorLib := 'fbembed.dll';
       ConnectionName := 'Gharardad';
       Params.Value['User_Name'] := 'SYSDBA';
       Params.Value['Password'] := 'masterkey';
       Params.Value['Database'] := 'C:\GHARARDAD.FDB';
       Connected := True;
     End;
于 2012-08-02T08:45:40.910 に答える
1

組み込みのFirebirdを使用しているとおっしゃいましたが、標準のFirebirdVendorLibを使用しています

VendorLib := 'fbclient.dll';

埋め込まれた火の鳥の場合、これは

VendorLib = '[pathtolib]\fbembed.dll'

GetDriverFuncの値も欠落しています

したがって、完全なTSQLConnectionオブジェクトは次のようになります(Delphi 2007でテスト済み)

Con := TSQLConnection.Create(Self); 
With Con Do
 Begin
   Connected := False;
   DriverName := 'FirebirdConnection';

   Params.Clear;
   Params.Add('DriverName=' + DriverName);
   Params.Add('User_Name=SYSDBA');
   Params.Add('Password=masterkey');
   Params.Add('Database=C:\GHARARDAD.FDB');
   Params.Add('SQLDialect=3');
   //other connection params here

   ConnectionName := 'Gharardad';
   LibraryName := 'dbxfb.dll';
   VendorLib := 'C:\fbembed.dll';
   GetDriverFunc = 'getSQLDriverInterBase' //Or what ever the dbxfb.dll function is called
   Connected := True;
 End;
End;

getSQLDriverInterBase関数は、Devart firebirdライブラリの関数の名前であるため、dbxfb.dllライブラリとは異なる場合があることに注意してください。

于 2012-08-02T08:23:28.230 に答える
1

そのデータベースに対して他の接続を開いていますか?

FlameRobin、IBExpert、Delphi IDE フォーム デザイナー ?

Delphi にアクティブなデータセット/接続はありますか?

埋め込みでは、ファイルを共有不可で開く必要があります。

SysInternals Process Explorer を実行し、データベース ファイルが別のアプリケーションによって既に開かれている場合は検索します。


Firebird client ではなく、奇妙に名前が変更された Firebird Embedded を本当に使用していますか? @Marcodor と @Re0sless はすでにそれを尋ねました。

組み込みを使用しているとしか思わないようですが、メインエンジンなしでインストールされたサーバーのシェアはごくわずかです。

fbembed.dll   2.5.1   Win32   size is 3 784 704 bytes
fbclient.dll  2.5.1   Win64   size is 870 912 bytes
fbclient.dll  2.5.1   Win32   size is 548 864 bytes

あなたの DLL はどれですか?


これは、データベース エンジンのバージョンとデータベース ファイルのバージョンが一致していない可能性もあります。SysInternals Process Monitor を試して、アプリケーションがどのファイルを見つけて開こうとしているかを確認してください。db ファイルを正常に開くことができますか? firebird.msg を正常に見つけて開くことができますか? icu*.dll を正常に開きますか? 多分udf dll?

firebird.log に何らかのエラーが書き込まれていますか?

一般に、SysInternals Process Monitor を使用して、どのファイルとどこで試行されたかを知る方法を学びます。非常に頻繁に、どのエラーが正確に発生し、その理由が示されます。


fbintl.dll がリストされていません。データベースに非ラテン文字と非英語言語が含まれている場合、fbintl が適切に配置されていないと開くことができない可能性があります。検索された場所に Process Monitor をチェックインし、そこに置きます。


アプリケーションが実際にロードするfirebird dllのバージョンをProcess Monitorで確認してください。そのバージョンは、そのデータベースを開くのに十分なほど新しいものですか?

于 2012-08-02T08:15:18.600 に答える