Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вывод колонок таблицы в форму, по имени колонки в БД.
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
kharkov_max
День добрый.

Возможно ли выводить таблицу при помощи QSqlTableModel или QSqlQueryModel привязываясь не к ID колонки [0,1,2,3,...n], а к имени колонки в БД.
По большому счету для QSqlTableModel наверняка это не важно, а вот для QSqlQueryModel может быть сущесственно.
Т.к. в процессе разработки ПО может измениться запрос (к примеру изменится порядок вывода колонок) и соответственно так же отобразится в выводе таблицы.

Собственно если более конкретно, возможно ли это:
    QSqlQueryModel * model = new QSqlQueryModel;
        model->setQuery("SELECT * FROM books",db);
        model->removeColumn(0); // don't show the ID
        model->setHeaderData(0, Qt::Horizontal, QObject::trUtf8("Строка"));
        model->setHeaderData(1, Qt::Horizontal, QObject::trUtf8("Строка2"));


как то привязать не к Id колонки (setHeaderData(0, Qt::Horizontal, QObject::trUtf8("Строка"))), а к ее наименованию в БД.
С вероятностью в 99% имя колонки в БД будет всегда неизменно.

Спасибо.

Majestio
Цитата(kharkov_max @ 13.5.2013, 8:53) *
День добрый.

Возможно ли выводить таблицу при помощи QSqlTableModel или QSqlQueryModel привязываясь не к ID колонки [0,1,2,3,...n], а к имени колонки в БД.
По большому счету для QSqlTableModel наверняка это не важно, а вот для QSqlQueryModel может быть сущесственно.
Т.к. в процессе разработки ПО может измениться запрос (к примеру изменится порядок вывода колонок) и соответственно так же отобразится в выводе таблицы.

Собственно если более конкретно, возможно ли это:
    QSqlQueryModel * model = new QSqlQueryModel;
        model->setQuery("SELECT * FROM books",db);
        model->removeColumn(0); // don't show the ID
        model->setHeaderData(0, Qt::Horizontal, QObject::trUtf8("Строка"));
        model->setHeaderData(1, Qt::Horizontal, QObject::trUtf8("Строка2"));


как то привязать не к Id колонки (setHeaderData(0, Qt::Horizontal, QObject::trUtf8("Строка"))), а к ее наименованию в БД.
С вероятностью в 99% имя колонки в БД будет всегда неизменно.

Спасибо.

Возможно конечно. Но сперва нужно получить структуру полей в таблице. Например для PostgreSQL это можно сделать запросом:
SELECT a.attnum AS "Номер", a.attname AS "Поле",pg_catalog.format_type(a.atttypid, a.atttypmod) AS "Тип"
FROM pg_catalog.pg_attribute a
WHERE a.attrelid = (
SELECT c.oid FROM pg_catalog.pg_class AS c
LEFT JOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace
WHERE pg_catalog.pg_table_is_visible(c.oid) AND c.relname = 'A' -- вместо A подставляем имя нужной таблицы
)
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum


Получаем результат в виде:

Номер_Поля | Наименование_Поля | Тип_Поля
------------------------------------------------------------

Ну а дальше уже, зная наименования полей и их порядковые номера, выставляем нужный номер в model->setHeaderData
kharkov_max
Хмм...
Не думал что все так сложно.

А нет других более красивых и простых вариантов?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.