Thread: What is the problem with this code?

What is the problem with this code?

From
Igor Korot
Date:
Hi, ALL,

[code]
    std::wstring query1 = L"SHOW log_directory";
    std::wstring query2 = L"SHOW log_filename";
    SQLWCHAR *qry1 = new SQLWCHAR[query1.length() + 2];
    SQLWCHAR *qry2 = new SQLWCHAR[query2.length() + 2];
    memset( qry1, '\0', query1.length() + 2 );
    memset( qry2, '\0', query2.length() + 2 );
    uc_to_str_cpy( qry1, query1 );
    uc_to_str_cpy( qry2, query2 );
    RETCODE ret = SQLAllocHandle( SQL_HANDLE_STMT, m_hdbc, &m_hstmt );
    if( ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO )
    {
        ret = SQLPrepare( m_hstmt, qry1, SQL_NTS );
        if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
        {
            GetErrorMessage( errorMsg, 1 );
            result = 1;
        }
        else
        {
            ret = SQLDescribeCol( m_hstmt, 1, columnName, 256,
&columnNameLen, &columnDataType, &columnDataSize, &columnDataDigits,
&columnDataNullable );
            if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
            {
                GetErrorMessage( errorMsg, 1 );
                result = 1;
            }
[/code]

The SQLDescribeCol() call fails with the error invalid column number".

Does anybody have any idea?

Thank you.


Re: What is the problem with this code?

From
Clemens Ladisch
Date:
Igor Korot wrote:
>     SQLWCHAR *qry1 = new SQLWCHAR[query1.length() + 2];
>     memset( qry1, '\0', query1.length() + 2 );

memset expects the length to be in bytes.

>     ret = SQLPrepare( m_hstmt, qry1, SQL_NTS );
>     ret = SQLDescribeCol( m_hstmt, 1, columnName, 256, &columnNameLen, &columnDataType, &columnDataSize,
&columnDataDigits,&columnDataNullable );
 
>
> The SQLDescribeCol() call fails with the error invalid column number".

Does SQLExecute work?  Does SQLNumResultCols give 1?

The specification says "for performance reasons, an application should
not call SQLDescribeCol before executing a statement."  But it should
work anyway; if not, this would be a bug.  What are the settings of
"Parse Statements" and "Server side prepare" of the data source?


Regards,
Clemens