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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlTableModell::sumbitAll() - не сохраняет модель, при добавлении новых данных  (Прочитано 2133 раз)
SmileGobo
Гость
« : Июль 07, 2012, 10:44 »

Добаляю данные в модель:
Код:
void DBLogger::AddEvent(const QString& event,const int &dev_addr){
    if(m_model==NULL){
        throw DBLoggerException("Ошибка модель не инициализирована","DBLogger::AddEvent()");
    }

    //return true;
    QSqlRecord new_rec;

    int now_timestamp=QDateTime::currentDateTime().toTime_t();

    new_rec.setValue("describe",event);

    new_rec.setValue("time",now_timestamp);

    new_rec.setValue("signnotify",0);


    if(!m_model->insertRecord(0,new_rec)){
        throw DBLoggerException(
            "Ошибка не возможно добавить запись",
            "DBLogger::AddEvent()"
        );
    }
    if(!m_model->submitAll()){
        std::cout<<"db last err code:"<<m_db.lastError().type ()<<std::endl;
        std::cout<<"db last err code:"<<m_db.lastError().text().toStdString()<<std::endl;
        std::cout<<"model size:"<<m_model->rowCount()<<std::endl;
        //постоянно заходит в этот блок
        throw DBLoggerException(
            "Ошибка не возможно сохранить модель",
            "DBLogger::AddEvent()"
        );
    }

}

модель инициализируется так:
Код:
QSqlTableModel* DBLogger::CreateTableModel(){
    QSqlTableModel* model=new QSqlTableModel(0,m_db);
    QSqlQuery query(m_db);
    const QString sql="create table if not exists "+TABLE_NAME+" (id integer Primary Key autoincrement,describe text not null, time int8 not null,deviceaddr int2 NOT NULL,signnotify BOOLEAN )";
    if (!query.exec(sql)){
        throw DBLoggerException("Ошибка создания таблицы"+TABLE_NAME.toStdString()+" в"+DB_NAME.toStdString(),"DBLogger::Init()");
    }

    model->setTable(TABLE_NAME);
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->select();
/*
    if(model->rowCount() > 0) {
        model->removeRows(0, model->rowCount());
        model->submitAll();
    }*/
    return model;
}

void DBLogger::Init(){
    m_db=QSqlDatabase::addDatabase("QSQLITE");
    m_db.setDatabaseName(DB_NAME);

    if (!m_db.open()){
        throw DBLoggerException("Ошибка открытия бд"+DB_NAME.toStdString(),"DBLogger::Init()");
    }
    m_model=CreateTableModel();
}

Почему QSqlTableModell::sumbitAll() возвращает false, а вывод ошибок QSqlEror::text() - пустая строка, код QSqlError::code() - 0
 Непонимающий Непонимающий Непонимающий
Qt 4.4.6 linux debian
Записан
RVZ
Гость
« Ответ #1 : Июль 09, 2012, 23:47 »

может быть дело в
deviceaddr int2 NOT NULL
его в ставки в рекорд я не заметил
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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