Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.205.56.209] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте!
Изучая работу с SQLite с помошью С++ не понял, как определить, что не удалось открыть базу данных. В простой программе: #include <iostream> #include <string> #include "sqlite3.h" using namespace std; namespace fs = filesystem; void DisplayMessage(const string& sMes) { cout << sMes << endl; cin.get(); exit(EXIT_FAILURE); } int main() { sqlite3* db; //string sqlName = "SQLiteTest.db"; string sqlName = "Test.db"; int rs = sqlite3_open(sqlName.c_str(), &db); if(rs != SQLITE_OK) DisplayMessage("The database could not be opened!"); sqlite3_close(db); cin.get(); return 0; } 1. При открытии базы данных нужно проверить наличие файла с нужным именем, а не анализировать код возврата функции? 2. Проверять значение кода возврата нужно при работе с уже открытой базой? |
Сообщ.
#2
,
|
|
|
Попробуй использовать другую функцию - sqlite3_open_v2, поиграйся с флагами. По идее этот вариант тебе поможет выявить ошибки: файл БД отсутствует или файл БД есть, но невалидного формата. Но если функция вернет ок - тебе останется самостоятельно проверять наличие в файле БД правильных таблиц (нужного тебе формата). Ну я так вижу решение этого вопроса.
|
Сообщ.
#3
,
|
|
|
Спасибо, получмлось. Возник еще вопрос. В процессе экспериментов по добавлению (удалению) записей в базу с автоинкрeментным индексом последний индекс запоминается и после удаления всех записей и последующем добавлении индекс не становится индексом с номером 1, а становится увеличенным на 1 последним запомненным индексом. Можно ли после удаления всех записей из базы как-то скинуть индекс в 0, чтобы при добавлении индексы записей начинались с 1?
|
Сообщ.
#4
,
|
|
|
Цитата tumanovalex @ Спасибо, получмлось. Возник еще вопрос. В процессе экспериментов по добавлению (удалению) записей в базу с автоинкрeментным индексом последний индекс запоминается и после удаления всех записей и последующем добавлении индекс не становится индексом с номером 1, а становится увеличенным на 1 последним запомненным индексом. Можно ли после удаления всех записей из базы как-то скинуть индекс в 0, чтобы при добавлении индексы записей начинались с 1? Попробуй после удаления всех записей выполнить запрос: UPDATE SQLITE_SEQUENCE SET seq = 0 WHERE name = 'имя_таблицы'; |
Сообщ.
#5
,
|
|
|
Спасибо, помогло. А где Вы об этом прочитали? Я найти не смог. Подскажите, пожалуйста, чтобы я смог в будущем найти нужную информацию.
|
Сообщ.
#6
,
|
|
|
Цитата tumanovalex @ Спасибо, помогло. А где Вы об этом прочитали? Я найти не смог. Подскажите, пожалуйста, чтобы я смог в будущем найти нужную информацию. Ну документацию нужно читать внимательнее. Что касается автоинкремента - инфа есть в разделе "2.6.3. The sqlite_sequence table". Самого запроса там нет, но есть структура таблицы. Как обновить инфу - догадаться не сложно. |
Сообщ.
#7
,
|
|
|
Спасибо, понял.
|