Результаты OpenFileDialog-> DialogShow () вызывают ошибки в SQLite - PullRequest
1 голос
/ 22 октября 2010

У меня есть программа, которая обращается к базе данных с помощью SQLite. Когда я открываю OpenFileDialog или SaveFileDialog перед тем, как сделать вызов SQLite:

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;

Странно, но в моем текущем проекте это не сработает, но я скопировал и вставил его в новый проект, и ошибка не повторяется. Сейчас я просто пытаюсь выяснить, в чем проблема в моем окружающем коде ...

Ответы [ 2 ]

1 голос
/ 29 октября 2010

Я наконец понял, как это исправить.В свойствах моего диалогового окна мне пришлось установить для свойства RestoreDirectory значение true.Я не совсем уверен, как это исправить, если только каким-то образом, изменив каталог, SQLite не сможет найти файл моей базы данных.

Спасибо за вашу помощь!

1 голос
/ 23 октября 2010

Нет надежды выяснить источник проблемы из вопроса. Просто несколько указателей.

Начните с установки в RestoreDirectory OpenFileDialog значения True. Это гарантирует, что нажатие кнопки «Открыть» не изменит рабочий каталог программы. Если это работает, то в запросе есть довольно загадочная зависимость от текущего каталога.

Следующее, о чем нужно беспокоиться, это библиотеки DLL, которые загружаются при использовании диалогового окна. Project + Properties, вкладка Debug, отметьте галочкой «Включить отладку неуправляемого кода». Когда вы откроете диалоговое окно, откройте окно «Вывод», в котором показан список вводимых библиотек DLL. Это расширения оболочки, одно из которых может конфликтовать с SQLite. Не знаю, что может сделать такое расширение, кроме того, что может повредить память или использовать сам SQLite. Вы можете временно отключить расширение оболочки с помощью утилиты SysInternals AutoRuns. Начните с тех, которые не написаны Microsoft.

...