Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Senia_Bezrubashkin от Январь 15, 2013, 08:33



Название: Не сохраняются изменения в ячейках таблиц (БД sqlite)
Отправлено: Senia_Bezrubashkin от Январь 15, 2013, 08:33
В примерах описывается вставка данных в таблицу, делаю как написано. Но при запуске приложения вновь, данные остаются без изменений. Почему так? Или примеры демонстрируют только работу команд-запросов и все происходит в оперативной памяти, а на диск писать это другая история?
Заранее спасибо.


Название: Re: Не сохраняются изменения в ячейках таблиц (БД sqlite)
Отправлено: Senia_Bezrubashkin от Январь 15, 2013, 08:53
Да и сама таблица физически не создается. Вставка данных, это так, тестовые действия. Думаю оба вопроса из одной области.
Код:
void MainWindow::createTable(QString tableName)
{
    QSqlQuery query;
    QString str = "create table ";
    str.append(tableName);
    str.append(" (id int primary key, firstname varchar(20), lastname varchar(20));");

    if(!query.exec(str))
    {
        qDebug()<<"Unable to create a table";
    }
    //query.exec("insert into gruppa_4 values(777, 'Peeg', 'Young')");
    //query.exec("insert into gruppa_4 values(888, 'Christine', 'Holand')");
    //query.exec("insert into gruppa_4 values(999, 'Lars', 'Gordon')");
    //query.exec("insert into gruppa_4 values(111, 'Roberto', 'Robitaille')");
    //qDebug()<<tableName;
}

По идее метод должен создавать таблицу, и вроде создает (не выдает сообщение "Unable to create a table"). Закоменченные строки содержат название таблицы (жестко) для проверки работы запроса вставки. В любом случа, на диск не пишется ни то, ни другое.


Название: Re: Не сохраняются изменения в ячейках таблиц (БД sqlite)
Отправлено: LisandreL от Январь 15, 2013, 10:33
Ну самый очевидный вариант - начинаете транзакцию и не заканчиваете.


Название: Re: Не сохраняются изменения в ячейках таблиц (БД sqlite)
Отправлено: Senia_Bezrubashkin от Январь 15, 2013, 11:07
Ну самый очевидный вариант - начинаете транзакцию и не заканчиваете.
т. е. в sqlite есть  средства для сохранения данных на диске? Ну, в смысле,  мне не надо привлекать классы для работы с файлами, чтобы сохранять данные на диске?


Название: Re: Не сохраняются изменения в ячейках таблиц (БД sqlite)
Отправлено: Bepec от Январь 15, 2013, 12:00
sqlite как бы и работает с файлом базы данных. Да, тебе не нужно работать с файлом. За тебя это будет делать QSqlDatabase. Тебе же нужно лишь завершать транзакции, если ты их открываешь, и просто выполнять запросы.


Название: Re: Не сохраняются изменения в ячейках таблиц (БД sqlite)
Отправлено: Serr500 от Январь 15, 2013, 20:58
Код:
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("MyDB.sqlite");
    if (db.open())
    {
        QString Query = "CREATE TABLE TEST (id INT);";
        if (!db.exec(Query).isValid()) {
            qDebug(":(");
        }
    }
    db.close();
Как-то так...  ;)


Название: Re: Не сохраняются изменения в ячейках таблиц (БД sqlite)
Отправлено: Senia_Bezrubashkin от Январь 15, 2013, 21:48
У меня вместо имени БД (параметр) стоит такая фигня:
Код:
db.setDatabaseName(":memory:");
Наверное поэтому у меня все происходит в памяти и не пишется на диск? А файл с расширением .sqlite должен быть? А то у меня его нет. Если его нет, то нужно его создать?


Название: Re: Не сохраняются изменения в ячейках таблиц (БД sqlite)
Отправлено: Senia_Bezrubashkin от Январь 15, 2013, 21:57
Создал такой файл, положил параметром вместо ":memory:" добавил db.close(); в конце  и... ничего не изменилось. В файл ничего не пишется как и раньше.


Название: Re: Не сохраняются изменения в ячейках таблиц (БД sqlite)
Отправлено: Senia_Bezrubashkin от Январь 15, 2013, 22:15
Вот так сделал:
Код:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
//db.setDatabaseName(":memory:");
db.setDatabaseName("ddd.sqlite");
if (!db.open())
{           
    return false;   
}   
QSqlQuery query;
query.exec("create table gruppa_1 (id int primary key, "
                "firstname  varchar(20), lastname varchar(20))");   
query.exec("insert into gruppa_1 values(1, 'Peeg', 'Young')");   
query.exec("insert into gruppa_1 values(2, 'Christine', 'Holand')");   
query.exec("insert into gruppa_1 values(3, 'Lars', 'Gordon')");   

db.close();


Название: Re: Не сохраняются изменения в ячейках таблиц (БД sqlite)
Отправлено: Senia_Bezrubashkin от Январь 15, 2013, 22:22
О! Наврал... что-то происходит... при запуске в очередной раз обнаружились данные на диске. Оказывается создавать ничего не надо было. Файл с таким именем нарисовывается сам (просто в другой директории)!


Название: Re: Не сохраняются изменения в ячейках таблиц (БД sqlite)
Отправлено: Serr500 от Январь 16, 2013, 08:30
Чтобы файл был в нужной директории, можно сделать так:
Код:
db.setDatabaseName("C:/Some_Folder/ddd.sqlite");