3

私は3つのテーブルを持っています:

ここに画像の説明を入力

QTableViewと を使用して GUI に Orders テーブル (注文の開始日と終了日、ユーザーの姓、サービス名、サービス価格) を表示したいと思います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);

しかし、3 番目の呼び出しを行うsetRelationと、2 番目の呼び出しが上書きされるようです。名前と価格の両方ではなく、GUI でのみ価格を確認できます。そして、サービス テーブルの名前と価格の両方のフィールドをビューに配置する必要があります。

4

2 に答える 2

4

これを試して:

this->model->setRelation(4, QSqlRelation("SERVICE", "id", "name, price"));
于 2016-03-19T11:16:53.033 に答える
2

setRelation1 つの外部キーのみを解決するために使用されているようですが、2 つの列を追加したいと考えています。この場合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
于 2016-02-21T16:30:37.617 に答える