2011-10-30 15 views
3

私のアプリケーションは、私は私のコードでこれをも含まれているこのようODBCプラグインを使用するQTアプリケーション(静的リンクなし)をどのように展開できますか?

QString servername = "SQL09.FreeMySQL.net"; 
QString dbname = "psiprobation"; 
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); 
db.setConnectOptions(); 
QString dsn = QString("DRIVER={MySQL ODBC 5.1 Driver};SERVER=%1;DATABASE=%2;USER=jnchappell21;PASSWORD=XXXXXXX").arg(servername).arg(dbname); 
db.setDatabaseName(dsn); 

QtのSQLを使用しています...

a.addLibraryPath(a.applicationDirPath()+"/plugins"); 

"プラグイン" フォルダが別のフォルダ "sqldrivers" が含まれています。 "sqldrivers"の中には、myodbc5.dll、myobdc5S.dll、qsqlodbc4.dll、およびqsqlodbcd4.dllがあります。 (注: "plugins"フォルダは実行可能ファイルと同じディレクトリにあります)

これで、アプリケーションはQtがインストールされているシステムで完全に動作します。ただし、QTがインストールされていない他のシステムでは、アプリケーションが実行されても(つまりGUIが開き、エラーメッセージが表示されても)データベースに接続できません。

エラーメッセージは次のとおりです。「[Microsoft]の[ODBCドライバマネージャ]データソース名が見つかりませんし、デフォルトのドライバがQODBC3指定されていません:接続することができません」

この問題に対する解決策は何ですか?

+0

表示される正確なエラーは何ですか? –

+0

「エラーメッセージ」は説明的ではありません。これは、 "Unknown Error Occurred"と表示されるダイアログです。このダイアログは、(!db.open())の場合にのみトリガされます。 – JNChappell21

+0

「不明なエラーが発生しました」ダイアログは、データベースにアクセス中(または最初にアクセスしようとしたとき)にエラーが発生したかどうかを表示するために作成したものです。 – JNChappell21

答えて

1

Qtのプラグインの問題をデバッグすることは苦しいことがあります。 addLibraryPath()を使用してプラグインの場所を強制的に実行しようとすると、大成功を収めたことはありませんでした。理由を理解する前に、Qtアプリケーションが、関連するプラグインタイプの「リーフ」ディレクトリのアプリケーションルートを調べることを発見しました。あなたの場合は、sqldriversディレクトリをアプリケーションのルートに入れてください(pluginsディレクトリ内にネストしないでください)。

実際にプラグインの場所の問題があるかどうかを判断する方法の1つは、ドライバファイルを開発マシン上のその場所から移動(または名前を変更)し、同じエラーが発生するかどうかを確認してください。

ウィジェットプラグインを対象としていますが、このページにはplugin trouble shootingというヒントがあります。

+0

リンクをご利用いただき、ありがとうございます。私は、ドライバファイルの名前の変更/再配置の提案を試みました。残念ながら、私は開発マシンでエラーを再現するのに失敗しました。私はまた、リンクに記載されているいくつかの項目を通過しましたが、運はまだありません。 – JNChappell21

+0

私はこの問題を解決しました。ターゲットマシンにODBCドライバを再インストールしたところ、問題が修正されたようです。しかし、なぜそれが問題を引き起こしているのか分かりません。あなたの時間と努力をありがとう! – JNChappell21

関連する問題