crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Qt и реляционная модель
Гость_Гость_Alexey_*_*
сообщение 28.5.2013, 16:58
Сообщение #1





Гости








    


Есть 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
Сообщение #2





Гости








    


решил так:
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) вставляются символы '' если пользователь ничего не вводил, как отсечь момент и сделать проверку : если пользователь ничего не ввел - то ему бы тригер базы вернул ошибку и сторка не добавилась?
Причина редактирования: используй тэг code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 6.10.2022, 6:55