Как вывести в один столбец два поля БД по такому шаблону <поле1> + " - " <поле2>?
QMySqlRelationalTableModel *model = new QMySqlRelationalTableModel;
model->setQuery("SELECT id + ' - ' + subject, sender, recipient, date, body FROM messages");
так?переопределил.
void SqlRelationalTableModel::setSqlQuery(const QString &query)
{
this->setQuery(QSqlQuery(query));
}
workersModel->setSqlQuery("SELECT id, incode, surname + \" \" + name + \" \" + lastname, birthdate, pseries, pnumber FROM workers");
Не получилось. В представлении отображаются все столбцы БД.
Полностью код приведи...
эмм... Метод setSqlQuery(const QString &query) это и есть весь код класса
Я недавно начал писать на Qt и вообще на объектно-ориентированных языках, так что тонкостей не знаю. я что то не так делаю?
Что надо ещё какиенить методы перегрузить?
nZil, приведи код и класса SqlRelationalTableModel (весь, и заголовочник и реализацию)
и приведи код использования и модели и приедствления.
http://www.forum.crossplatform.ru/index.php?showtopic=1455
Описание класса:
#ifndef SQLRELATIONALTABLEMODEL_H
#define SQLRELATIONALTABLEMODEL_H
#include <QSqlRelationalTableModel>
#include <QSqlQuery>
class SqlRelationalTableModel : public QSqlRelationalTableModel
{
public:
SqlRelationalTableModel();
void setSqlQuery (const QString &query);
};
#endif // SQLRELATIONALTABLEMODEL_H
#include "sqlrelationaltablemodel.h"
SqlRelationalTableModel::SqlRelationalTableModel()
{}
void SqlRelationalTableModel::setSqlQuery(const QString &query)
{
this->setQuery(QSqlQuery(query));
}
void MWindow::createWorkersTab()
{
workersModel = new SqlRelationalTableModel;
workersModel->setTable("workers");
workersModel->setHeaderData(0, Qt::Horizontal, tr("Number in database"));
workersModel->setHeaderData(1, Qt::Horizontal, tr("Surname"));
//workersModel->setSqlQuery("SELECT id, incode, surname + \" \" + name + \" \" + lastname, birthdate, pseries, pnumber FROM workers");
workersModel->select();
workersView = new QTableView;
workersView->setModel(workersModel);
workersView->setSortingEnabled(true);
workersView->setAlternatingRowColors(true);
workersView->setShowGrid(false);
workersView->setSelectionBehavior(QAbstractItemView::SelectRows);
workersView->setSelectionMode(QAbstractItemView::SingleSelection);
//workersView->verticalHeader()->hide();
workersView->resizeColumnsToContents();
workersView->setEditTriggers(QAbstractItemView::NoEditTriggers);
main->addTab(workersView, QIcon (":/images/qt.png"), tr("Workers"));
}
А как ты делал и у тебя не работало, так?
workersModel = new SqlRelationalTableModel;
workersModel->setSqlQuery("SELECT id, incode, surname + \" \" + name + \" \" + lastname, birthdate, pseries, pnumber FROM workers");
workersView = new QTableView;
// ...
workersModel = new SqlRelationalTableModel;
workersModel->setSqlQuery("SELECT id, incode, surname + \" \" + name + \" \" + lastname, birthdate, pseries, pnumber FROM workers");
workersView = new QTableView;
// ...
Кажется понял в чем проблема, если сделать тупо запрос приведенный тобой, то результат также будет не тот, который хотелось бы!
Попробуй так:
SELECT id, incode, CONCAT( surname, " ", name, " ", lastname), birthdate, pseries, pnumber FROM workers
а под SqLite не очень( Вот что нарыл http://www.forum.crossplatform.ru/index.php?showtopic=2982&pid=21388&mode=threaded&start=#entry21388
только как это реализовать не написано(
CREATE TABLE REFPOINT
(
F_ID Integer NOT NULL,
F_NAME D_NAME NOT NULL,
F_OBJ D_NAME NOT NULL,
F_SUBOBJ D_NAME DEFAULT '',
F_OBJNAME COMPUTED BY (F_OBJ||' '||F_SUBOBJ)
F_COMMENT D_COMMENT,
F_REGDATE Timestamp NOT NULL,
CONSTRAINT PK_REFPOINT PRIMARY KEY (F_ID),
CONSTRAINT UK_REFPOINT UNIQUE (F_NAME)
);
Как вариант сделать вьюху, но вот только не знаю можно ее сделать для SqLite.
Но это только в том случае, если запрос напрямую к SqLite работает, а в модели нет.
Поэтому для начала нужно проверить правильно ли работает запрос...
Ясно что надо писать свои классы, на что нужно время, так что придется отложить это дело на неопределенный срок
Спасибо всем за внимание.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)