-3

chMB()MessageBoxA( 0, text, "title", MB_OK );テキストが表示され、結果を確認できるように定義されています。私の問題は、次の codez にあります。

CString szWow;
szWow.Format( "%u", idCandidate );
chMB( szWow );

const __int64 i64set = i64VoteAmount+1;

CString addvote;
addvote.Format( "UPDATE dbo.CONSULENTRIES set m_uVoteAmount = %u WHERE m_idCandidate = %u", i64set, idCandidate );


chMB( addvote );

chMB( szWow ); ディスプレイ 5

chMB( addVote ) が表示されますが: UPDATE dbo.CONSULENTRIES set m_uVoteAmount = 1 WHERE m_idCandidate = 0

この文字列形式で idCandidate が 0 なのはなぜですか??? O___O

ここに必要な場合は、完全なコードです。

VOTEAPPL CConsulApplication::VoteForApplied( const u_long idVoter, const __int64 idCandidate )
{
if( idVoter && idCandidate )
{

    /* Check if alredy voted */
    CQuery* pQuery = new CQuery;
    if( !pQuery->Connect( 3, DSN_NAME_CHARACTER01, DB_ADMIN_ID_CHARACTER01, DB_ADMIN_PASS_CHARACTER01 ) )
    {
        pQuery->DisConnect();
        SAFE_DELETE( pQuery );
        return VAPL_FAILURE;
    }

    CString szVoted;
    szVoted.Format( "SELECT * FROM dbo.CONSULVOTE WHERE m_idVoter = %u", idVoter );

    if( !pQuery->Exec( szVoted ) )
    {
        pQuery->DisConnect();
        SAFE_DELETE( pQuery );
        return VAPL_FAILURE;
    }

    pQuery->Fetch();

    __int64 i64Voter = pQuery->GetInt64( "m_idVoter" );

    if( i64Voter != 0 )
    {
        pQuery->DisConnect();
        SAFE_DELETE( pQuery );
        return VAPL_VOTED;
    }

    pQuery->DisConnect();
    SAFE_DELETE( pQuery );

    /* Get content and check if candidate exists */


    CQuery* pQuery2 = new CQuery;
    if( !pQuery2->Connect( 3, DSN_NAME_CHARACTER01, DB_ADMIN_ID_CHARACTER01, DB_ADMIN_PASS_CHARACTER01 ) )
    {
        pQuery2->DisConnect();
        SAFE_DELETE( pQuery2 );
        return VAPL_FAILURE;
    }

    CString szCandidate;
    szCandidate.Format( "SELECT * FROM dbo.CONSULENTRIES WHERE m_idCandidate = %u", idCandidate );

    if( !pQuery2->Exec( szCandidate ) )
    {
        pQuery2->DisConnect();
        SAFE_DELETE( pQuery2 );
        return VAPL_FAILURE;
    }

    pQuery2->Fetch();

    __int64 i64Candidate = pQuery2->GetInt64( "m_idCandidate" );
    __int64 i64VoteAmount = pQuery2->GetInt64( "m_uVoteAmount" );
    if( i64Candidate != 0 )
    {
        /* Insert at database that this guy has voted */
        CQuery* pInsertQuery = new CQuery;
        if( !pInsertQuery->Connect( 3, DSN_NAME_CHARACTER01, DB_ADMIN_ID_CHARACTER01, DB_ADMIN_PASS_CHARACTER01 ) )
        {
            pInsertQuery->DisConnect();
            SAFE_DELETE( pInsertQuery );
            return VAPL_FAILURE;
        }

        CString szInsert;
        szInsert.Format( "INSERT INTO dbo.CONSULVOTE values(%u,%u)", idVoter, idCandidate );

        if( !pInsertQuery->Exec( szInsert ) )
        {
            pInsertQuery->DisConnect();
            SAFE_DELETE( pInsertQuery );
            return VAPL_FAILURE;
        }

        pInsertQuery->DisConnect();
        SAFE_DELETE( pInsertQuery );

        /* Update vote amount */

        CQuery* pUpdate = new CQuery;
        if( !pUpdate->Connect( 3, DSN_NAME_CHARACTER01, DB_ADMIN_ID_CHARACTER01, DB_ADMIN_PASS_CHARACTER01 ) )
        {
            pUpdate->DisConnect();
            SAFE_DELETE( pUpdate );
            return VAPL_FAILURE;
        }

        CString szWow;
        szWow.Format( "%u", idCandidate );
        chMB( szWow );

        const __int64 i64set = i64VoteAmount+1;

        CString addvote;
        addvote.Format( "UPDATE dbo.CONSULENTRIES set m_uVoteAmount = %u WHERE m_idCandidate = %u", i64set, idCandidate );


        chMB( addvote );

        if( !pUpdate->Exec( addvote ) )
        {
            pUpdate->DisConnect();
            SAFE_DELETE( pUpdate );
            return VAPL_FAILURE;
        }

        pUpdate->DisConnect();
        SAFE_DELETE( pUpdate );

        return VAPL_SUCCESS;

    }

    pQuery2->DisConnect();
    SAFE_DELETE( pQuery2 );
    return VAPL_FAILURE;

}
return VAPL_FAILURE;

}

4

1 に答える 1

3

問題はここにあります:

addvote.Format( "UPDATE dbo.CONSULENTRIES set m_uVoteAmount = %u WHERE m_idCandidate = %u", i64set, idCandidate );

フォーマット文字列に含まれて%uいるのに対し、フォーマット文字列()の後の変数i64setは間違ったタイプ(__int64)です。

%uタイプ(タイプに対応unsigned int)またはフォーマット指定子を変更してみてください。

addvote.Format( "UPDATE dbo.CONSULENTRIES set m_uVoteAmount = %I64d WHERE m_idCandidate = %u", i64set, idCandidate );
于 2012-08-20T07:00:50.590 に答える