Имеется такой код:
QSqlQuery qu(*pDB); // pDB - база данных
qu.exec("SELECT `CitiesAndCommunities`.`CityOrCommName`, `BuildingTypes`.`TypeName`, `TableBuildings`.`CountGov`, `TableBuildings`.`CountComm`, `TableBuildings`.`CountPrivate`"
"FROM `CitiesAndCommunities`, `TableBuildings`, `BuildingTypes` "
"WHERE `TableBuildings`.`CityOrCommID` = `CitiesAndCommunities`.`CityID` and `TableBuildings`.`BuildTypeID` = `BuildingTypes`.`TypeID`");
Есть некий метод.
void DBFacade::setMainTable(QTableView *tbl)
{
model = new QSqlTableModel(this, *pDB);
model->select();
tbl->setModel(model);
}
Если я сразу укажу, какую таблицу показывать...
model->setTable("BuildingTypes"); // Есть такая табличка с данными
model->select();
То выведет содержимое таблицы. Это мне пока не нужно.
Мне нужно указать результирующую таблицу с первого приведенного кода. Это возможно? Просто выводит, обычно, таблички с индексами, внешними ключами. А хотелось бы выводить сразу с данными, привязанными к ним. Подходит для таких целей QSqlTableModel?
// Извините, писал в спешке, потому и, может, что-то недорассказал. Если что, я скину, необходимые данные, если это поможет.
Поскольку QSqlTableModel унаследована от QSqlQueryModel, а последняя, в свою очередь, имеет метод QSqlQueryModel::setQuery(), то выполнение произвольного запроса и последующее наполнение модели-таблицы данными кажется вполне реальным. Единственное, в QSqlTableModel данный метод переопределён и объявлен как protected с пометкой в справке, общий смысл которой сводится к тому, что использовать его не то чтобы не рекомендуется, но и не приветствуется. Иными словами, QSqlTableModel предназначена для работы непосредственно с таблицами, но никак не с произвольными выборками.
В рассматриваемой ситуации я бы порекомендовал использовать т.н. представления (view), которые в некотором смысле позволяют эмулировать таблицу из произвольного запроса. В этом случае можно будет использовать QSqlTableModel в штатном режиме. Впрочем, есть и ограничения, но они уже будут исходить от самой СУБД.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей