Russian Qt Forum
Октябрь 01, 2024, 10:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не сохраняются изменения в ячейках таблиц (БД sqlite)  (Прочитано 6444 раз)
Senia_Bezrubashkin
Гость
« : Январь 15, 2013, 08:33 »

В примерах описывается вставка данных в таблицу, делаю как написано. Но при запуске приложения вновь, данные остаются без изменений. Почему так? Или примеры демонстрируют только работу команд-запросов и все происходит в оперативной памяти, а на диск писать это другая история?
Заранее спасибо.
Записан
Senia_Bezrubashkin
Гость
« Ответ #1 : Январь 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"). Закоменченные строки содержат название таблицы (жестко) для проверки работы запроса вставки. В любом случа, на диск не пишется ни то, ни другое.
« Последнее редактирование: Январь 15, 2013, 08:55 от Senia_Bezrubashkin » Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #2 : Январь 15, 2013, 10:33 »

Ну самый очевидный вариант - начинаете транзакцию и не заканчиваете.
Записан
Senia_Bezrubashkin
Гость
« Ответ #3 : Январь 15, 2013, 11:07 »

Ну самый очевидный вариант - начинаете транзакцию и не заканчиваете.
т. е. в sqlite есть  средства для сохранения данных на диске? Ну, в смысле,  мне не надо привлекать классы для работы с файлами, чтобы сохранять данные на диске?
Записан
Bepec
Гость
« Ответ #4 : Январь 15, 2013, 12:00 »

sqlite как бы и работает с файлом базы данных. Да, тебе не нужно работать с файлом. За тебя это будет делать QSqlDatabase. Тебе же нужно лишь завершать транзакции, если ты их открываешь, и просто выполнять запросы.
Записан
Serr500
Гость
« Ответ #5 : Январь 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();
Как-то так...  Подмигивающий
Записан
Senia_Bezrubashkin
Гость
« Ответ #6 : Январь 15, 2013, 21:48 »

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

Создал такой файл, положил параметром вместо ":memory:" добавил db.close(); в конце  и... ничего не изменилось. В файл ничего не пишется как и раньше.
Записан
Senia_Bezrubashkin
Гость
« Ответ #8 : Январь 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();
Записан
Senia_Bezrubashkin
Гость
« Ответ #9 : Январь 15, 2013, 22:22 »

О! Наврал... что-то происходит... при запуске в очередной раз обнаружились данные на диске. Оказывается создавать ничего не надо было. Файл с таким именем нарисовывается сам (просто в другой директории)!
Записан
Serr500
Гость
« Ответ #10 : Январь 16, 2013, 08:30 »

Чтобы файл был в нужной директории, можно сделать так:
Код:
db.setDatabaseName("C:/Some_Folder/ddd.sqlite");
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 23.