2016-02-21 2 views
2

У меня есть 3 таблицы:QSqlRelationalTableModel - две ссылки на ту же таблицу, одни и те же внешние ключи

enter image description here

Я хотел бы показать таблицу Orders (ордера даты начала и окончания, фамилия пользователя, имя службы и стоимость услуги) в графическом интерфейсе с использованием QTableView и QSqlRelationalTableModel. Вот где я создал таблицу и вид:

this->ordersTable = new QTableView(this); 
this->model = new QSqlRelationalTableModel(this, db->getDB()); 
this->model->setTable("ORDERS"); 
this->model->setRelation(3, QSqlRelation("USERS", "id", "lastname")); 
this->model->setRelation(4, QSqlRelation("SERVICE", "id", "name")); 
this->model->setRelation(4, QSqlRelation("SERVICE", "id", "price")); 
this->model->select(); 
this->ordersTable->setModel(this->model); 
this->ordersTable->hideColumn(0); 

Но когда я третий setRelation звонок, кажется, он переписывает на второй вызов: я могу видеть только цену на GUI, а не как имя и Цена. И мне нужно поместить оба поля - имя и цену из таблицы служб в мое представление.

ответ

2

Кажется, setRelation используется для разрешения только одного внешнего ключа, но вы хотите добавить два столбца. В этом случае вы можете использовать QSqlQueryModel, чтобы применить свой собственный индивидуальный запрос.

QSqlQueryModel model; 
QString q = "your sql query"; 
model.setQuery(q, db->getDB()); 
tableView->setModel(model); 

Для запроса вы можете достичь своей цели с помощью простого внутреннего запроса на соединение.

SELECT O.ID, O.START_TIME, O.END_TIME, U.LASTNAME, S.NAME, S.PRICE 
    FROM ORDERS O 
     INNER JOIN USERS U 
      ON O.USER_ID = U.ID 
     INNER JOIN SERVICE S 
      ON O.SERVICE_ID = S.ID 
+0

Это может быть решение, однако, я забыл упомянуть, что мне нужно внести изменения в БД, и документы говорят, что 'Класс QSqlQueryModel обеспечивает чтение - единственная модель данных для наборов результатов SQL, поэтому мне нужно что-то, что не будет доступно только для чтения. Спасибо, в любом случае :) – yak

1

Попробуйте это:

this->model->setRelation(4, QSqlRelation("SERVICE", "id", "name, price")); 

 Смежные вопросы

  • Нет связанных вопросов^_^