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
  опции профиля:
сообщение 14.3.2009, 9:39
Сообщение #2


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

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

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




Репутация:   94  


Цитата(Kagami @ 14.3.2009, 2:03) *
Я имел в виду писать в базу NULL

Цитата
void QSqlQuery::addBindValue ( const QVariant & val, QSql::ParamType paramType = QSql::In )
Adds the value val to the list of values when using positional value binding. The order of the addBindValue() calls determines which placeholder a value will be bound to in the prepared query. If paramType is QSql::Out or QSql::InOut, the placeholder will be overwritten with data from the database after the exec() call.
To bind a NULL value, use a null QVariant; for example, use QVariant(QVariant::String) if you are binding a string.


т.к. QString() имеет своё собственное представление отличное от NULL в БД
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




RSS Текстовая версия Сейчас: 30.11.2024, 3:02