Обсуждение: What is the problem with this code?

Поиск
Список
Период
Сортировка

What is the problem with this code?

От
Igor Korot
Дата:
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?

От
Clemens Ladisch
Дата:
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