Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не могу получить данные из поля типа MONEY
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
silver47
Добрый день.
Столкнулся с такой проблемой: есть данные типа money в БД MS SQL, при запросе SELECT возвращается пустое значение.

Проблема повторяется и на Qt 4.8.4 и на Qt 5.0.1 с Win7.

С чем может быть связано? Спасибо.
Алексей1153
структуру таблицы и запрос в студию, что тут скрывать )
silver47
Цитата(Алексей1153 @ 24.4.2013, 17:04) *
структуру таблицы и запрос в студию, что тут скрывать )


Думаете чем то поможет?

Таблица:
Раскрывающийся текст
CREATE TABLE [dbo].[sale] (
[id] int NOT NULL,
[saleid] int NULL,
[operationid] int NULL,
[peopleid] int NULL,
[itemid] int NULL,
[itemcount] money NULL,
[cost] money NULL,
[printed] bit NULL,
[daytime] datetime NULL
)
ON [PRIMARY]
GO


Запрос любой, затрагивающий значение поля cost или itemcount.
Например:
Раскрывающийся текст

query.exec("SELECT id, cost FROM sale WHERE saleid = '21144'");
query.first();
qDebug() << __FILE__ << __LINE__ << query.value(0) << query.value(1) << query.lastError().text();
[u]Вывод:[/u] ..\BillChecker_Qt_4\widget.cpp 107 QVariant(int, 132967) QVariant(, )

Iron Bug
Цитата(silver47 @ 25.4.2013, 9:27) *
saleid = '21144'

я что-то не уверена, что SQL это сожрёт. значение типа VARCHAR в поле типа INT обычно переводится через CAST. хотя, насчёт MS SQL я не помню деталей.
lanz
Если используется драйвер ODBC, то он не поддерживает тип MONEY. Можно вместо него использовать DECIMAL, либо в SELECT делать CAST.
silver47
Цитата(Iron Bug @ 25.4.2013, 10:46) *
я что-то не уверена, что SQL это сожрёт. значение типа VARCHAR в поле типа INT обычно переводится через CAST. хотя, насчёт MS SQL я не помню деталей.

SQL это сожрет и MS SQL и PostgreSQL и SQLite, кроме того, чуть выше был вывод qDebug, где видно, что запрос данные то вернул, так что дело не в этом. К тому же это был пример для того чтобы показать проблему, в реальной жизни там значение подставляется через QSqlQuery::bindValue();

Цитата(lanz @ 25.4.2013, 11:13) *
Если используется драйвер ODBC, то он не поддерживает тип MONEY. Можно вместо него использовать DECIMAL, либо в SELECT делать CAST.

Используется ODBC, менять тип поля нельзя. Пока обхожусь CAST.
Думал вообще-то что QVariant не поддерживает тип MONEY, а оказалось что драйвер гм....
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.