1

odbc を使用してネイティブ C++ でアプリケーションを作成しています。10 進数のパラメーターを持つ SQL サーバー ストアド プロシージャを呼び出しています。そのパラメーターにフロートを渡しています。これまでのコード:

    SQLDECIMAL *sql_param = new SQLDECIMAL( param);
if( SQL_ERROR == ( result = SQLBindParameter( statement_handle, 5, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_DECIMAL, 12, 6, sql_param, 0, NULL ) ) ){
    std::wstring error = get_error_message( SQL_HANDLE_STMT, statement_handle );

    throw GenericException( error );
}

param は float です。

テーブルに格納される値は、実際の値である 1.45 ではなく、常に 0 です。何らかの変換が行われていると推測していますが、正しい変換がわかりません。SQL_C_FLOAT -> SQL_DECIMAL?

4

3 に答える 3

1

SQLDECIMAL が問題です。http://publib.boulder.ibm.com/infocenter/soliddb/v6r3/index.jsp?topic=/com.ibm.swg.im.soliddb.programmer.doc/doc/s0005314.c.data.typesによると.html unsigned char [f] です。私は次のようなものを提案します:

void bind_float(float* param) {
    SQLBindParameter( statement_handle, 5, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_DECIMAL, 12, 6, param, 0, NULL ) ) );
}
于 2013-08-17T07:24:42.490 に答える