crossplatform.ru

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


  Ответ в Непонятный конструктор QSqlRelation
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
ViGOur Дата 15.1.2011, 15:20
  up
Litkevich Yuriy Дата 16.1.2002, 19:19
  displayColumn - отображаемая колонка, та что подставляется в замен.
Rocky Дата 13.1.2011, 16:58
  С фильтром вроде как разобрался... нужно так писать
m_pModelBook->setFilter(QString("BOOKS.SeriaID = %1").arg(sSeriaID));

так все работает как и задумано... Однако все равно непонятно что это за displayColumn - 3-й параметр конструктора... Я пробовал и так писать
m_pModelBook->setRelation(1, QSqlRelation("SERIAS", "SeriaID", "SeriaName"));

и так
m_pModelBook->setRelation(1, QSqlRelation("SERIAS", "SeriaID", "SeriaID"));

И результаты ничем не отличаются...
Rocky Дата 13.1.2011, 12:48
  Всем привет! Вот читаю описание конструктора класса
QSqlRelation::QSqlRelation ( const QString & tableName, const QString & indexColumn, const QString & displayColumn )
Constructs a QSqlRelation object, where tableName is the SQL table name to which a foreign key refers, indexColumn is the foreign key,
and displayColumn is the field that should be presented to the user.

Может кто-нибудь объяснить пожалуйста, что это за displayColumn? Где он, в какой таблице отображается пользователю? Я чето вообще не доганяю. Просто вот у меня есть пример (написал программу-картотеку):
m_pModelBook = new QSqlRelationalTableModel(this);
m_pModelBook->setTable("BOOKS");
m_pModelBook->setRelation(1, QSqlRelation("SERIAS", "SeriaID", "SeriaName"));
m_pModelBook->select();

Поле SeriaID - это PM в таблице SERIAS. Это же поле в колонке 1 в таблице BOOKS. Далее ставлю фильтр на модель книг. Хочу, чтобы в QTableView показывались только книги, у которых определенный SeriaID. Делаю так:
m_pModelBook->setFilter("SeriaID = 10");

SeriaID 10 100% есть в обоих таблицах. Результат - QTableView пустой. А вот если написать
m_pModelBook->setFilter("SeriaName = 'С++'");

, то в QTableView отображаются все книги, которые занесены в таблицу BOOKS, и у которых поле SeriaID указывает на запись таблицы SERIAS, и этому SeriaID соответствует SeriaName "С++".

Проблема в том, что в БД (использую SQLite) всего одна таблица SERIAS. И там может быть несколько записей с одним и тем же именем (например "Общее"), но с разными SeriaID. Поэтому правильно ставить фильтр на SeriaID а не на SeriaName. Что я делаю не так?

Спасибо.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.4.2024, 3:33