Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Модель/Представление _ Qt и реляционная модель

Автор: Гость_Alexey_* 28.5.2013, 16:58

Есть 2 таблицы:

А1

int: id
text: name
int: id_a2


А2

int: id
text: name


Нужно:
Отрисовать 2 формы: просмотр и добавление/редактирование

с 1-ой все понятно, там мне нужно только поле A1.name(QSqlTableModel использую). из нее и вызываю форму 2.

со 2-ой, проблемы. Передаю в конструктор формы QModelIndex и QSqlTableModel от них и пляшу
Необходимы на данной форме 2-вкладки(QTabWidget):
на первой(QDialog) — A1.name(QLineEdit)
на второй(QDialog) — A2.name(QComboBox)

Скажу сразу:
3 дня убил на QSqlRelationalTableModel+QDataWidgetMapper — не растет кокос!
QDataWidgetMapper не сабмитит!! и в QComboBox криво значения мапит.


Так, вот — хотелось бы по старинке засабмитить QSqlRecord.
Но тут не понятно как корректно в A2.name(QComboBox) выставить значение текущего A1.id_a2???
и потом собирать QSqlRecord.

З.Ы. QSqlRelationalTableModel+QDataWidgetMapper работает только с существующими значениями? А как быть если необходимо строку добавить?

Автор: Гость 30.5.2013, 15:33

решил так:

int row_count = model_->rowCount();
    QSqlRecord rec  = model_->record();
    rec.setGenerated(0, false);

    if(!model_->insertRecord(row_count, rec))
    {

        return;
    }

    current_index_ = model_->index(row_count, 0);
    view_->setCurrentIndex(current_index_);

    editConnection dlg(model_, &current_index_);
    if(dlg.exec() != QDialog::Accepted)
    {

    }
    else
    {

    }
    view_->setCurrentIndex(current_index_);



Но при добавлении записи в таблицу, в поле таблице(text NOT NULL) вставляются символы '' если пользователь ничего не вводил, как отсечь момент и сделать проверку : если пользователь ничего не ввел - то ему бы тригер базы вернул ошибку и сторка не добавилась?

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)