crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Не могу получить данные из поля типа MONEY, Возвращает пустоту с БД MSSQL
silver47
  опции профиля:
сообщение 24.4.2013, 6:57
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Добрый день.
Столкнулся с такой проблемой: есть данные типа money в БД MS SQL, при запросе SELECT возвращается пустое значение.

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

С чем может быть связано? Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 24.4.2013, 14:04
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


структуру таблицы и запрос в студию, что тут скрывать )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 25.4.2013, 6:27
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Цитата(Алексей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
  опции профиля:
сообщение 25.4.2013, 7:46
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


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

я что-то не уверена, что SQL это сожрёт. значение типа VARCHAR в поле типа INT обычно переводится через CAST. хотя, насчёт MS SQL я не помню деталей.

Сообщение отредактировал Iron Bug - 25.4.2013, 7:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 25.4.2013, 8:13
Сообщение #5


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Если используется драйвер ODBC, то он не поддерживает тип MONEY. Можно вместо него использовать DECIMAL, либо в SELECT делать CAST.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 25.4.2013, 10:45
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Цитата(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, а оказалось что драйвер гм....

Сообщение отредактировал silver47 - 25.4.2013, 12:19
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 18:38