Obrigado Paul.
Isso não está relacionado com SQLGetData. Na verdade, o SQLGetData funciona bem para mim.
Estou tendo esse problema ao executar uma consulta e acessar os buffers vinculados da seguinte maneira (código pseudo):
// Definir o atributo da declaração para ler por coluna, número de linhas, cursor estático e ponteiro de status:
/*struct StmtAttrs
{
SQLINTEGER attr;
SQLPOINTER valptr;
SQLINTEGER len;
};*/
SQLHSTMT& stmt = m_stmtHdl.m_hdl;
StmtAttrs parms[5] = \
{{SQL_ATTR_ROW_BIND_TYPE, SQL_BIND_BY_COLUMN, 0},
{SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_STATIC, 0},
{SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)limit, 0},
{SQL_ATTR_ROW_STATUS_PTR, &m_rowStatus[0], 0},
{SQL_ATTR_ROWS_FETCHED_PTR, &m_rowsFetched, 0}};
uint32_t i = 0;
SQLINTEGER errcode;
for (; i < 5; ++i)
{
bool ret = sqlSetStmtAttr(stmt, parms[i].attr, parms[i].valptr, parms[i].len);
// Código de tratamento de erros
}
// Vincular os buffers de entrada para o número de colunas usando SQLBindCol:
// Preparar a consulta usando SQLPrepare
// Por exemplo: select top 2039 numpk,convert(binary(256),ablob) from myccinfo.dbo.bigdata NOLOCK order by numpk asc ;
// Executar a consulta com SQLExecute(stmt);
// Obter os dados usando SQLFetchScroll(stmt, SQL_FETCH_NEXT, 0);
// Iterar através de cada coluna e do buffer vinculado para ler os dados