INFO: Alterações de API de 64-bit ODBC no MDAC 2.7

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 298678
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.
Sumário
O ODBC (Open Database Connectivity) cabeçalhos e bibliotecas que vêm com o Microsoft Data Access Components (MDAC) 2.7 software development kit (SDK) contém algumas alterações de versões anteriores do ODBC para permitir que os programadores a código para novas plataformas de 64 bits. Este artigo resume essas alterações.
Mais Informações
Garantindo que o código usa os tipos definidos pelo ODBC listados abaixo, você poderá compilar seu código para plataformas de 64 bits e de 32 bits com base no _WIN64 ou macros do Win32.

Há vários pontos de importância específica:
  • Embora o tamanho de um ponteiro passou de 4 bytes para 8 bytes, inteiros e longs permanecem valores de 4 bytes. Os tipos Int64 e UINT64 foram definidos para números inteiros de 8 bytes. Esses são convertidos em ODBC para SQLLEN e SQLULEN para compilações de 64 bits. Algumas funções do ODBC que foram definidas anteriormente com parâmetros SQLINTEGER e SQLUINTEGER foram alteradas, portanto, onde for apropriado. Nesses casos são enumerados abaixo, bem como as alterações específicas aos tipos de dados definidos pelo ODBC.
  • Há várias funções de ODBC são declaradas como tirar um parâmetro de ponteiro. Em ODBC de 32 bits, que tipo de ponteiro com freqüência é usado para passar dados de número inteiro, bem como ponteiros para buffers dependendo do contexto da chamada. Isso era possível, claro, porque ponteiros e inteiros têm o mesmo comprimento; isso não é o caso no Windows de 64 bits.
  • Descritor de alguns campos que podem ser definidas e recuperados através de vários SQLSet... e SQLGet... funções foram alteradas para acomodar valores de 64 bits, enquanto outros são valores ainda de 32 bits. Tome cuidado em chamar esses métodos para certificar-se que você use o buffer de tamanho apropriado na configuração e recuperar esses campos. As especificações do descritor de qual campos tiverem sido alterados estão listadas na última seção deste artigo.

Alterações nos tipos de dados SQL

Os quatro tipos SQL a seguir ainda são suportados em 32 bits apenas; eles não são definidos para compilações de 64 bits. Esses tipos não são usados para todos os parâmetros no MDAC 2.7; uso desses tipos causará falhas do compilador em plataformas de 64 bits.
#ifdef WIN32typedef SQLULEN SQLROWCOUNT;typedef SQLULEN SQLROWSETSIZE;typedef SQLULEN SQLTRANSID;typedef SQLLEN SQLROWOFFSET;#endif					
A definição de SQLSETPOSIROW mudou para compilações de 32 bits e 64 bits:
#ifdef _WIN64typedef UINT64 SQLSETPOSIROW;#else#define SQLSETPOSIROW SQLUSMALLINT#endif					
As definições de SQLLEN e SQLULEN foram alterados para compilações de 64 bits:
#ifdef _WIN64typedef INT64 SQLLEN;typedef UINT64 SQLULEN;#else#define SQLLEN SQLINTEGER#define SQLULEN SQLUINTEGER#endif					
Embora SQL_C_BOOKMARK é substituído no ODBC 3.0, para compilações de 64 bits em 2.0 clientes, esse valor foi alterado:
#ifdef _WIN64#define SQL_C_BOOKMARK SQL_C_UBIGINT#else#define SQL_C_BOOKMARK SQL_C_ULONG#endif					
O tipo BOOKMARK é definido de diferente nos cabeçalhos da mais recentes:
typedef SQLULEN         BOOKMARK;					

Alterações de declaração de função

As assinaturas de função a seguir foram alterados para programação de 64 bits para acomodar os novos tipos. Os itens em negrito são os parâmetros específicos que foram alterados.
  • SQLBindCol (SQLHSTMT StatementHandle, SQLUSMALLINT NúmeroColuna, SQLSMALLINT TargetType, SQLPOINTER TargetValue, SQLLEN BufferLength , SQLLEN * StrLen_or_Ind );
  • SQLBindParam (SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLULEN LengthPrecision , SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue, SQLLEN * StrLen_or_Ind );
  • SQLBindParameter (SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT fParamType, SQLSMALLINT fCType, SQLSMALLINT fSqlType, SQLULEN cbColDef , SQLSMALLINT ibScale, SQLPOINTER rgbValue, SQLLEN cbValueMax , SQLLEN * pcbValue );
  • SQLColAttribute (SQLHSTMT StatementHandle, SQLUSMALLINT NúmeroColuna, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength, NumericAttribute SQLLEN 1)
  • SQLColAttributes (hstmt SQLHSTMT, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLLEN * pfDesc );
  • SQLDescribeCol (SQLHSTMT StatementHandle, SQLUSMALLINT NúmeroColuna, SQLCHAR * ColumnName, SQLSMALLINT BufferLength, SQLSMALLINT * NameLength, SQLSMALLINT * TipoDeDados, SQLULEN * ColumnSize , SQLSMALLINT * DecimalDigits, SQLSMALLINT * Nullable);
  • SQLDescribeParam (SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT * pfSqlType, SQLULEN * pcbParamDef , SQLSMALLINT * pibScale, SQLSMALLINT * pfNullable);
  • SQLExtendedFetch(SQLHSTMT hstmt, SQLUSMALLINT fFetchType, SQLLEN irow, SQLULEN * pcrow, SQLUSMALLINT * rgfRowStatus)
  • SQLFetchScroll (SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLLEN FetchOffset );
  • SQLGetData (SQLHSTMT StatementHandle, SQLUSMALLINT NúmeroColuna, SQLSMALLINT TargetType, SQLPOINTER TargetValue, SQLLEN BufferLength , SQLLEN * StrLen_or_Ind );
  • SQLGetDescRec (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLCHAR * nome, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength, SQLSMALLINT * tipo, SQLSMALLINT * subtipo, SQLLEN * comprimento , SQLSMALLINT * precisão, SQLSMALLINT * escala, SQLSMALLINT * Nullable);
  • SQLParamOptions(SQLHSTMT hstmt, SQLULEN crow, SQLULEN * pirow)
  • SQLPutData (SQLHSTMT StatementHandle, dados SQLPOINTER, SQLLEN StrLen_or_Ind );
  • SQLRowCount (SQLHSTMT StatementHandle, SQLLEN 1 RowCount );
  • SQLSetConnectOption (SQLHDBC ConnectHandle, opção SQLUSMALLINT, SQLULEN valor );
  • SQLSetPos (SQLHSTMT hstmt, SQLSETPOSIROW irow , SQLUSMALLINT fOption, SQLUSMALLINT fLock);
  • SQLSetDescRec (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT tipo, subtipo SQLSMALLINT, SQLLEN comprimento , precisão SQLSMALLINT, SQLSMALLINT escala, dados SQLPOINTER, SQLLEN * StringLength , SQLLEN * indicador );
  • SQLSetParam (SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLULEN LengthPrecision , SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue, SQLLEN * StrLen_or_Ind );
  • SQLSetScrollOptions (SQLHSTMT hstmt, SQLUSMALLINT fConcurrency, SQLLEN crowKeyset , SQLUSMALLINT crowRowset);
  • SQLSetStmtOption (SQLHSTMT StatementHandle, opção SQLUSMALLINT, SQLULEN valor );

Valores retornados de chamadas de API do ODBC através de ponteiros

As seguintes chamadas de função ODBC levar como um parâmetro de entrada um ponteiro para um buffer em que os dados são retornados do driver. O contexto e o significado dos dados retornados é determinado pelo outros parâmetros de entrada para as funções. Em alguns casos, esses métodos agora podem retornar valores de 64 bits (inteiro de 8 bytes) em vez dos valores típicos inteiro de (4 bytes) de 32 bits. Nesses casos são:

SQLColAttribute
Quando o parâmetro FieldIdentifier tem um dos valores a seguir, um valor de 64 bits é retornado nos * NumericAttribute :
SQL_DESC_DISPLAY_SIZE
SQL_DESC_LENGTH
SQL_DESC_OCTET_LENGTH
SQL_DESC_COUNT

SQLColAttributes
Quando o parâmetro fDescType tem um dos valores a seguir, um valor de 64 bits é retornado nos * pfDesc :
SQL_COLUMN_DISPLAY_SIZE
SQL_COLUMN_LENGTH
SQL_COLUMN_COUNT

SQLGetConnectAttr
Quando o parâmetro de atributo tem um dos valores a seguir, um valor de 64 bits é retornado em valor :
SQL_ATTR_QUIET_MODE

SQLGetConnectOption
Quando o parâmetro de atributo tem um dos valores a seguir, um valor de 64 bits é retornado em valor :
SQL_ATTR_QUIET_MODE

SQLGetDescField
Quando o parâmetro FieldIdentifier tem um dos valores a seguir, um valor de 64 bits é retornado nos * ValuePtr :
SQL_DESC_ARRAY_SIZE

SQLGetDiagField
Quando o parâmetro DiagIdentifier tem um dos valores a seguir, um valor de 64 bits é retornado nos * DiagInfoPtr :
SQL_DIAG_CURSOR_ROW_COUNT
SQL_DIAG_ROW_COUNT
SQL_DIAG_ROW_NUMBER

SQLGetInfo
Quando o parâmetro TipoDeInformação tem um dos valores a seguir, um valor de 64 bits é retornado nos * InfoValuePtr :
SQL_DRIVER_HENV
SQL_DRIVER_HDBC
SQL_DRIVER_HLIB

Quando TipoDeInformação tem um dos seguintes 2 valores * InfoValuePtr é 64 bits na entrada e saída:
SQL_DRIVER_HSTMT
SQL_DRIVER_HDESC

SQLGetStmtAttr
Quando o parâmetro de atributo tem um dos valores a seguir, um valor de 64 bits é retornado nos * ValuePtr :
SQL_ATTR_APP_PARAM_DESC
SQL_ATTR_APP_ROW_DESC
SQL_ATTR_IMP_PARAM_DESC
SQL_ATTR_IMP_ROW_DESC
SQL_ATTR_MAX_LENGTH
SQL_ATTR_MAX_ROWS
SQL_ATTR_PARAM_BIND_OFFSET_PTR
SQL_ATTR_ROW_ARRAY_SIZE
SQL_ATTR_ROW_BIND_OFFSET_PTR
SQL_ATTR_ROW_NUMBER
SQL_ATTR_ROWS_FETCHED_PTR
SQL_ATTR_KEYSET_SIZE

SQLGetStmtOption
Quando o parâmetro de opção tem um dos valores a seguir, um valor de 64 bits é retornado nos * valor :
SQL_MAX_LENGTH
SQL_MAX_ROWS
SQL_ROWSET_SIZE
SQL_KEYSET_SIZE

SQLSetConnectAttr
Quando o parâmetro de atributo tem um dos valores a seguir, um valor de 64 bits é passado em valor :
SQL_ATTR_QUIET_MODE

SQLSetConnectOption
Quando o parâmetro de atributo tem um dos valores a seguir, um valor de 64 bits é passado em valor :
SQL_ATTR_QUIET_MODE

SQLSetDescField
Quando o parâmetro FieldIdentifier tem um dos valores a seguir, um valor de 64 bits é passado no * ValuePtr :
SQL_DESC_ARRAY_SIZE

SQLSetStmtAttr
Quando o parâmetro de atributo tem um dos valores a seguir, um valor de 64 bits é passado no * ValuePtr :
SQL_ATTR_APP_PARAM_DESC
SQL_ATTR_APP_ROW_DESC
SQL_ATTR_IMP_PARAM_DESC
SQL_ATTR_IMP_ROW_DESC
SQL_ATTR_MAX_LENGTH
SQL_ATTR_MAX_ROWS
SQL_ATTR_PARAM_BIND_OFFSET_PTR
SQL_ATTR_ROW_ARRAY_SIZE
SQL_ATTR_ROW_BIND_OFFSET_PTR
SQL_ATTR_ROW_NUMBER
SQL_ATTR_ROWS_FETCHED_PTR
SQL_ATTR_KEYSET_SIZE

SQLSetConnectAttr
Quando o parâmetro de opção tem um dos valores a seguir, um valor de 64 bits é passado no * valor :
SQL_MAX_LENGTH
SQL_MAX_ROWS
SQL_ROWSET_SIZE
SQL_KEYSET_SIZE
Referências
Você pode obter as bibliotecas de MDAC 2.7 e os arquivos de cabeçalho necessários para oferecer suporte à compilação de 64 bits do Microsoft Platform SDK, que pode ser instalado no seguinte site da Microsoft: Aplicativos ODBC precisará usar os seguintes arquivos:

Arquivos de cabeçalho:
  • Sqltypes.h
  • Sqlext.h
Biblioteca:
  • Odbc32.lib
bibliotecas de arquivos de cabeçalho de odbc de 64 bits compilar tipos de dados de alterações de api

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 298678 - Última Revisão: 01/21/2002 13:47:00 - Revisão: 1.0

Microsoft Open Database Connectivity 3.7

  • kbmt kbinfo KB298678 KbMtpt
Comentários