crossplatform.ru

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


  Ответ в Вычисляемый столбец в QSqlRelationalTableModel
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
SABROG Дата 3.9.2009, 16:04
 
Цитата(ViGOur @ 3.9.2009, 16:04) *
но вот только не знаю можно ее сделать для SqLite.


Можно.
nZil Дата 3.9.2009, 16:03
  Ясно что надо писать свои классы, на что нужно время, так что придется отложить это дело на неопределенный срок
Спасибо всем за внимание.
ViGOur Дата 3.9.2009, 15:04
  Как вариант сделать вьюху, но вот только не знаю можно ее сделать для SqLite.
Но это только в том случае, если запрос напрямую к SqLite работает, а в модели нет.

Поэтому для начала нужно проверить правильно ли работает запрос... :)
Litkevich Yuriy Дата 3.9.2009, 14:55
 
Цитата(nZil @ 3.9.2009, 17:50) *
только как это реализовать не написано
Это реализованно в БД. Один из столбцов в таблице является вычисляемым.
Код для Firebird'а:
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)
);
nZil Дата 3.9.2009, 13:50
  а под SqLite не очень( Вот что нарыл http://www.forum.crossplatform.ru/index.ph...art=#entry21388
только как это реализовать не написано(
ViGOur Дата 3.9.2009, 13:02
  Кажется понял в чем проблема, если сделать тупо запрос приведенный тобой, то результат также будет не тот, который хотелось бы! :)
Попробуй так:
SELECT id, incode, CONCAT( surname, " ",  name,  " ", lastname), birthdate, pseries, pnumber FROM workers

по крайней мере под mysql работает... :)
nZil Дата 3.9.2009, 12:28
 
Цитата(ViGOur @ 3.9.2009, 12:15) *
А как ты делал и у тебя не работало, так?
    workersModel = new SqlRelationalTableModel;
    workersModel->setSqlQuery("SELECT id, incode, surname + \" \" + name + \" \" + lastname, birthdate, pseries, pnumber FROM workers");

    workersView = new QTableView;
    // ...


да
ViGOur Дата 3.9.2009, 12:15
  А как ты делал и у тебя не работало, так?
    workersModel = new SqlRelationalTableModel;
    workersModel->setSqlQuery("SELECT id, incode, surname + \" \" + name + \" \" + lastname, birthdate, pseries, pnumber FROM workers");

    workersView = new QTableView;
    // ...
nZil Дата 3.9.2009, 11:39
  Описание класса:
#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"));
}




Строка запроса закомментирована, ибо не правильно работает:(
Litkevich Yuriy Дата 2.9.2009, 22:54
  nZil, приведи код и класса SqlRelationalTableModel (весь, и заголовочник и реализацию)
и приведи код использования и модели и приедствления.


Справка по тэгам
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 24.10.2021, 20:53