2012-04-22 7 views
16

を返します。QSqlRelationalTableModelを継承するクラス(ServicesTableModel)があります。コンストラクタでは私が持っている:QSqlField name()メソッドは "

ServicesTableModel::ServicesTableModel(QWidget* parent, QSqlDatabase db) 
: QSqlRelationalTableModel(parent, db) 
{ 
    setTable("servicios"); 
    select(); 
    ... 
} 

を今、私はラインを配置するとドットがある

qDebug() << primaryKey(); 

は私が

QSqlRecord(1) 
" 0:" QSqlField("ser_id", int, required: no, generated: yes) 
完璧な理にかなって

が、後を得る

qDebug() << primaryKey().name(); 

答えは

「」

ので、私は、主キーの名前に到達することはできません。

表には、私は密接にテーブルの行に関連するオブジェクトのクラスを一般化しようとしている、そしてそれを提供するために、持っていない自然のようですので、これは重要

CREATE TABLE servicios (ser_id integer primary key, ...) 

で定義され、sqliteのです主キーの名前をコンストラクタに渡します。

確かに何か間違っているとか、の方法がQSqlFieldからどうなるかわかりません。

+3

QSqlFieldは(_nameを有すると共に、key.fieldName(i)で取得することができる)_方法が、_primaryKey()_ Iを呼び出したメソッド_)(QSqlIndexオブジェクトを返し、それがその_nameあります。だから私は答えを得られなかった。 _setTable(tableName)_後QSqlTableModelはプライマリキーを取得しますが、名前を取得します(フィールドの名前は必要なので、クラスのコンストラクタにインデックス番号だけを渡すことができます)。 1つのフィールドキーであれば、_primaryKey()。fieldName(0)_を呼び出す必要があります。 だから私はもう少し注意を払って、少し休んだ後でドキュメントを読んでいました。私が知っているのは です。それは私にとって教訓になるはずです。 私は誰も時間を失っていないことを願っています。 – Queequeg

+1

答えであなた自身の質問に答えるのは大丈夫です。他の人がそれをアップコートすることができます。 –

+0

QSqlRelationalTableModelには注意が必要です。リレーションを設定すると、 'name()'は元のテーブルからではなく、 'relation table'からフィールドの名前を返します。 – Funt

答えて

1

primaryKey.name()は、インデックスの名前を返します。

SQLでは、インデックスに名前を付けることができます。これは、キーに使用されているフィールドの名前とは無関係です。

インデックスはいくつかのフィールドで動作します。 各フィールド名は0<i<key.count()

関連する問題