- 论坛徽章:
- 0
|
本帖最后由 lijuwen 于 2011-04-29 12:51 编辑
最近做db2移植。发现好多奇怪的现象。 但有一个就非常奇怪不知道怎么办了 高手指点一下。
谢谢了
db2 的表 有个字段是decimal(1)我用sqlint64读取。读取后正常。但是copy到全局变量里就有问题。
头文件的定义结构定义
#define stru_pcsp_config_date_capture { \
char current_transaction_date [ CURRENT_TRANSACTION_DATE_LEN + 1 ]; \
char expected_settle_date [ EXPECTED_SETTLE_DATE_LEN + 1 ]; \
char settled_date [ SETTLED_DATE_LEN + 1 ]; \
sqlint64 current_table_no; \
sqlint64 cut_date_mode; \
}
程序如下
int get_config_date_capture_info( PCSP_CONFIG_DATE_CAPTURE *p, int cut_flag )
{
EXEC SQL BEGIN DECLARE SECTION;
struct stru_pcsp_config_date_capture pp;
char new_date[ 8 + 1 ], sys_date[ 8 + 1 ];
sqlint64 li_diff_time; /* 自动日切模式下, 两个日期差的天数不能大于1 */
EXEC SQL END DECLARE SECTION;
long tmp_curr_date;
long tmp_new_date;
/* initial variable */
memset(( struct stru_pcsp_config_date_capture * )&pp, 0x00, sizeof( pp ));
memset(( char * )new_date, 0x00, sizeof( new_date ));
memset(( char * )sys_date, 0x00, sizeof( sys_date ));
memset(( struct stru_pcsp_config_date_capture * )&abcdefg, 0x00, sizeof( abcdefg ));
li_diff_time = 0;
/* connect database */
if( switch_connect_db() != SUCCESSED_RETURN_CODE )
{
message_report( __FILE__, __LINE__,
"连接数据库错误 [%d][%s]\n",
sqlca.sqlcode, sqlca.sqlerrmc );
goto err_exit;
}
/* set any SQLERROR process handle */
EXEC SQL WHENEVER SQLERROR GOTO SQL_ERR;
EXEC SQL WHENEVER NOT FOUND GOTO SQLNOTFOUND_ERR;
/* select data from pcsp_config_date_capture */
EXEC SQL SELECT * INTO :pp FROM PCSP_CONFIG_DATE_CAPTURE;
fprintf( stdout, "current_transaction_date =%s\n", pp.current_transaction_date );
fprintf( stdout, "expected_settle_date=%s\n", pp.expected_settle_date);
fprintf( stdout, "current_table_no=%d\n", pp.current_table_no ); /* =1 没问题*/
fprintf( stdout, "cut_date_mode=%d\n", pp.cut_date_mode);
memcpy(( struct stru_pcsp_config_date_capture *)p, ( struct stru_pcsp_config_date_capture * )&pp, sizeof( struct stru_pcsp_config_date_capture ));
fprintf( stdout, "current_transaction_date =%s\n", p->current_transaction_date );
fprintf( stdout, "expected_settle_date=%s\n", p->expected_settle_date);
fprintf( stdout, "current_table_no=%d\n", p->current_table_no ); /* copy后就变成0了 */
fprintf( stdout, "cut_date_mode=%d\n", p->cut_date_mode);
return( SUCCESSED_RETURN_CODE );
还有 把sqlint64 current_table_no; 变成 sqlint32 就没事。 但我用的是64位aix编译 。 请问为啥们会变成0那 谢谢 |
|