Ошибка «Числовое значение вне диапазона» при использовании SQLFetch () с SQL_C_FLOAT - PullRequest
0 голосов
/ 05 июня 2011

У меня 2 компьютера.

Первый (A) с установленными Windows Server 2003 и SQL Server 2000.На этом компьютере существует база данных.Эта база данных добавлена ​​в источники данных ODBC с версией драйвера SQLServer - 2000.85.1022.

Вторая (B) с 64-битной Windows 7.База данных с компьютера A также добавлена ​​в источники данных ODBC через собственный клиент SQLServer.Версия драйвера - 2007.100.1600.22.

У меня есть программное обеспечение, которое подключается к базе данных с использованием источника данных ODBC, получает некоторые данные и выполняет вычисления.Код выглядит так:

wsprintf ((LPSTR)m_stmt,"select field1 from MyTable Order by field1");  

float field1Val;
SQLExecDirectEx(m_hstmt,m_stmt,SQL_NTS);
SQLBindCol(m_hstmt, 1, SQL_C_FLOAT, &field1Val, 0, &cbCustID);
m_retcode = SQLFetch(m_hstmt);

Когда я запускаю эту программу на компьютере A, все работает нормально. Когда я вызываю его на компьютере, соединение B работает нормально, но после использования SQLFetch () я получаю ошибку «Числовое значение вне диапазона» (22003).

field1, объявленное в базе данных какдесятичное 9 (18: 2).Сохраненное значение равно «0,50»

Так что вопрос в том, как заставить его работать на компьютере B.

БД не была создана мной, и ясовсем не эксперт по базам данных.Надеюсь, вы мне поможете.

Спасибо.

ps, когда я выбираю значение с помощью SQL_C_CHAR, все работает нормально.

Ответы [ 2 ]

1 голос
/ 03 октября 2011

У меня была такая же проблема.

Windows 7 64 бит. SQL Server 2008 64 бит.

Попытка создать SQLGetData с SQL_C_DOUBLE для десятичного поля в базе данных.

Я предполагаю, что что-то не так с драйвером собственного клиента SQL.

В 32-битной Windows 7 работает нормально

В 64-битной Windows 7 с драйвером MDAC все работает нормально

В итоге я решил установить драйвер собственного клиента SQL Server 2008 R2.

Хотя для этого требуется дополнительный распространяемый продукт, вместо этого я буду тестировать и распространять SQL 2008 R2

0 голосов
/ 05 июня 2011

Я не знаю, является ли это вашей проблемой, но я бы лично никогда не использовал тип данных с плавающей точкой в ​​моем C-коде.Возможно, стоит попробовать:

double field1Val;
SQLBindCol(m_hstmt, 1, SQL_C_DOUBLE, &field1Val, 0, &cbCustID);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...