Mam klasę (ServicesTableModel
), która dziedziczy po QSqlRelationalTableModel
. W konstruktorze mam:Metoda nazwy QSqlField zwraca ""
ServicesTableModel::ServicesTableModel(QWidget* parent, QSqlDatabase db)
: QSqlRelationalTableModel(parent, db)
{
setTable("servicios");
select();
...
}
Teraz, jeśli umieścić linię
qDebug() << primaryKey();
gdzie kropki to mam
QSqlRecord(1)
" 0:" QSqlField("ser_id", int, required: no, generated: yes)
co sprawia sens, ale po
qDebug() << primaryKey().name();
odpowiedź brzmi
""
, więc nie mogę dotrzeć do nazwy klucza podstawowego.
Stół jest SQLite, zdefiniowany
CREATE TABLE servicios (ser_id integer primary key, ...)
To ważne, ponieważ staram się uogólniać klasę dla obiektów ściśle związanych z wierszy w tabeli, a to wydaje się naturalne nie muszą zapewnić nazwa klucza podstawowego do konstruktora.
Pewnie robię coś nie tak, lub nie rozumiem, co robi metoda name()_
z QSqlField
.
QSqlField ma _name() _ metoda, ale _primaryKey() _ zwraca obiekt QSqlIndex i to jest jego _name() _ sposób, że dzwoni. Dlatego nie dostałem odpowiedzi. Po _setTable (tableName) _ QSqlTableModel pobiera swój klucz podstawowy w porządku, ale żeby uzyskać jego nazwę (dobrze, nazwa pola, która jest tym, czego potrzebowałem, aby móc podać tylko numer indeksu do konstruktora mojej klasy), jeśli jest to jeden klucz pola, należy wywołać _primaryKey(). fieldName (0) _. Więc musiałem tylko zapłacić nieco więcej atention i przeczytać dokumenty po odpoczynku. Wiem. To powinna być dla mnie lekcja. Mam nadzieję, że nie straciłem czasu. – Queequeg
jest całkowicie OK, aby odpowiedzieć na własne pytanie w odpowiedzi, aby inni mogli go przyjąć. –
Powinieneś być ostrożny z QSqlRelationalTableModel. Wydaje się, że po ustawieniu relacji 'name()' zwróci nazwę pola z 'relacji tabeli', a nie z oryginalnej tabeli. – Funt