Форум программистов, компьютерный форум CyberForum.ru

Не могу удалить таблицы в БД SQLite - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Удаление переменных из памаяти http://www.cyberforum.ru/cpp-beginners/thread946804.html
Как удалить переменную (в классе) созданную не через new или она автамfтически удалиться при вызове delete для объекта?
C++ Вложенный класс class zer { class ins { static const string st; public: static void showIns(){ cout<<endl<<st; } }; static const string st; public: http://www.cyberforum.ru/cpp-beginners/thread946794.html
C++ GCC, ввод строки в switch
Подскажите, почему не работает? (Что именно не работает написано в комментариях кода.) Программа элементарная, специально сделал для примера. Все ведь верно, но не работает как задумано. При первой попытке ввода строки через switch, ввод строки завершается автоматический, не введя даже ни одного символа. Компилятор GCC. Пытаюсь запустить на OC Android. Что через C4droid, что через CCTools,...
C++ Из заданного множества точек на плоскости выбрать такие три точки А, В, С
Из заданного множества точек на плоскости выбрать такие три точки А, В, С, чтобы внутри треугольника АВС содержалось максимальное количество точек этого множества.
C++ Бинарные файлы. Чтение http://www.cyberforum.ru/cpp-beginners/thread946625.html
Дан бинарный файл, компонентами которого являются массивы действительных чисел. Вычислить для каждого массива число отрицательных элементов. Записать в другой файл каждое из этих чисел. Как прочитать числа из бинарного файла? Раньше не сталкивался с бинарными файлами
C++ windows 7 + win32. Как правильно сохранить проект? Как правильно сохранить проект? консольный, win32. Чтобы запускался на семерке. Не в компиляторе, а просто как приложение. Ругается на MSVCP100D.dll подробнее

Показать сообщение отдельно
ElwooD07
0 / 1 / 1
Регистрация: 01.02.2012
Сообщений: 16
01.09.2013, 16:02     Не могу удалить таблицы в БД SQLite
К программе подключена либа SQLite для реализации небольшого хранилища данных. Иногда это хранилище надо очищать. Так вот, я столкнулся с проблемой удаления таблиц из базы: после выполнения
SQL
1
DROP TABLE IF EXISTS 'table'
таблица как была, так и остается в базе. Уже ознакомился с VACUUM и режимом aut_vacuum: пробовал и то, и другое - ничего не помогает.
Также пробовал стереть данные из таблицы перед её удалением
SQL
1
DELETE FROM 'table'; DROP TABLE IF EXISTS 'table'
, но SQLite возвращает SQLITE_ERROR. В документации написано: "SQL error or missing database". База существует, и другие запросы через указатель на неё выполнить можно, а этот - нельзя. Что самое интересное, в NaviCat этот запрос выполняется без проблем.
Вот кусок кода, в котором происходят проблемы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const int tables_count = 3;
std::wstring tables[tables_count] = 
{ L"Sets", L"Files", L"Others" };
DBCErr ret = SUCCESS;
SQLQuery query(db, L"DELETE FROM '?'; DROP TABLE IF EXISTS '?';");
ret = query.LastErr();
if (ret != SUCCESS)
    return ret;
for(int i = 0; i < tables_count; ++i)
{
    query.BindText(tables[i], 1);
    query.BindText(tables[i], 2);
    ret = query.Step();
    if (ret == SUCCESS)
        ret = query.Step();
    if (ret != SUCCESS)
        return ret;
}
query.Prepare(L"VACUUM");
ret = query.Step();
return ret;
Здесь SQLQuery - мой класс для реализации запросов. Его методы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
DBCErr SQLQuery::ConvertToDBCErr(int sqlite_err_code)
{
    switch(sqlite_err_code)
    {
    case SQLITE_OK:
    case SQLITE_DONE:
        return SUCCESS;
    case SQLITE_ROW:
        return SQL_ROW;
    // ............................... //
    
    default:
        return SQL_ERROR;
    }
}
 
SQLQuery::SQLQuery(sqlite3 * db, const std::wstring &query):
    m_stmt(0), m_last_err(SQLITE_OK), m_last_dbcerr(SUCCESS)
{
    if (db)
        m_db = db;
    else
        throw std::exception("DB was disconnected");
    if (!query.empty())
        m_last_err = sqlite3_prepare16_v2(db, query.c_str(),
        query.size() * sizeof(wchar_t), &m_stmt, 0);
    m_last_dbcerr = ConvertToDBCErr(m_last_err);
}
 
DBCErr SQLQuery::Prepare(const std::wstring &new_query)
{
    if (m_stmt)
        sqlite3_reset(m_stmt);
    m_last_err = sqlite3_prepare16_v2(m_db, new_query.c_str(),
        new_query.size() * sizeof(wchar_t), &m_stmt, 0);
    m_last_dbcerr =
        ConvertToDBCErr(m_last_err);
    return m_last_dbcerr;
}
 
DBCErr SQLQuery::BindText(const std::wstring &value, int column)
{
    if (!m_stmt)
        return SQL_STMT_NOT_PREPARED;
    m_last_err = sqlite3_bind_text16(m_stmt, column,
        value.c_str(), value.length() * sizeof(wchar_t), 0);
    m_last_dbcerr = ConvertToDBCErr(m_last_err);
    return m_last_dbcerr;
}
 
DBCErr SQLQuery::Step()
{
    if (!m_stmt)
        return SQL_STMT_NOT_PREPARED;
    m_last_err = sqlite3_step(m_stmt);
    m_last_dbcerr =
        ConvertToDBCErr(m_last_err);
    return m_last_dbcerr;
}
 
DBCErr SQLQuery::Reset()
{
    if (m_stmt)
        m_last_err = sqlite3_reset(m_stmt);
    else
        m_last_err = SQLITE_OK;
    m_last_dbcerr =
        ConvertToDBCErr(m_last_err);
    return m_last_dbcerr;
}
 
DBCErr SQLQuery::LastErr() const
{
    return m_last_dbcerr;
}
Наперед скажу, что с реализацией SQLQuery у меня никогда проблем не возникало.
Очень прошу помощи, так как сижу над проблемой уже около 4-х часов и ничего не нашел. Заранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru