Russian Qt Forum

Qt => Базы данных => Тема начата: nata267 от Декабрь 16, 2010, 16:46



Название: Вопрос по SqlRelationalTableModel
Отправлено: nata267 от Декабрь 16, 2010, 16:46
Я использую SqlRelationalTableModel+QTableView. По кнопке "добавить" формы у меня такой слот срабатывает:
Код:
    int row = model->rowCount();
    int id = model->rowCount()==0 ? 1 : model->record(model->rowCount()-1).value("id").toInt()+1;
    model->insertRows(row,1);
    model->setData(model->index(row,0),id);
    model->setData(model->index(row,2),4);

строки добавляются но пустые, почему???
мне не надо сразу в базу заносить и я не вызываю

Код:
    model->submitAll();
    model->select();


Название: Re: Вопрос по SqlRelationalTableModel
Отправлено: crossly от Декабрь 16, 2010, 16:59
DDL для таблиц покажите


Название: Re: Вопрос по SqlRelationalTableModel
Отправлено: nata267 от Декабрь 16, 2010, 18:44
CREATE TABLE `recipes_ingredients` ("
  "`id` INTEGER PRIMARY KEY AUTOINCREMENT,"
  "`recipe_id` integer default NULL,"
  "`quantity` integer default NULL,"
  "`unit_id` integer default NULL,"
  "`ingredient_id` integer default NULL"
");


Название: Re: Вопрос по SqlRelationalTableModel
Отправлено: crossly от Декабрь 16, 2010, 19:26
а что означает
Цитировать
строки добавляются но пустые, почему???
?
взглянуть можно?


Название: Re: Вопрос по SqlRelationalTableModel
Отправлено: lit-uriy от Декабрь 16, 2010, 19:49
>>мне не надо сразу в базу заносить и я не вызываю
а политику правильно установил?


Название: Re: Вопрос по SqlRelationalTableModel
Отправлено: nata267 от Декабрь 17, 2010, 09:27
model->setEditStrategy(QSqlTableModel::OnManualSubmit);

и когда в таблице пытаюсь редактировать то же самое - ячейки после редактирования пустые становятся


Название: Re: Вопрос по SqlRelationalTableModel
Отправлено: browncoat от Декабрь 17, 2010, 09:42
Столбец id это же AUTOINCREMENT, а Вы его значения вручную задаете?
И select() же не вносит данные в БД ( http://www.doc.crossplatform.ru/qt/4.7.x/qsqltablemodel.html#select ).


Название: Re: Вопрос по SqlRelationalTableModel
Отправлено: nata267 от Декабрь 17, 2010, 09:43
спасибо, я нашла косяк, он был вот в чем:

Код:
class RecipeIngredientsModel : public QSqlRelationalTableModel {

    Q_OBJECT
public:
    RecipeIngredientsModel(QObject *parent = 0):
                QSqlRelationalTableModel(parent)
    {}
    QVariant data(const QModelIndex &index,
                   int role = Qt::DisplayRole) const
    {
        QVariant value =QSqlQueryModel::data(index, role);
        switch (role) {
            case Qt::SizeHintRole:  // Размер ячейки
                return QSize(300, 10);
        }
        return value;
    }
};

QVariant value =QSqlQueryModel::data(index, role);
а нужно
QVariant value =QSqlRelationalTableModel::data(index, role);


Название: Re: Вопрос по SqlRelationalTableModel
Отправлено: nata267 от Декабрь 17, 2010, 10:40
теперь другие косяки появились:
1/ при удалении строк они с экрана не удаляются а только отмечаются !
2/ при добавлении вместо номера строки *
скажите, это возможно исправить??



Название: Re: Вопрос по SqlRelationalTableModel
Отправлено: nata267 от Декабрь 17, 2010, 11:34
удаленную строку можно скрыть
view->setRowHidden(row, true);
а от * наверно никуда не дется


Название: Re: Вопрос по SqlRelationalTableModel
Отправлено: browncoat от Декабрь 22, 2010, 09:51
а от * наверно никуда не дется
Значения этого столбца можно изменить через setHeaderData(), установив ориентацию Qt::Vertical.


Название: Re: Вопрос по SqlRelationalTableModel
Отправлено: nata267 от Декабрь 22, 2010, 10:28
а от * наверно никуда не дется
Значения этого столбца можно изменить через setHeaderData(), установив ориентацию Qt::Vertical.


пробовала, не помогло, я просто скрываю: m_ui.tableView->verticalHeader()->hide();