1

SQLite を使用してデータベースにアクセスするプログラムがあります。SQLite 呼び出しを行う前に OpenFileDialog または SaveFileDialog を開くと、次のようになります。

result = sqlite3_prepare_v2(databaseConnection,converted,10000,&stmt,&strptr);

[キャンセル] を選択すると、すべて問題なく動作します ( result == SQLITE_OK) が、[開く] を選択すると、ダイアログの戻りファイルで何もしなくても壊れます ( result == SQLITE_ERROR)。なぜこれが起こっているのか分かりますか?

お時間をありがとうございました!

編集:これが私が使用しているコードです:

OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog;
openFileDialog1->ShowDialog();
sqlite3_stmt * stmt;
const char * strptr;
sqlite3 * databaseConnection;

int result = sqlite3_open("virtualpatient_chat.db", &databaseConnection);

if (result != SQLITE_OK) return;
result = sqlite3_prepare_v2(databaseConnection,"SELECT * from mappings;",10000,&stmt,&strptr);

if (result != SQLITE_OK) return;

奇妙なことに、現在のプロジェクトでは機能しませんが、それをコピーして新しいプロジェクトに貼り付けたところ、エラーは繰り返されません。今、私は周囲のコードの問題が何であるかを理解しようとしています...

4

2 に答える 2

1

I finally figured out how to fix it. Under the Properties for my dialog box, I had to set the RestoreDirectory property to true. I'm not quite sure how that fixed it unless somehow by changing the directory it made SQLite not be able to find my database file.

Thanks for your help!

于 2010-10-28T21:15:25.463 に答える
1

質問から問題の原因を診断する望みはありません。いくつかの指針。

OpenFileDialog の RestoreDirectory を True に設定することから始めます。これにより、[開く] をクリックしてもプログラムの作業ディレクトリが変更されないことが保証されます。それが機能する場合、クエリの現在のディレクトリにはかなり不思議な依存関係があります。

次に心配することは、ダイアログを使用するときに読み込まれる DLL です。プロジェクト + プロパティ、[デバッグ] タブで、[アンマネージ コードのデバッグを有効にする] にチェックを入れます。ダイアログを開いたときに [出力] ウィンドウを確認すると、挿入された DLL のリストが表示されます。これらはシェル拡張であり、そのうちの 1 つは SQLite と競合する可能性があります。そのような拡張機能がメモリの破損や SQLite 自体の使用を超えて何をするかについては、実際の手がかりはありません。SysInternals の AutoRuns ユーティリティを使用して、シェル拡張機能を一時的に無効にすることができます。Microsoft によって作成されていないものから始めます。

于 2010-10-22T20:14:59.800 に答える