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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlTableModel не добавляет данные если переопределить flags  (Прочитано 5441 раз)
rik_mik_2raza
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« : Февраль 04, 2024, 20:54 »

Доброго времени суток.
Специально написал тестовую прогу чтобы найти причину.
https://disk.yandex.ru/d/CI2NohoT0Ps7Ww
Вообщем в чем суть добавляю в базу данные используя 
Код:
class Abonent_Model : public QSqlTableModel
Код:
bool Abonent_Model::add_model_abonent(const QString &nick_name, const QByteArray & hash, const QString & avatar)
{

    //qDebug() <<  "m_model->tableName() = " << m_model->tableName();
   // m_qdb.transaction();
    QSqlRecord record = this->record();
   // record.clear();


    record.setValue("nick_name", nick_name);
    record.setValue("hash_abonent", hash);
    record.setValue("last_date_time", QDateTime::currentDateTime().toString("dd.MM.yyyy hh:mm"));
    record.setValue("avatar", avatar);

    if(this->insertRecord(-1, record)) //add to model
    {
        if (!this->submitAll()) //add to base_data
        {
            qDebug() << "Error database line: " << __LINE__ << this->database().lastError().text();
            qDebug() << "Error model line: " << __LINE__ << this->lastError().text();
            this->revertAll();
            return false;
        }

        return true;
    }
    else //TODO db & rollback
    {
        qDebug() << "Error database line: " << __LINE__ << this->database().lastError().text();
        qDebug() << "Error model line: " << __LINE__ << this->lastError().text();
        this->database().rollback();
    }
    return false;
}

И submitAll выдает ошибку мол не чего добавлять в базу. (Error model line:  33 "No Fields to update")

Теперь заремим переопределенный метод и его реализацию 
Код:
protected:
    Qt::ItemFlags flags(const QModelIndex &index) const;

//Qt::ItemFlags Abonent_Model::flags(const QModelIndex &index) const
//{
//    if(!index.isValid())
//        return Qt::ItemIsEnabled;
//    return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
//}

и теперь все прекрасно добавляется, это походу баг QSqlTableModel, так как эти flags связаны с представлением , а не с базой. Может кто сталкивался гляньте ?
Конечно можно добавить через
Код:
QSqlQuery query(m_qdb);
    ok = query.exec("insert into abonents values('nick1', '111111111', '2.02.2024 02:01', '')");
    if(!ok)
    {
        qDebug() << __LINE__ << "query.exec" << query.lastError().text();
    }
Но это так не устраивает , тогда лучше использовать libsqlite  и свою модель от QAbstractItemModel , а не это вот все
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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