1

コードを機能させるのに苦労しています。Delphi 7 のアプリケーションでデータベースに接続したいのですが、アプリケーションのフォルダを変更すると、たとえば別のコンピュータにインストールすると、データ モジュールが動作しなくなります。エラーは次のとおりです。

例外クラス EdatabaseError が発生し、「Missing Drivername propriety」というメッセージが表示されました

私の実際のコードは次のとおりです。

procedure TDataModule1.DataModuleCreate(Sender: TObject);
var
  conexao : TSQLConnection;
begin
   with SQLConnection1 do
    begin
        ConnectionName := 'SKY';
        DriverName := 'Interbase';
        LibraryName := 'dbexpint.dll';
        VendorLib := 'gds32.dll';
        GetDriverFunc := 'getSQLDriverINTERBASE';
        LoadParamsOnConnect := true;
        LoginPrompt := False;
        Params.Add('Database='+ExtractFilePath(Application.ExeName)+'\Banco\FLY_SKY_DESK.FDB');
        Params.Add('User_Name=SYSDBA');
        params.Add('Password=masterkey');
        Params.Add('SQLDialect=3');
        Open;
    end;
      SQLConnection1.Connected:=true;
end;

任意のパスまたはインストール場所で、.exe を使用してデータベースに接続したいと考えています。

4

4 に答える 4

3

スレッドからFirebirdデータベースを開くコードを書き込もうとしたときに、同様の問題に直面しました。コードは、dbExpressを使用しているように見えますTSQLConnection。特に、IBコンポーネントを使用すると、はるかに簡単になりますTIBDatabase。そうすると、コードは次のようになります

var
 ibdb: TIBDatabase;
 qDefaults: TIBQuery;
 trans: TIBTransaction;

begin
 ibdb:= TIBDatabase.Create (nil);
 ibdb.databasename:= ExtractFilePath(Application.ExeName)+'\Banco\FLY_SKY_DESK.FDB')
 ibdb.loginprompt:= false;
 ibdb.params.add ('password=masterkey');
 ibdb.params.add ('user_name=sysdba');
 ibdb.sqldialect:= 3;
 ibdb.connected:= true;
 trans:= TIBTransaction.create (nil);
 trans.defaultdatabase:= ibdb;
 qDefaults:= TIBQuery.create (nil);
 qDefaults.database:= ibdb;
 qDefaults.transaction:= trans;
 qDefaults.sql.Add ('select * from defaults');
 qDefaults.active:= true; 
 ...
于 2011-11-01T08:37:05.007 に答える
2

ほとんどの場合、ターゲット コンピューターで必要な DLL が不足しています。クライアント アプリケーションに含める必要がある DLL を特定し、ターゲット コンピューターにインストールする必要があります。多くの場合、必要な DLL を EXE と同じフォルダーに配置するだけで機能します。

Interbase と dbExpress と Firebird を参照しているため、何を使用しているのかわかりませんが、ターゲット コンピューターには必要なドライバーがない可能性があります。

于 2011-11-01T15:01:45.860 に答える