Название: Как в QSqlRelationalTableModel получить первичный индекс ? Отправлено: neosapient от Январь 28, 2010, 13:11 Здравствуйте.
Есть две связаных таблицы. Первая таблица Servers {ID int; Name varchar(16);}, перечисляет список возможных серверов. Вторая таблица Clients {ServerID int; Login int; Password varchar(16);}, перечисляет всех клиентов на каждом сервере. Присутствует связь между таблицами "один Servers.ID ко многим Clients.ServerID". Реализовал следующую схему подключения одной таблицы к дгругой Код: QSqlRelationalTableModel *model = QSqlRelationalTableModel (); Теперь собственно вопрос: как мне из модели получить числовой идентификатор сервера Clients.ServerID ? Проблема в том, что мне возвращается значение переменной Servers.Name. Код: qDebug() << model->data(model->index(row,0)).toString(); Название: Re: Как в QSqlRelationalTableModel получить первичный индекс ? Отправлено: MoPDoBoPoT от Январь 28, 2010, 13:58 Насчет этого есть 2 мысли:
1. Метод data() со 2-ым параметром по умолчанию возвращает значение данных с ролью Qt::DisplayRole (то есть то, что надо отобразить). Если попробовать вызвать так model->data(model->index(row,0), Qt::EditRole), то возможно получим реальные данные (то есть внешний ключ). 2. Попробовать вытащить через SqlRelationalTableModel::relationModel() Сам я QSqlRelationalTableModel никогда не использовал, поэтому только советую способы. Название: Re: Как в QSqlRelationalTableModel получить первичный индекс ? Отправлено: neosapient от Январь 28, 2010, 15:37 Цитировать 1. Метод data() со 2-ым параметром по умолчанию возвращает значение данных с ролью Qt::DisplayRole (то есть то, что надо отобразить). Если попробовать вызвать так model->data(model->index(row,0), Qt::EditRole), то возможно получим реальные данные (то есть внешний ключ). Подход не сработал. Так же возвращается Servers.NameЦитировать 2. Попробовать вытащить через SqlRelationalTableModel::relationModel() Подход сработал частично. Содержимое ячеек "группируется/схлопывается" (точного термина не подобрать).Код: // То есть я меняю строчку В итоге у меня есть таблица Clients
Мне возвращается таблица
Хотя я хочу получить
Подскажите, как в рамках описанного подхода выгрузить данные без "группировки/схлопывания" ? Название: Re: Как в QSqlRelationalTableModel получить первичный индекс ? Отправлено: mwChief от Апрель 02, 2011, 19:13 Тема старая, но столкнулся с аналогичной проблемой и хочу спросить не нашел ли кто-то решения? Пока единственное что пришло в голову это убирать связь между таблицами, получать индекс, а потом возвращать обратно. При этом дважды приходится вызывать model->select().
Название: Re: Как в QSqlRelationalTableModel получить первичный индекс ? Отправлено: hank от Апрель 07, 2011, 12:01 Так не подойдёт?
Код
Ну и потом берём нужную строку: Код
Название: Re: Как в QSqlRelationalTableModel получить первичный индекс ? Отправлено: mwChief от Апрель 07, 2011, 14:08 Спасибо за ответ, интересный костыль :).
Сам я сначала пробовал сохранять все id отдельно, но потом мне удалось вообще уйти от необходимости получать этот id. Также остается непонятным почему вариант с Qt::EditRole не работает. Может это баг Qt? Название: Re: Как в QSqlRelationalTableModel получить первичный индекс ? Отправлено: kkmspb от Май 22, 2022, 18:15 Хоть вопрос и старый, но в поиске выдается актуальном , 2022г.
Для Qt 4.8.1 давече решал проблему с id значением поля внешней связи через лайфхак исходников qt и вроде все работает как надо: QString QSqlRelationalTableModel::selectStatement() const ...... //!!! my fList.append(QLatin1String(", ")); fList.append(relTableAlias); fList.append(QLatin1String(".")); fList.append(relation.indexColumn()); fList.append(QLatin1String(" as ")); fList.append(relation.tableName()); fList.append(QLatin1String("_")); fList.append(relation.indexColumn()); Думаю идея понятна. Название: Re: Как в QSqlRelationalTableModel получить первичный индекс ? Отправлено: kkmspb от Февраль 03, 2023, 18:55 Хочу поделится, мы сделали свой вариант QSqlRelationalTableModel и заодно к нему новое развитие QTableView, и получилась готовая таблица PblTableDlg, у которой реализованы внешние связи, комбобоксы, чекбоксы, основные кнопки, поиск и чего там уже только нет... Настраивается все элементарно.
https://kkmspb.ru/development/Qt/database-sql/Fork-Sql/ (https://kkmspb.ru/development/Qt/database-sql/Fork-Sql/) https://github.com/PavelDorofeev/Fork-Sql-Qt-4.8.1--SQLite-3--relations--calc-fields (https://github.com/PavelDorofeev/Fork-Sql-Qt-4.8.1--SQLite-3--relations--calc-fields) p@kkmspb.ru Павел |