crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Баг в QSqlTableModel?, Старанное поведение с записями у которых одно поле содержит NULL
Kagami
  опции профиля:
сообщение 12.3.2009, 15:40
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Написал небольшую программку для графической работы со своей базой sqlite3.
Базу создавал следующим SQL-запросом:
"CREATE TABLE updates (name TEXT UNIQUE, file TEXT, params TEXT)"

Потом сделал форму с QTableView и, соответственно, стал использовать QSqlTableModel. В конструкторе у меня есть такие строчки:
    //updatesDb - указатель на уже открытую ранее базу данных
    model = new QSqlTableModel(this, *updatesDb);
    tableView->setModel(model);
    model->setTable("updates");

А еще добавил слот, который вызывается по нажатию кнопки Del для удаления записи:
void UpdateBaseViewer::deleteRecord() {
    QMessageBox::information(this, "Deleting record", "Deleting started", QMessageBox::Ok, QMessageBox::Ok);
    int currentRow = tableView->currentIndex().row();
    model->removeRows(currentRow, 1);
    if (model->rowCount() == currentRow) tableView->setCurrentIndex(model->index(currentRow - 1,0));
    else tableView->setCurrentIndex(model->index(currentRow,0));
}

Строки в базу у меня добавлялись с помощью QSqlQuery:
    query.prepare("INSERT INTO updates VALUES (?, ?, ?)");
    query.addBindValue(updateName);
    query.addBindValue(updateFile);
    query.addBindValue(updateParams);
    query.exec();

при этом были строки, у которых третий параметр был NULL. Так вот, с такими строками я ничего не могу сделать ни в QTableView, ни в QSqlTableModel - ни удалить, ни изменить.
Это баг или фича?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 13.3.2009, 19:43
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Kagami, факт глюкаво

однако сосвоей БД я такого не наблюдаю

Создается так
    // Создаем таблицу груп пользователей
    querystr=" \
        CREATE TABLE APPGROUP \
        (  \
          F_ID            INTEGER    PRIMARY KEY AUTOINCREMENT,    /* Код группы - Первичный ключ */ \
          F_GROUP        Text        /* группа */ \
        ); \
        ";
    ok = appdbquery.exec(querystr);

Прикрепленный файл  app.zip ( 1.02 килобайт ) Кол-во скачиваний: 170


и вставку в коде я делаю не так как ты:
Цитата
INSERT INTO APPGROUP (F_ID, F_GROUP)VALUES (:id, :group)
т.е. перечисляю поля для вставки.
код:
    // Заполняем таблицу груп пользователей    
    querystr="INSERT INTO APPGROUP (F_ID, F_GROUP) VALUES (:id, :group)";
    appdbquery.prepare(querystr);
    appdbquery.bindValue(":id", GID_ROOT); appdbquery.bindValue(":group", "root");
    appdbquery.exec();
    appdbquery.bindValue(":id", GID_ADMIN); appdbquery.bindValue(":group", "admin");
    appdbquery.exec();
    appdbquery.bindValue(":id", GID_USER); appdbquery.bindValue(":group", "user");
    ok = appdbquery.exec();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.2.2025, 16:52