作成途中のソースファイルを一式添付しました。
mysys.c内の104行目
から最後までの処理が意図しない動作になります。
初回起動時、既存の他アプリの絶対パスをデータベース(SQLite)に登録しています。
メニューからパスを編集できるダイアログを作成し、エディットボックス内に現在登録されている絶対パスを表示しています。
・エディットボックス内を変更することなく編集ボタンを押すと意図した通りの動作になってると思われます。
・エディットボックス内を変更して編集ボタンを押すとSQL側のエラーが戻ってきます。
・エディットボックス内を変更することなくダイアログを閉じ、再度開くと意図した通りの動作になります。
・エディットボックス内を変更して編集ボタンを押しSQL側のエラーの後、ダイアログを再度開くと別のSQLエラー文が戻ってきます。
質問は
・エディットボックス内を変更したときのしなかったときのSQL文は変わらないのになぜ変更したときはSQLでエラーを吐くのか?
・なぜエディットボックス内を変更したときとしなかったときでダイアログを開くときの動作が変わるのか?
以上2点の質問ですが、解決方法と出来ればなぜこのような動作になってしまったかの理由が知りたいです。
どうぞよろしくお願いします。
意図しない処理が行われて先に進みません。。。
Re: 意図しない処理が行われて先に進みません。。。
手元の環境ではエラーを再現できませんでした。
具体的にどのようなエラーが戻ってくるのか教えていただけますか?
もしよろしければ、エディットボックス内をどう変更したかも教えてください。
ちなみに、sqlite3_errmsgに本来渡すべきと考えられるdbではなくhDllを渡しているのはなぜですか?
具体的にどのようなエラーが戻ってくるのか教えていただけますか?
もしよろしければ、エディットボックス内をどう変更したかも教えてください。
ちなみに、sqlite3_errmsgに本来渡すべきと考えられるdbではなくhDllを渡しているのはなぜですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 意図しない処理が行われて先に進みません。。。
みけCATさん、見ていただきありがとうございます。
再現できませんでしたか?
データベースに参照したファイルの絶対パスを書き込めたのでしょうか???
hDllを渡してたのはミスでした。ずっとコピペしてたので最初からのミスに気づきませんでした。
教えていただきありがとうございます。
さて、こちら側での動作ですが
・一番最初にパス編集ダイアログが作成されたときはエラーが出ない
・参照ボタンを押さずに編集ボタンを押すとエラーが出ない
・参照ボタンを押して他のファイルを選択し編集ボタンを押すとError 0007の場所でunable to open database fileとエラーが出る。
・上記エラーが出た後に再度編集ダイアログを作成するとError 0005の場所で同様にunable to open database fileとエラーが出る。
このようになります。
エディットボックス内をどう変更したかですが、どの実行ファイル(exe)を指定しても同様のエラーになります。
下に動作確認しているところを撮影してアップロードしました。
https://4.gigafile.nu/0717-dc27c588792f ... 62558c0a7f
DL PASS:57630
よろしくお願いします。
再現できませんでしたか?
データベースに参照したファイルの絶対パスを書き込めたのでしょうか???
hDllを渡してたのはミスでした。ずっとコピペしてたので最初からのミスに気づきませんでした。
教えていただきありがとうございます。
さて、こちら側での動作ですが
・一番最初にパス編集ダイアログが作成されたときはエラーが出ない
・参照ボタンを押さずに編集ボタンを押すとエラーが出ない
・参照ボタンを押して他のファイルを選択し編集ボタンを押すとError 0007の場所でunable to open database fileとエラーが出る。
・上記エラーが出た後に再度編集ダイアログを作成するとError 0005の場所で同様にunable to open database fileとエラーが出る。
このようになります。
エディットボックス内をどう変更したかですが、どの実行ファイル(exe)を指定しても同様のエラーになります。
下に動作確認しているところを撮影してアップロードしました。
https://4.gigafile.nu/0717-dc27c588792f ... 62558c0a7f
DL PASS:57630
よろしくお願いします。
Re: 意図しない処理が行われて先に進みません。。。
データベースが開けないとエラーに書いてあるので
エラーチェックをしていなかった
sqlite3_openのすぐ後ろに同様のエラーチェックを追加しました。
するとやはり上記の動作をしたときはここでエラーが出てるようです。
なぜデータベースを開けなくなってしまっているのでしょうか?
エラーチェックをしていなかった
sqlite3_openのすぐ後ろに同様のエラーチェックを追加しました。
ret = sqlite3_open("SW_Info.db",&db);
if (ret != SQLITE_OK)
{
MessageBox(hWnd, (LPCSTR)sqlite3_errmsg(db), (LPCSTR)"ERROR 0001", MB_OK);
sqlite3_close(db);
sqlite3_free(err);
FreeLibrary(hDll);
return FALSE;
}
なぜデータベースを開けなくなってしまっているのでしょうか?