У процесі розробки програми під Qt , яка має працювати з базами даних, необхідно враховувати той нюанс, що драйвер Qt для цільової Бази Даних може не підтримувати всі типи даних, які Ви могли закласти у Вашу Базу Даних. Наприклад, один із подібних прикладів, з яким зіткнувся один із читачів сайту, це проблема з відображенням типу даних DECIMAL через QSqlTableModel . У той час як при розробці програми на C++ Builder цей тип даних відмінно відображався у поданні.
А робота проводилася з базою даних MSSQL , для якої використовувався драйвер ODBC . Результати роботи додатків на C++ Builder та на Qt наведені на нижченаведених малюнках. Різниця у вигляді таблиць у тому, що у додатку на Qt відсутні значення уявленні, де тип даних у базі даних було оголошено як DECIMAL .
C++ Builder - Всі колонки заповнені
Додаток на Qt – відсутні значення у колонках з типом даних DECIMAL
Перевіряємо типи даних у документації
При перевірці підтримуваних типів даних на сторінці в офіційної документації знаходимо типи даних, що підтримуються, вибраним драйвером та коригуємо Базу Даних відповідно до типів даних, які підтримуються цим драйвером.
Типи даних ODBC
Тип даних ODBC | Опис типу SQL | Рекомендований введення (тип даних C++ або Qt) |
---|---|---|
BIT | Логічний | BOOL |
TINYINT | 8 бітове ціле число | typedef qint8 |
SMALLINT | 16-розрядне ціле число зі знаком | typedef qint16 |
INTEGER | 32-розрядне ціле число зі знаком | typedef qint32 |
BIGINT | 64-розрядне ціле число зі знаком | typedef qint64 |
REAL | 32-бітовий одинарної точності з плаваючою комою | За замовчуванням відображення на QString |
FLOAT | 64-розрядна подвійна плаваюча кома | За замовчуванням відображення на QString |
DOUBLE | 64-розрядна подвійна плаваюча кома | За замовчуванням відображення на QString |
CHAR | Рядок символів | Відображається на QString |
VARCHAR | Рядок символів | Відображається на QString |
LONGVARCHAR | Рядок символів | Відображається на QString |
CLOB | Символ великого рядкового об'єкта | Відображається на QString |
DATE | Рядок символів | Зіставлено з QDate |
TIME | Час символу, рядок символів | Відображається на QTime |
TIMESTAMP | Час символу, рядок символів | Відображається на QDateTime |
Підсумок
В результаті тип DECIMAL був просто змінений на тип INTEGER і все злетіло.