Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um buffer é qualquer parte da memória da aplicação usada para passar dados entre a aplicação e o driver. Por exemplo, os buffers de aplicação podem estar associados ou vinculados a colunas do conjunto de resultados com SQLBindCol. À medida que cada linha é obtida, os dados são devolvidos para cada coluna nestes buffers. Buffers de entrada são usados para passar dados da aplicação para o driver; Buffers de saída são usados para devolver dados do driver para a aplicação.
Observação
Se uma função ODBC devolver SQL_ERROR, o conteúdo de quaisquer argumentos de saída dessa função fica indefinido.
Esta discussão centra-se principalmente em tampões de tipo indeterminado. Os endereços destes buffers aparecem como argumentos do tipo SQLPOINTER, como o argumento TargetValuePtr no SQLBindCol. No entanto, alguns dos itens aqui discutidos, como os argumentos usados com buffers, também se aplicam a argumentos usados para passar strings para o driver, como o argumento TableName em SQLTables.
Estes buffers costumam vir em pares. Buffers de dados são usados para passar os próprios dados, enquanto buffers de comprimento/indicador são usados para passar o comprimento dos dados no buffer de dados ou um valor especial como SQL_NULL_DATA, que indica que os dados são NULL. O comprimento dos dados num buffer de dados é diferente do comprimento do próprio buffer de dados. A ilustração seguinte mostra a relação entre o buffer de dados e o buffer de comprimento/indicador.
É necessário um buffer de comprimento/indicador sempre que o buffer de dados contém dados de comprimento variável, como dados de caracteres ou binários. Se o buffer de dados contiver dados de comprimento fixo, como uma estrutura de inteiros ou data, é necessário apenas um buffer de comprimento/indicador para passar valores indicadores, pois o comprimento dos dados já é conhecido. Se uma aplicação usar um buffer de comprimento/indicador com dados de comprimento fixo, o driver ignora quaisquer comprimentos passados nele.
O comprimento tanto do buffer de dados como dos dados que contém é medido em bytes, em oposição a caracteres. Esta distinção não é importante para programas que usam strings ANSI porque os comprimentos em bytes e caracteres são iguais.
Quando o buffer de dados representa um campo descritor definido pelo driver, campo de diagnóstico ou atributo, a aplicação deve indicar ao Driver Manager a natureza do argumento da função que indica o valor do campo ou atributo. A aplicação faz isto definindo o argumento de comprimento em qualquer chamada de função que defina o campo ou atributo para um dos seguintes valores. (O mesmo se aplica às funções que recuperam os valores do corpo ou atributo, com a exceção de o argumento apontar para os valores que, para a função de definição, estão no próprio argumento.)
Se o argumento da função que indica o valor do campo ou atributo for um ponteiro para uma cadeia de caracteres, o argumento comprimento é o comprimento da cadeia ou SQL_NTS.
Se o argumento da função que indica o valor do campo ou atributo for um apontador para um buffer binário, a aplicação coloca o resultado da macro SQL_LEN_BINARY_ATTR(comprimento) no argumento do comprimento . Isto coloca um valor negativo no argumento do comprimento .
Se o argumento da função que indica o valor do campo ou atributo for um ponteiro para um valor diferente de uma cadeia de caracteres ou binária, o argumento do comprimento deve ter o valor SQL_IS_POINTER.
Se o argumento da função que indica o valor do corpo ou atributo contiver um valor de comprimento fixo, o argumento de comprimento é SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT ou SQL_ISI_USMALLINT, conforme apropriado.
Esta seção contém os seguintes tópicos.