crossplatform.ru

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

nZil
  опции профиля:
сообщение 1.9.2009, 20:59
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 20.7.2009
Пользователь №: 922

Спасибо сказали: 0 раз(а)




Репутация:   0  


Как вывести в один столбец два поля БД по такому шаблону <поле1> + " - " <поле2>?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 15)
ViGOur
  опции профиля:
сообщение 1.9.2009, 21:19
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


QMySqlRelationalTableModel *model = new QMySqlRelationalTableModel;
model->setQuery("SELECT id + ' - '  + subject, sender, recipient, date, body FROM messages");
так?

QMySqlRelationalTableModel потому, что класс модели прийдется переопределять, так как QSqlRelationalTableModel::setQuery вроде protected.

Сообщение отредактировал ViGOur - 1.9.2009, 21:21
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nZil
  опции профиля:
сообщение 2.9.2009, 17:05
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 20.7.2009
Пользователь №: 922

Спасибо сказали: 0 раз(а)




Репутация:   0  


переопределил.

void SqlRelationalTableModel::setSqlQuery(const QString &query)
{
    this->setQuery(QSqlQuery(query));
}

Запрос:
workersModel->setSqlQuery("SELECT id, incode, surname + \" \" + name + \" \" + lastname, birthdate, pseries, pnumber FROM workers");
Не получилось. В представлении отображаются все столбцы БД.

Сообщение отредактировал Litkevich Yuriy - 2.9.2009, 19:42
Причина редактирования: Используй тэг code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 2.9.2009, 17:19
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Полностью код приведи...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nZil
  опции профиля:
сообщение 2.9.2009, 17:22
Сообщение #5


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 20.7.2009
Пользователь №: 922

Спасибо сказали: 0 раз(а)




Репутация:   0  


эмм... Метод setSqlQuery(const QString &query) это и есть весь код класса
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nZil
  опции профиля:
сообщение 2.9.2009, 22:16
Сообщение #6


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 20.7.2009
Пользователь №: 922

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я недавно начал писать на Qt и вообще на объектно-ориентированных языках, так что тонкостей не знаю. я что то не так делаю?
Что надо ещё какиенить методы перегрузить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.9.2009, 22:54
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


nZil, приведи код и класса SqlRelationalTableModel (весь, и заголовочник и реализацию)
и приведи код использования и модели и приедствления.


Link
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nZil
  опции профиля:
сообщение 3.9.2009, 11:39
Сообщение #8


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 20.7.2009
Пользователь №: 922

Спасибо сказали: 0 раз(а)




Репутация:   0  


Описание класса:
#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"));
}




Строка запроса закомментирована, ибо не правильно работает:(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 3.9.2009, 12:15
Сообщение #9


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


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

    workersView = new QTableView;
    // ...


Сообщение отредактировал ViGOur - 3.9.2009, 12:16
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nZil
  опции профиля:
сообщение 3.9.2009, 12:28
Сообщение #10


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 20.7.2009
Пользователь №: 922

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

    workersView = new QTableView;
    // ...


да
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 3.9.2009, 13:02
Сообщение #11


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Кажется понял в чем проблема, если сделать тупо запрос приведенный тобой, то результат также будет не тот, который хотелось бы! :)
Попробуй так:
SELECT id, incode, CONCAT( surname, " ",  name,  " ", lastname), birthdate, pseries, pnumber FROM workers

по крайней мере под mysql работает... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nZil
  опции профиля:
сообщение 3.9.2009, 13:50
Сообщение #12


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 20.7.2009
Пользователь №: 922

Спасибо сказали: 0 раз(а)




Репутация:   0  


а под SqLite не очень( Вот что нарыл Link
только как это реализовать не написано(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.9.2009, 14:55
Сообщение #13


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(nZil @ 3.9.2009, 17:50) Link
только как это реализовать не написано
Это реализованно в БД. Один из столбцов в таблице является вычисляемым.
Код для 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)
);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 3.9.2009, 15:04
Сообщение #14


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Как вариант сделать вьюху, но вот только не знаю можно ее сделать для SqLite.
Но это только в том случае, если запрос напрямую к SqLite работает, а в модели нет.

Поэтому для начала нужно проверить правильно ли работает запрос... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nZil
  опции профиля:
сообщение 3.9.2009, 16:03
Сообщение #15


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 20.7.2009
Пользователь №: 922

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ясно что надо писать свои классы, на что нужно время, так что придется отложить это дело на неопределенный срок
Спасибо всем за внимание.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 3.9.2009, 16:04
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(ViGOur @ 3.9.2009, 16:04) Link
но вот только не знаю можно ее сделать для SqLite.


Можно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 13.8.2025, 15:14