Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Vanaf Windows Server 2003 hebben Microsoft-besturingssystemen de 64-bits ODBC-bibliotheken ondersteund. De ODBC-headers en -bibliotheken die voor het eerst worden geleverd met de MDAC 2.7 SDK bevatten wijzigingen zodat programmeurs eenvoudig code kunnen schrijven voor de nieuwe 64-bits platforms. Door ervoor te zorgen dat uw code gebruikmaakt van de hieronder vermelde ODBC-typen, kunt u dezelfde broncode compileren voor zowel 64-bits als 32-bits platforms op basis van de _WIN64 - of WIN32-macro's .
Er zijn verschillende punten om rekening mee te houden bij het programmeren voor een 64-bits processor:
Hoewel de grootte van een aanwijzer is gewijzigd van 4 bytes in 8 bytes, zijn gehele getallen en longen nog steeds 4 bytewaarden. De typen INT64 en UINT64 zijn gedefinieerd voor 8 byte gehele getallen. De nieuwe ODBC-typen SQLLEN en SQLULEN worden gedefinieerd in het ODBC-headerbestand als INT64 en UINT64 wanneer _WIN64 is gedefinieerd.
Verschillende functies in ODBC worden gedeclareerd met een pointer als parameter. In 32-bits ODBC werden parameters die zijn gedefinieerd als aanwijzers vaak gebruikt om een geheel getal of een aanwijzer door te geven aan een buffer, afhankelijk van de context van de aanroep. Dit was natuurlijk mogelijk vanwege het feit dat aanwijzers en gehele getallen dezelfde grootte hadden. In 64-bits Windows is dit niet het geval.
Sommige ODBC-functies die eerder zijn gedefinieerd met SQLINTEGER - en SQLUINTEGER-parameters , zijn zo nodig gewijzigd om de nieuwe SQLLEN - en SQLULEN-typedefs te gebruiken. Deze wijzigingen worden weergegeven in de volgende sectie, Functiedeclaratiewijzigingen.
Sommige van de descriptorvelden die kunnen worden ingesteld via de verschillende SQLSet - en SQLGet-functies zijn gewijzigd om plaats te bieden aan 64-bits waarden, terwijl andere nog steeds 32-bits waarden zijn. Zorg ervoor dat u de juiste groottevariabele gebruikt bij het instellen en ophalen van deze velden. Specifieke kenmerken waarvan descriptorvelden zijn gewijzigd, worden vermeld onder Wijzigingen in functiedeclaratie.
Wijzigingen in functiedeclaratie
De volgende functiehandtekeningen zijn gewijzigd voor 64-bits programmering. De items in vetgedrukte tekst zijn de specifieke parameters die verschillen.
SQLBindCol (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber,
SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLLEN BufferLength, SQLLEN * StrLen_or_Ind);
SQLBindParam (SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber,
SQLSMALLINT ValueType, SQLSMALLINT ParameterType,
SQLULEN ColumnSize, SQLSMALLINT DecimalDigits,
SQLPOINTER ParameterValuePtr, SQLLEN *StrLen_or_Ind);
SQLBindParameter (SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber,
SQLSMALLINT InputOutputType, SQLSMALLINT ValueType,
SQLSMALLINT ParameterType, SQLULEN ColumnSize, SQLSMALLINT DecimalDigits,
SQLPOINTER ParameterValuePtr, SQLLEN BufferLength, SQLLEN *StrLen_or_IndPtr);
SQLColAttribute (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber,
SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr,
SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr,
SQLLEN* NumericAttributePtr)
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 *NameLengthPtr, SQLSMALLINT *DataTypePtr, SQLULEN *ColumnSizePtr,
SQLSMALLINT *DecimalDigitsPtr, SQLSMALLINT *NullablePtr);
SQLDescribeParam (SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber,
SQLSMALLINT *DataTypePtr, SQLULEN *ParameterSizePtr, SQLSMALLINT *DecimalDigitsPtr,
SQLSMALLINT *NullablePtr);
SQLExtendedFetch(SQLHSTMT StatementHandle, SQLUSMALLINT FetchOrientation, SQLLEN FetchOffset,
SQLULEN * RowCountPtr, SQLUSMALLINT * RowStatusArray);
SQLFetchScroll (SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation,
SQLLEN FetchOffset);
SQLGetData (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber,
SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLLEN BufferLength, SQLLEN *StrLen_or_Ind);
SQLGetDescRec (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber,
SQLCHAR *Name, SQLSMALLINT BufferLength,
SQLSMALLINT *StringLengthPtr, SQLSMALLINT *TypePtr,
SQLSMALLINT *SubTypePtr, SQLLEN *LengthPtr,
SQLSMALLINT *PrecisionPtr, SQLSMALLINT *ScalePtr,
SQLSMALLINT *NullablePtr);
SQLParamOptions(SQLHSTMT hstmt, SQLULEN crow, SQLULEN * pirow);
SQLPutData (SQLHSTMT StatementHandle, SQLPOINTER DataPtr,
SQLLEN StrLen_or_Ind);
SQLRowCount (SQLHSTMT StatementHandle, SQLLEN* RowCountPtr);
SQLSetConnectOption(SQLHDBC ConnectHandle, SQLUSMALLINT Option,
SQLULEN Value);
SQLSetPos (SQLHSTMT StatementHandle, SQLSETPOSIROW RowNumber, SQLUSMALLINT Operation,
SQLUSMALLINT LockType);
SQLSetParam (SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber,
SQLSMALLINT ValueType, SQLSMALLINT ParameterType,
SQLULEN LengthPrecision, SQLSMALLINT ParameterScale,
SQLPOINTER ParameterValue, SQLLEN *StrLen_or_Ind);
SQLSetDescRec (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber,
SQLSMALLINT Type, SQLSMALLINT SubType, SQLLEN Length,
SQLSMALLINT Precision, SQLSMALLINT Scale, SQLPOINTER DataPtr,
SQLLEN *StringLengthPtr, SQLLEN *IndicatorPtr);
SQLSetScrollOptions (SQLHSTMT hstmt, SQLUSMALLINT fConcurrency,
SQLLEN crowKeyset, SQLUSMALLINT crowRowset);
SQLSetStmtOption (SQLHSTMT StatementHandle, SQLUSMALLINT Option,
SQLULEN Value);
Wijzigingen in SQL-gegevenstypen
De volgende vier SQL-typen worden nog steeds ondersteund op alleen 32 bits; ze zijn niet gedefinieerd voor 64-bits compilers. Deze typen worden niet meer gebruikt voor parameters in MDAC 2.7; het gebruik van deze typen veroorzaakt compilerfouten op 64-bits platforms.
#ifdef WIN32
typedef SQLULEN SQLROWCOUNT;
typedef SQLULEN SQLROWSETSIZE;
typedef SQLULEN SQLTRANSID;
typedef SQLLEN SQLROWOFFSET;
#endif
De definitie van SQLSETPOSIROW is gewijzigd voor zowel 32-bits als 64-bits compilers:
#ifdef _WIN64
typedef UINT64 SQLSETPOSIROW;
#else
#define SQLSETPOSIROW SQLUSMALLINT
#endif
De definities van SQLLEN en SQLULEN zijn gewijzigd voor 64-bits compilers:
#ifdef _WIN64
typedef INT64 SQLLEN;
typedef UINT64 SQLULEN;
#else
#define SQLLEN SQLINTEGER
#define SQLULEN SQLUINTEGER
#endif
Hoewel SQL_C_BOOKMARK is afgeschaft in ODBC 3.0, is deze waarde gewijzigd voor 64-bits compilers op 2.0-clients:
#ifdef _WIN64
#define SQL_C_BOOKMARK SQL_C_UBIGINT
#else
#define SQL_C_BOOKMARK SQL_C_ULONG
#endif
Het type BOOKMARK is anders gedefinieerd in de nieuwere headers:
typedef SQLULEN BOOKMARK;
Waarden geretourneerd door ODBC-API-aanroepen via aanwijzers
De volgende ODBC-functieaanroepen nemen als invoerparameter een aanwijzer naar een buffer waarin gegevens worden geretourneerd vanuit het stuurprogramma. De context en betekenis van de geretourneerde gegevens worden bepaald door andere invoerparameters voor de functies. In sommige gevallen kunnen deze methoden nu 64-bits waarden (8-byte integer) retourneren in plaats van de typische 32-bits (4-byte) gehele getallen. Deze gevallen zijn als volgt:
SQLColAttribute
Wanneer de parameter FieldIdentifier een van de volgende waarden heeft, wordt een 64-bits waarde geretourneerd in *NumericAttribute:
SQL_DESC_AUTO_UNIQUE_VALUE
SQL_DESC_CASE_SENSITIVE
SQL_DESC_CONCISE_TYPE
SQL_DESC_COUNT
SQL_DESC_DISPLAY_SIZE
SQL_DESC_FIXED_PREC_SCALE
SQL_DESC_LENGTH
SQL_DESC_NULLABLE
SQL_DESC_NUM_PREC_RADIX
SQL_DESC_OCTET_LENGTH
SQL_DESC_PRECISION
SQL_DESC_SCALE
SQL_DESC_SEARCHABLE
SQL_DESC_TYPE
SQL_DESC_UNNAMED
SQL_DESC_UNSIGNED
SQL_DESC_UPDATABLE
SQLColAttributes
Wanneer de parameter fDescType een van de volgende waarden heeft, wordt een 64-bits waarde geretourneerd in *pfDesc:
SQL_COLUMN_COUNT
SQL_COLUMN_DISPLAY_SIZE
SQL_COLUMN_LENGTH
SQL_DESC_AUTO_UNIQUE_VALUE
SQL_DESC_CASE_SENSITIVE
SQL_DESC_CONCISE_TYPE
SQL_DESC_FIXED_PREC_SCALE
SQL_DESC_SEARCHABLE
SQL_DESC_UNSIGNED
SQL_DESC_UPDATABLE
SQLGetConnectAttr
Wanneer de parameter Kenmerk een van de volgende waarden heeft, wordt een 64-bits waarde geretourneerd in Waarde:
SQL_ATTR_ASYNC_ENABLE
SQL_ATTR_ENLIST_IN_DTC
SQL_ATTR_ODBC_CURSORS
SQL_ATTR_QUIET_MODE
SQLGetConnectOption
Wanneer de parameter Kenmerk een van de volgende waarden heeft, wordt een 64-bits waarde geretourneerd in Waarde:
SQL_ATTR_QUIET_MODE
SQLGetDescField
Wanneer de parameter FieldIdentifier een van de volgende waarden heeft, wordt een 64-bits waarde geretourneerd in *ValuePtr:
SQL_DESC_ARRAY_SIZE
SQL_DESC_ARRAY_STATUS_PTR
SQL_DESC_BIND_OFFSET_PTR
SQL_DESC_DATA_PTR
SQL_DESC_DISPLAY_SIZE
SQL_DESC_INDICATOR_PTR
SQL_DESC_LENGTH
SQL_DESC_OCTET_LENGTH
SQL_DESC_OCTET_LENGTH_PTR
SQL_DESC_ROWS_PROCESSED_PTR
SQLGetDiagField
Wanneer de parameter DiagIdentifier een van de volgende waarden heeft, wordt een 64-bits waarde geretourneerd in *DiagInfoPtr:
SQL_DIAG_CURSOR_ROW_COUNT
SQL_DIAG_ROW_COUNT
SQL_DIAG_ROW_NUMBER
SQLGetInfo
Wanneer de parameter InfoType een van de volgende waarden heeft, wordt een 64-bits waarde geretourneerd in *InfoValuePtr:
SQL_DRIVER_HDBC
SQL_DRIVER_HENV
SQL_DRIVER_HLIB
Wanneer InfoType een van de volgende twee waarden heeft, is *InfoValuePtr 64 bits op zowel invoer als uitvoer:
SQL_DRIVER_HDESC
SQL_DRIVER_HSTMT
SQLGetStmtAttr
Wanneer de parameter Kenmerk een van de volgende waarden heeft, wordt een 64-bits waarde geretourneerd in *ValuePtr:
SQL_ATTR_APP_PARAM_DESC
SQL_ATTR_APP_ROW_DESC
SQL_ATTR_ASYNC_ENABLE
SQL_ATTR_CONCURRENCY
SQL_ATTR_CURSOR_SCROLLABLE
SQL_ATTR_CURSOR_SENSITIVITY
SQL_ATTR_CURSOR_TYPE
SQL_ATTR_ENABLE_AUTO_IPD
SQL_ATTR_FETCH_BOOKMARK_PTR
SQL_ATTR_ROWS_FETCHED_PTR
SQL_ATTR_IMP_PARAM_DESC
SQL_ATTR_IMP_ROW_DESC
SQL_ATTR_KEYSET_SIZE
SQL_ATTR_MAX_LENGTH
SQL_ATTR_MAX_ROWS
SQL_ATTR_METADATA_ID
SQL_ATTR_NOSCAN
SQL_ATTR_PARAM_BIND_OFFSET_PTR
SQL_ATTR_PARAM_BIND_TYPE
SQL_ATTR_PARAM_OPERATION_PTR
SQL_ATTR_PARAM_STATUS_PTR
SQL_ATTR_PARAMS_PROCESSED_PTR
SQL_ATTR_PARAMSET_SIZE
SQL_ATTR_QUERY_TIMEOUT
SQL_ATTR_RETRIEVE_DATA
SQL_ATTR_ROW_ARRAY_SIZE
SQL_ATTR_ROW_BIND_OFFSET_PTR
SQL_ATTR_ROW_NUMBER
SQL_ATTR_ROW_OPERATION_PTR
SQL_ATTR_ROW_STATUS_PTR
SQL_ATTR_SIMULATE_CURSOR
SQL_ATTR_USE_BOOKMARKS
SQLGetStmtOption
Wanneer de parameter Option een van de volgende waarden heeft, wordt een 64-bits waarde geretourneerd in *Value:
SQL_KEYSET_SIZE
SQL_MAX_LENGTH
SQL_MAX_ROWS
SQL_ROWSET_SIZE
SQLSetConnectAttr
Wanneer de parameter Kenmerk een van de volgende waarden heeft, wordt een 64-bits waarde doorgegeven in Waarde:
SQL_ATTR_ASYNC_ENABLE
SQL_ATTR_ENLIST_IN_DTC
SQL_ATTR_ODBC_CURSORS
SQL_ATTR_QUIET_MODE
SQLSetConnectOption
Wanneer de parameter Kenmerk een van de volgende waarden heeft, wordt een 64-bits waarde doorgegeven in Waarde:
SQL_ATTR_QUIET_MODE
SQLSetDescField
Wanneer de parameter FieldIdentifier een van de volgende waarden heeft, wordt een 64-bits waarde doorgegeven in ValuePtr:
SQL_DESC_ARRAY_SIZE
SQL_DESC_ARRAY_STATUS_PTR
SQL_DESC_BIND_OFFSET_PTR
SQL_DESC_DATA_PTR
SQL_DESC_DISPLAY_SIZE
SQL_DESC_INDICATOR_PTR
SQL_DESC_LENGTH
SQL_DESC_OCTET_LENGTH
SQL_DESC_OCTET_LENGTH_PTR
SQL_DESC_ROWS_PROCESSED_PTR
SQLSetStmtAttr
Wanneer de parameter Kenmerk een van de volgende waarden heeft, wordt een 64-bits waarde doorgegeven in ValuePtr:
SQL_ATTR_APP_PARAM_DESC
SQL_ATTR_APP_ROW_DESC
SQL_ATTR_ASYNC_ENABLE
SQL_ATTR_CONCURRENCY
SQL_ATTR_CURSOR_SCROLLABLE
SQL_ATTR_CURSOR_SENSITIVITY
SQL_ATTR_CURSOR_TYPE
SQL_ATTR_ENABLE_AUTO_IPD
SQL_ATTR_FETCH_BOOKMARK_PTR
SQL_ATTR_IMP_PARAM_DESC
SQL_ATTR_IMP_ROW_DESC
SQL_ATTR_KEYSET_SIZE
SQL_ATTR_MAX_LENGTH
SQL_ATTR_MAX_ROWS
SQL_ATTR_METADATA_ID
SQL_ATTR_NOSCAN
SQL_ATTR_PARAM_BIND_OFFSET_PTR
SQL_ATTR_PARAM_BIND_TYPE
SQL_ATTR_PARAM_OPERATION_PTR
SQL_ATTR_PARAM_STATUS_PTR
SQL_ATTR_PARAMS_PROCESSED_PTR
SQL_ATTR_PARAMSET_SIZE
SQL_ATTR_QUERY_TIMEOUT
SQL_ATTR_RETRIEVE_DATA
SQL_ATTR_ROW_ARRAY_SIZE
SQL_ATTR_ROW_BIND_OFFSET_PTR
SQL_ATTR_ROW_NUMBER
SQL_ATTR_ROW_OPERATION_PTR
SQL_ATTR_ROW_STATUS_PTR
SQL_ATTR_ROWS_FETCHED_PTR
SQL_ATTR_SIMULATE_CURSOR
SQL_ATTR_USE_BOOKMARKS
SQLSetStmtOption
Wanneer de parameter Option een van de volgende waarden heeft, wordt een 64-bits waarde doorgegeven in Waarde:
SQL_KEYSET_SIZE
SQL_MAX_LENGTH
SQL_MAX_ROWS
SQL_ROWSET_SIZE