Artigo: 298678 - Última revisão: segunda-feira, 21 de Janeiro de 2002 - Revisão: 1.0

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

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sumário

Os cabeçalhos de interligação de bases de dados abertas (ODBC, Open Database CONNECTIVITY) e bibliotecas que trabalham 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 aos programadores a plataformas de 64 bits novas código. Este artigo resume essas alterações.

Mais Informação

Garantindo que o código utiliza tipos de ODBC definido listados abaixo, será possível compilar o código para plataformas de 64 bits e 32 bits baseadas no Win32 macros ou _WIN64.

Existem vários pontos de particular importância:
  • Apesar do tamanho de um ponteiro tiver desaparecido de 4 bytes para 8 bytes, números inteiros e longs permanecem valores de 4 bytes. Os tipos de INT64 e UINT64 foram definidos para números inteiros de 8 bytes. Estes são convertidos no ODBC SQLLEN e SQLULEN para compila de 64 bits. Algumas funções do ODBC que foram definidas anteriormente com parâmetros SQLINTEGER e SQLUINTEGER assim tem sido alteradas quando for adequado. Nestes casos são enumerados abaixo, bem como as alterações específicas aos tipos de dados definidos pelo ODBC.
  • Existem várias funções de ODBC são declaradas como efectuar um parâmetro de apontador. ODBC de 32 bits, esse tipo de ponteiro é frequentemente utilizado para transmitir dados de número inteiro, bem como ponteiros para memórias intermédias dependendo do contexto da chamada. Isto foi possível, evidentemente, porque ponteiros e números inteiros têm o mesmo comprimento; este não é o caso de 64 bits do Windows.
  • Descritor de alguns campos que podem ser definidas e obtidos através dos vários SQLSet... e SQLGet... funções foram alteradas para acomodar valores de 64 bits, enquanto outros são valores ainda de 32 bits. Tratar em chamar estes métodos para se certificar de que utiliza a memória intermédia tamanho apropriado na definição e obter estes campos. As especificações do descritor de que foram alterados campos estão listadas na última secção deste artigo.

Alterações nos tipos de dados SQL

Os seguintes quatro tipos SQL ainda são suportados no apenas de 32 bits; não são definidas para compila de 64 bits. Estes tipos já não são utilizados para quaisquer parâmetros no MDAC 2.7; a utilização destes tipos fará com que compilador falhas em plataformas de 64 bits.
#ifdef WIN32
typedef SQLULEN SQLROWCOUNT;
typedef SQLULEN SQLROWSETSIZE;
typedef SQLULEN SQLTRANSID;
typedef SQLLEN SQLROWOFFSET;
#endif
					
A definição de SQLSETPOSIROW foi alterada para compila de 32 bits e 64 bits:
#ifdef _WIN64
typedef UINT64 SQLSETPOSIROW;
#else
#define SQLSETPOSIROW SQLUSMALLINT
#endif
					
Alterou as definições de SQLLEN e SQLULEN para compila de 64 bits:
#ifdef _WIN64
typedef INT64 SQLLEN;
typedef UINT64 SQLULEN;
#else
#define SQLLEN SQLINTEGER
#define SQLULEN SQLUINTEGER
#endif
					
Embora SQL_C_BOOKMARK está preterida no ODBC 3.0, para compila de 64 bits nos 2.0 clientes, este valor foi alterado:
#ifdef _WIN64
#define SQL_C_BOOKMARK SQL_C_UBIGINT
#else
#define SQL_C_BOOKMARK SQL_C_ULONG
#endif
					
O tipo BOOKMARK está definido de diferente nos cabeçalhos dos mais recentes:
typedef SQLULEN         BOOKMARK;
					

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

Alteraram as seguintes assinaturas de função para programação de 64 bits para acomodar os novos tipos. Os itens de texto a negrito são os parâmetros específicos que foram alterados.
  • SQLBindCol (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, 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 ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength, SQLSMALLINT * StringLength, SQLLEN * NumericAttribute)
  • SQLColAttributes (SQLHSTMT hstmt, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT * pcbDesc, SQLLEN * pfDesc );
  • SQLDescribeCol (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLCHAR * ColumnName SQLSMALLINT BufferLength, SQLSMALLINT * NameLength, SQLSMALLINT * tipo de dados, SQLULEN * ColumnSize , SQLSMALLINT * DecimalDigits, SQLSMALLINT * nulo);
  • 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 ColumnNumber, 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 * nulo);
  • SQLParamOptions(SQLHSTMT hstmt, SQLULEN crow, SQLULEN * pirow)
  • SQLPutData (SQLHSTMT StatementHandle, dados SQLPOINTER, SQLLEN StrLen_or_Ind );
  • SQLRowCount (SQLHSTMT StatementHandle, SQLLEN * RowCount );
  • SQLSetConnectOption (SQLHDBC ConnectHandle, opção de SQLUSMALLINT SQLULEN valor );
  • SQLSetPos (SQLHSTMT hstmt, SQLSETPOSIROW irow , SQLUSMALLINT fOption, SQLUSMALLINT fLock);
  • SQLSetDescRec (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, tipo SQLSMALLINT, SQLSMALLINT subtipo, 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 de SQLUSMALLINT SQLULEN valor );

Valores apresentados de chamadas de API de ODBC através de ponteiros

As chamadas de função ODBC seguintes levam como um parâmetro de entrada um ponteiro para uma memória intermédia pela qual os dados são devolvidos do controlador. O contexto e o significado dos dados devolvidos é determinada pela outros parâmetros de entrada para as funções. Em alguns casos, estes métodos agora podem devolver valores de 64 bits (8-byte inteiro) em vez dos valores de número inteiro (4 bytes) de 32 bits normal. Nestes casos são:

SQLColAttribute
Quando o parâmetro FieldIdentifier tem um dos seguintes valores, é devolvido um valor de 64 bits 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 seguintes valores, é devolvido um valor de 64 bits nos * pfDesc :
SQL_COLUMN_DISPLAY_SIZE
SQL_COLUMN_LENGTH
SQL_COLUMN_COUNT

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

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

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

SQLGetDiagField
Quando o parâmetro DiagIdentifier tem um dos seguintes valores, é devolvido um valor de 64 bits 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 seguintes valores, é devolvido um valor de 64 bits nos * InfoValuePtr :
SQL_DRIVER_HENV
SQL_DRIVER_HDBC
SQL_DRIVER_HLIB

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

SQLGetStmtAttr
Quando o parâmetro de atributo tem um dos seguintes valores, é devolvido um valor de 64 bits 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 opção tem um dos seguintes valores, é devolvido um valor de 64 bits nos * valor :
SQL_MAX_LENGTH
SQL_MAX_ROWS
SQL_ROWSET_SIZE
SQL_KEYSET_SIZE

SQLSetConnectAttr
Quando o parâmetro de atributo tem um dos seguintes valores, um valor de 64 bits é transmitido no valor :
SQL_ATTR_QUIET_MODE

SQLSetConnectOption
Quando o parâmetro de atributo tem um dos seguintes valores, um valor de 64 bits é transmitido no valor :
SQL_ATTR_QUIET_MODE

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

SQLSetStmtAttr
Quando o parâmetro de atributo tem um dos seguintes valores, um valor de 64 bits é passado em * 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 opção tem um dos seguintes valores, um valor de 64 bits é passado em * valor :
SQL_MAX_LENGTH
SQL_MAX_ROWS
SQL_ROWSET_SIZE
SQL_KEYSET_SIZE

Referências

Pode obter o MDAC 2.7 bibliotecas e ficheiros de cabeçalho necessários para suportar a compilação de 64 bits do Microsoft Platform SDK, que pode ser instalado a partir do seguinte Web site da Microsoft:
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/default.htm (http://www.microsoft.com/msdownload/platformsdk/sdkupdate/default.htm)
Aplicações de ODBC precisará de utilizar os seguintes ficheiros:

Ficheiros de cabeçalho:
  • Sqltypes.h
  • Sqlext.h
Biblioteca:
  • Odbc32.lib

A informação contida neste artigo aplica-se a:
  • Microsoft Open Database Connectivity 3.7
Palavras-chave: 
kbmt kbinfo KB298678 KbMtpt
Tradução automáticaTradução automática
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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 298678  (http://support.microsoft.com/kb/298678/en-us/ )
Retired KB ArticleExclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.