Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: phill13 от Май 10, 2010, 22:37



Название: QSqlRelationalDelegate подскажите
Отправлено: phill13 от Май 10, 2010, 22:37
QSqlRelationalTableModel *compositionsRelation = new QSqlRelationalTableModel;
    compositionsRelation->setTable("bd");

    compositionsRelation->setEditStrategy(QSqlTableModel::OnRowChange);

    compositionsRelation->setRelation(0, QSqlRelation("client", "Kod_client", "Surname"));
    compositionsRelation->setRelation(1, QSqlRelation("film", "Kod_film", "Film"));
    compositionsRelation->setRelation(2, QSqlRelation("seller", "Kod_seller", "Surname"));
    compositionsRelation->setRelation(5, QSqlRelation("c_document", "Kod_document", "Document"));

    compositionsRelation->select();

    compositionsRelation->setHeaderData(0, Qt::Horizontal, QObject::tr("Фамилия клиента"));
    compositionsRelation->setHeaderData(1, Qt::Horizontal, QObject::tr("Название фильма"));
    compositionsRelation->setHeaderData(2, Qt::Horizontal, QObject::tr("Фамилия продавца"));
    compositionsRelation->setHeaderData(3, Qt::Horizontal, QObject::tr("Дата выдачи"));
    compositionsRelation->setHeaderData(4, Qt::Horizontal, QObject::tr("Дата возврата"));
    compositionsRelation->setHeaderData(5, Qt::Horizontal, QObject::tr("Документ залога"));
    compositionsRelation->setHeaderData(6, Qt::Horizontal, QObject::tr("Возврат"));

    QTableView *view = new QTableView(this);
    view->setModel(compositionsRelation);
    view->setWindowTitle(QObject::tr("Видео прокат"));
    view->setGeometry(190,45,691,351);
    view->setItemDelegate(new QSqlRelationalDelegate(view));
    view->show();


Помогите, на изменение значения в любой ячейки таблицы выдает ошибку "QSqlQuery::value: not positioned on a valid record".
Подключаю базу создаю QSqlRelationalTableModel. Потом создаю "QTableView *view".
Пытаюсь засунуть делегат "view->setItemDelegate(new QSqlRelationalDelegate(view));" ,чтобы можно было нормально редактировать таблицу, на что он мне пишет что "QSqlRelationalDelegate is not a type name".

Объясните пожалуйста что не так? уже все кипит, и объясните что такое делегат и  с чем его едят. ???


Название: Re: QSqlRelationalDelegate подскажите
Отправлено: Marat(Qt) от Май 11, 2010, 01:41
#include <QSqlRelationalDelegate>


Название: Re: QSqlRelationalDelegate подскажите
Отправлено: phill13 от Май 11, 2010, 07:09
#include "dialog.h"
#include "ui_dialog.h"
#include <QtSql>
#include <QtGui>
#include <QTextCodec>
#include <QSqlRelationalDelegate>

подключенно все

Даже вот с этим база компилится "QSqlRelationalDelegate is not a type name".

Но при изменении в таблице значения  в базе пишет вот это "QSqlQuery::value: not positioned on a valid record" и не сохраняет данные.
В чем трабла не пойму


Название: Re: QSqlRelationalDelegate подскажите
Отправлено: phill13 от Май 11, 2010, 10:50
Люди чуствует моя душа что вот эта ошибка не дает редактировать  таблицу "QSqlQuery::value: not positioned on a valid record".
Помогите!


Название: Re: QSqlRelationalDelegate подскажите
Отправлено: phill13 от Май 11, 2010, 10:56
compositionsRelation->setRelation(0, QSqlRelation("client", "Kod_client", "Surname"));
    compositionsRelation->setRelation(1, QSqlRelation("film", "Kod_film", "Film"));
    compositionsRelation->setRelation(2, QSqlRelation("seller", "Kod_seller", "Surname"));
    compositionsRelation->setRelation(5, QSqlRelation("c_document", "Kod_document", "Document"));

если отключить эту часть программы , то редактируется успешно, но эта часть отвечает за замену столбцо с других таблиц чтобы не циферками отображалась информация в таблицы bd


Название: Re: QSqlRelationalDelegate подскажите
Отправлено: Marat(Qt) от Май 11, 2010, 11:34
Код:
    compositionsRelation->setRelation(0, QSqlRelation("client", "\"Kod_client\"", "\"Surname\""));
    compositionsRelation->setRelation(1, QSqlRelation("film", "\"Kod_film\"", "\"Film\""));
    compositionsRelation->setRelation(2, QSqlRelation("seller", "\"Kod_seller\"", "\"Surname\""));
    compositionsRelation->setRelation(5, QSqlRelation("c_document", "\"Kod_document\"", "\"Document\""));



Название: Re: QSqlRelationalDelegate подскажите
Отправлено: phill13 от Май 11, 2010, 12:12
нечего не выводит.
Код клиента и Код фильма у меня состовной ключ в таблице bd .

Такие страности заметел
 compositionsRelation->setRelation(0, QSqlRelation("client", "Kod_client", "Surname"));
    compositionsRelation->setRelation(1, QSqlRelation("film", "Kod_film", "Film"));
отключаю две замены столбцов(они у меня в таблице бд в роли составного ключа) все прекрасно работает.

Как только включаю замену одну из них прекращает все работать и выдает ошибку "QSqlQuery::value: not positioned on a valid record".
СУДБ mysql использую.


Название: Re: QSqlRelationalDelegate подскажите
Отправлено: cnx.faeon от Август 05, 2010, 18:24
Аналогичная проблема и у меня

взято из стандартного примера

Код:
tablemodel=new QSqlTableModel();
tablemodel->setTable("test");
tablemodel->setEditStrategy(QSqlTableModel::OnManualSubmit);
tablemodel->select();
tablemodel->removeColumn(0); // don't show the ID
tablemodel->setHeaderData(0, Qt::Horizontal, tr("Name"));
tablemodel->setHeaderData(1, Qt::Horizontal, tr("Salary"));

при попытке сохранить данные выдает
Код:
QSqlQuery::value: not positioned on a valid record