2013-07-19 53 views
0

我的select語句看起來像這樣火鳥ODBC驅動程序的數據截斷在運行SELECT語句

SELECT tb1.name FROM table1 tb1, table2 tb2 WHERE tb2.name=? AND tb2.tb1_key_id=tb1.id; 

我Bindparameter調用如下

SQLBindParameter(m_hStatement,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,len,0,(LPVOID)buff,len,(SQLLEN *)pcbValue); 

其中buff is void*

當我在這個運行SQLExecute聲明它返回SQL_SUCCESS_WITH_INFO當我看着錯誤的細節它說[Firebird ODBC driver] data truncated

我完全新的數據庫,請讓我知道如果有更多的細節需要

BTW相同stament工作正常與32位應用程序,並得到這個問題,如果在64位編譯。

UPDATE - 再次回到這個問題。

我SQL跟蹤文件

MyApp 4e0-1680 ENTER SQLPrepareW 
    HSTMT    0x0000000008C9E210 
    WCHAR *    0x000000000DF04CE0 [  -3] "SELECT tb1.name FROM table1 tb1, table2 tb2 WHERE tb2.name=? AND tb2.tb1_key_id=tb1.id;\ 0" 
    SDWORD     -3 

MyApp 4e0-1680 EXIT SQLPrepareW with return code 0 (SQL_SUCCESS) 
    HSTMT    0x0000000008C9E210 
    WCHAR *    0x000000000DF04CE0 [  -3] "SELECT tb1.name FROM table1 tb1, table2 tb2 WHERE tb2.name=? AND tb2.tb1_key_id=tb1.id;\ 0" 
    SDWORD     -3 

MyApp 4e0-1680 ENTER SQLBindParameter 
    HSTMT    0x0000000008C9E210 
    UWORD      1 
    SWORD      1 <SQL_PARAM_INPUT> 
    SWORD      1 <SQL_C_CHAR> 
    SWORD      1 <SQL_CHAR> 
    SQLULEN     48 
    SWORD      0 
    PTR    0x0000000008B932D0 
    SQLLEN     48 
    SQLLEN *   0x0000000008B93008 

MyApp 4e0-1680 EXIT SQLBindParameter with return code 0 (SQL_SUCCESS) 
    HSTMT    0x0000000008C9E210 
    UWORD      1 
    SWORD      1 <SQL_PARAM_INPUT> 
    SWORD      1 <SQL_C_CHAR> 
    SWORD      1 <SQL_CHAR> 
    SQLULEN     48 
    SWORD      0 
    PTR    0x0000000008B932D0 
    SQLLEN     48 
    SQLLEN *   0x0000000008B93008 (4294967293) 

MyApp 4e0-1680 ENTER SQLBindParameter 
    HSTMT    0x0000000008C9E210 
    UWORD      2 
    SWORD      1 <SQL_PARAM_INPUT> 
    SWORD      1 <SQL_C_CHAR> 
    SWORD      1 <SQL_CHAR> 
    SQLULEN     48 
    SWORD      0 
    PTR    0x0000000008B93298 
    SQLLEN     48 
    SQLLEN *   0x0000000008B93008 

MyApp 4e0-1680 EXIT SQLBindParameter with return code 0 (SQL_SUCCESS) 
    HSTMT    0x0000000008C9E210 
    UWORD      2 
    SWORD      1 <SQL_PARAM_INPUT> 
    SWORD      1 <SQL_C_CHAR> 
    SWORD      1 <SQL_CHAR> 
    SQLULEN     48 
    SWORD      0 
    PTR    0x0000000008B93298 
    SQLLEN     48 
    SQLLEN *   0x0000000008B93008 (4294967293) 

MyApp 4e0-1680 ENTER SQLExecute 
    HSTMT    0x0000000008C9E210 

MyApp 4e0-1680 EXIT SQLExecute with return code 1 (SQL_SUCCESS_WITH_INFO) 
    HSTMT    0x0000000008C9E210 

    DIAG [01004] [ODBC Firebird Driver]Data truncated (0) 

    DIAG [01004] [ODBC Firebird Driver]Data truncated (0) 

MyApp 4e0-1680 ENTER SQLErrorW 
    HENV    0x0000000000000000 
    HDBC    0x0000000000000000 
    HSTMT    0x0000000008C9E210 
    WCHAR *    0x000000000A69BFE8 
    SDWORD *   0x000000000A69BFD4 
    WCHAR *    0x0000000000123CF0 
    SWORD      1024 
    SWORD *    0x0000000000124104 

MyApp 4e0-1680 EXIT SQLErrorW with return code 0 (SQL_SUCCESS) 
    HENV    0x0000000000000000 
    HDBC    0x0000000000000000 
    HSTMT    0x0000000008C9E210 
    WCHAR *    0x000000000A69BFE8 [  5] "01004" 
    SDWORD *   0x000000000A69BFD4 (0) 
    WCHAR *    0x0000000000123CF0 [  36] "[ODBC Firebird Driver]Data truncated" 
    SWORD      1024 
    SWORD *    0x0000000000124104 (36) 

MyApp 4e0-1680 ENTER SQLRowCount 
    HSTMT    0x0000000008C9E210 
    SQLLEN *   0x000000000

MyApp 4e0-1680 EXIT SQLRowCount with return code 0 (SQL_SUCCESS) 
    HSTMT    0x0000000008C9E210 
    SQLLEN *   0x000000000(-1) 

MyApp 4e0-1680 ENTER SQLNumResultCols 
    HSTMT    0x0000000008C9E210 
    SWORD *    0x000000000F4 

MyApp 4e0-1680 EXIT SQLNumResultCols with return code 0 (SQL_SUCCESS) 
    HSTMT    0x0000000008C9E210 
    SWORD *    0x000000000F4 (1) 

MyApp 4e0-1680 ENTER SQLNumParams 
    HSTMT    0x0000000008C9E210 
    SWORD *    0x000000000F4 

MyApp 4e0-1680 EXIT SQLNumParams with return code 0 (SQL_SUCCESS) 
    HSTMT    0x0000000008C9E210 
    SWORD *    0x000000000F4 (2) 

有什麼我可以提供給你幫助我這個

+0

如果您在這裏無法獲得答案,請嘗試使用Firebird ODBC列表,詳情請參閱http://www.firebirdsql.org/en/mailing-lists/。如果您的參數長於字段的聲明長度,則可能會出現此錯誤。 –

回答

0

我通常會得到奇怪的數據在Java中被截斷的問題時,我的SQL參數數據找不出即時消息發送的數據類型。它的所有內容都隱藏在幾層抽象層下,但通常是通過手動轉義輸入來修復它。

Ex。

select name from company where name = $P!{input} 

有時會導致SQL異常 '數據截斷'

select name from company where name = '$P!{input}' 

凡$ P!{手段把數據直入字符串。給那個鏡頭?也許這是一個類型推斷問題。