2011-06-05 34 views
0

我有2臺計算機。當使用SQLFetch()和SQL_C_FLOAT時出現「數值超出範圍」錯誤

安裝了Windows Server 2003和SQL Server 2000的第一個(A)。這臺電腦上有一個數據庫。此數據庫添加到ODBC數據源與SQLServer驅動程序版本 - 2000.85.1022。

第二個(B)與Windows 7 64位。來自計算機A的數據庫也通過SQLServer Native Client添加到ODBC數據源。驅動程序版本 - 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); 

當我在計算機上調用此軟件時一切正常。 當我在計算機上調用它時,B連接執行得很好,但使用SQLFetch()後,出現「數值超出範圍」錯誤(22003)。

field1在數據庫中聲明爲十進制數9(18:2)。存儲的值是「0.50」

所以現在的問題是如何使計算機B上

的DB不是由我創建工作,我不是一個數據庫專家都沒有。所以希望你能幫助我。

謝謝。

p.s.當我使用SQL_C_CHAR獲取值時,一切正常。

+0

爲0.50只存在的價值?你可以嘗試其他值(0.00,1.00,說)? – 2011-06-05 13:31:11

+0

沒有區別。其他值產生相同的結果 – 2011-06-05 13:49:20

+0

SQLExecDirectEx似乎不存在,只有SQLExecDirect。你有沒有真正產生問題的示例代碼? – 2011-06-05 15:45:37

回答

0

我不知道這是你的問題,但我個人從來沒有在我的C代碼中使用浮點數據類型。這可能值得嘗試:

double field1Val; 
SQLBindCol(m_hstmt, 1, SQL_C_DOUBLE, &field1Val, 0, &cbCustID); 
+0

這不是我的代碼,但我需要對其進行一些更改。我試過「雙」,但它不能解決問題。 – 2011-06-05 13:02:56

1

我有同樣的問題。

Windows 7 64位。 SQL Server 2008 64位。

嘗試在數據庫中的Decimal字段上使用SQL_C_DOUBLE執行SQLGetData。

我認爲SQL本機客戶端驅動程序有問題。

在32位的Windows 7,它工作正常

在64位Windows 7與MDAC的驅動程序,它工作正常

到底對我來說,解決辦法是安裝SQL Server 2008 R2 Native Client驅動程序。

雖然,因爲這需要一個額外的可再發行筆者將要測試和分發SQL 2008 R2,而不是