Delen via


Het toewijzen van vervangingsfuncties voor achterwaartse compatibiliteit van toepassingen

Een ODBC 3.x-toepassing die via ODBC 3.x Driver Manager werkt, werkt tegen een ODBC 2.x-stuurprogramma zolang er geen nieuwe functies worden gebruikt. Zowel gedupliceerde functionaliteit als gedragswijzigingen hebben echter invloed op de manier waarop de ODBC 3.x-toepassing werkt op een ODBC 2.x-stuurprogramma . Wanneer u werkt met een ODBC 2.x-stuurprogramma, wijst de Driver Manager de volgende ODBC 3.x-functies, die een of meer ODBC 2.x-functies hebben vervangen, toe aan de overeenkomende ODBC 2.x-functies.

ODBC 3.x functie ODBC 2.x functie
SQLAllocHandle SQLAllocEnv, SQLAllocConnect of SQLAllocStmt
SQLBulkOperations SQLSetPos
SQLColAttribute SQLColAttributes
SQLEndTran SQLTransact
SQLFetch SQLExtendedFetch
SQLFetchScroll SQLExtendedFetch
SQLFreeHandle SQLFreeEnv, SQLFreeConnect of SQLFreeStmt
SQLGetConnectAttr SQLGetConnectOption
SQLGetDiagRec SQLError
SQLGetStmtAttr SQLGetStmtOption[1]
SQLSetConnectAttr SQLSetConnectOption
SQLSetStmtAttr SQLSetStmtOption[1]

[1] Andere acties kunnen ook worden uitgevoerd, afhankelijk van het kenmerk dat wordt aangevraagd.

SQLAllocHandle

Driver Manager wijst dit indien nodig toe aan SQLAllocEnv, SQLAllocConnect of SQLAllocStmt. De volgende aanroep van SQLAllocHandle:

SQLAllocHandle(HandleType, InputHandle, OutputHandlePtr);  

Resulteert erin dat de Driver Manager de volgende toewijzing uitvoert (conceptueel, geen foutcontrole):

switch (HandleType) {  
   case SQL_HANDLE_ENV: return (SQLAllocEnv(OutputHandlePtr));  
   case SQL_HANDLE_DBC: return (SQLAllocConnect (InputHandle, OutputHandlePtr));  
   case SQL_HANDLE_STMT: return (SQLAllocStmt (InputHandle, OutputHandlePtr));  
   default: // return SQL_ERROR, SQLSTATE HY092 ("Invalid attribute/option identifier")  
}  

SQLBulkOperations

Driver Manager wijst dit toe aan SQLSetPos. De volgende aanroep van SQLBulkOperations:

SQLBulkOperations(hstmt, Operation);  

resulteert in de volgende reeks stappen:

  1. Als het argument Bewerking is SQL_ADD, roept Driver Manager SQLSetPos als volgt aan:

    SQLSetPos (hstmt, 0, SQL_ADD, SQL_LOCK_NO_CHANGE);  
    
  2. Als het argument Bewerking niet is SQL_ADD, retourneert het stuurprogramma SQLSTATE HY092 (ongeldige kenmerk- of optienaam).

  3. Als de toepassing probeert de SQL_ATTR_ROW_STATUS_PTR te wijzigen tussen aanroepen naar SQLFetch of SQLFetchScroll en SQLBulkOperations, retourneert Driver Manager SQLSTATE HY011 (kenmerk kan nu niet worden ingesteld).

  4. Als het argument Bewerking is SQL_ADD, moet de toepassing SQLBindCol aanroepen om de gegevens te binden die moeten worden ingevoegd. SqlSetDescField of SQLSetDescRec kunnen niet worden aangeroepen om de gegevens te binden die moeten worden ingevoegd.

  5. Als het argument Bewerking is SQL_ADD en het aantal rijen dat moet worden ingevoegd, niet hetzelfde is als de huidige rijsetgrootte, moet SQLSetStmtAttr worden aangeroepen om het kenmerk SQL_ATTR_ROW_ARRAY_SIZE instructie in te stellen op het aantal rijen dat moet worden ingevoegd voordat SQLBulkOperations worden aangeroepen. Als u wilt terugkeren naar de vorige rijsetgrootte, moet de toepassing het kenmerk SQL_ATTR_ROW_ARRAY_SIZE instructie instellen voordat SQLFetch, SQLFetchScroll of SQLSetPos wordt aangeroepen.

SQLColAttribute

Driver Manager wijst dit toe aan SQLColAttributes. De volgende aanroep van SQLColAttribute:

SQLColAttribute(StatementHandle, ColumnNumber, FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr, NumericAttributePtr);  

resulteert in de volgende reeks stappen:

  1. Als FieldIdentifier een van de volgende opties is:

    SQL_DESC_PRECISION, SQL_DESC_SCALE, SQL_DESC_LENGTH, SQL_DESC_OCTET_LENGTH, SQL_DESC_UNNAMED, SQL_DESC_BASE_COLUMN_NAME, SQL_DESC_LITERAL_PREFIX, SQL_DESC_LITERAL_SUFFIX of SQL_DESC_LOCAL_TYPE_NAME

    Driver Manager retourneert SQL_ERROR met SQLSTATE HY091 (ongeldige descriptorveld-id). Er zijn geen verdere regels van deze sectie van toepassing.

  2. Driver Manager wijst respectievelijk SQL_COLUMN_COUNT, SQL_COLUMN_NAME of SQL_COLUMN_NULLABLE toe aan SQL_DESC_COUNT, SQL_DESC_NAME of SQL_DESC_NULLABLE. (Een ODBC 2.x-stuurprogramma hoeft alleen ondersteuning te bieden voor SQL_COLUMN_COUNT, SQL_COLUMN_NAME en SQL_COLUMN_NULLABLE, niet voor SQL_DESC_COUNT, SQL_DESC_NAME en SQL_DESC_NULLABLE.) De aanroep van SQLColAttribute is toegewezen aan:

    SQLColAttributes(StatementHandle, ColumnNumber, FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr, NumericAttributePtr);  
    
  3. Alle andere FieldIdentifier-waarden worden doorgegeven aan het stuurprogramma, waarbij SQLColAttribute is toegewezen aan SQLColAttributes , zoals eerder is weergegeven.

  4. Als BufferLength kleiner is dan 0, retourneert Driver Manager SQL_ERROR met SQLSTATE HY090 (ongeldige tekenreeks of bufferlengte). Er zijn geen verdere regels van deze sectie van toepassing.

  5. Als FieldIdentifier is SQL_DESC_CONCISE_TYPE en het geretourneerde type een beknopt datum/tijd-gegevenstype is, wijst Driver Manager de retourwaarden toe voor datum-, tijd- en tijdstempelcodes.

  6. Driver Manager voert de benodigde controles uit om te bepalen of de SQLSTATE HY010 (volgordefout) moet worden gemeld. Zo ja, dan retourneert Driver Manager SQL_ERROR en SQLSTATE HY010 (functiereeksfout). Er zijn geen verdere regels van deze sectie van toepassing.

SQLEndTran

Driver Manager wijst dit toe aan SQLTransact. De volgende aanroep van SQLEndTran:

SQLEndTran(HandleType, Handle, CompletionType);  

resulteert erin dat de Driver Manager de volgende toewijzing (conceptueel en zonder foutcontrole) uitvoert:

switch (HandleType) {  
   case SQL_HANDLE_ENV:return(SQLTransact(Handle, SQL_NULL_HDBC, CompletionType));  
   case SQL_HANDLE_DBC:return(SQLTransact(SQL_NULL_HENV, Handle, CompletionType);  
   default: // return SQL_ERROR, SQLSTATE HY092 ("Invalid attribute/option identifier")  
}  

SQLFetch

Driver Manager wijst dit toe aan SQLExtendedFetch met een FetchOrientation-argument van SQL_FETCH_NEXT. De volgende aanroep van SQLFetch:

SQLFetch (StatementHandle);  

zal ertoe leiden dat de Driver Manager als volgt SQLExtendedFetch aanroept:

rc = SQLExtendedFetch(StatementHandle, FetchOrientation, FetchOffset, &RowCount, RowStatusArray);  

In deze aanroep wordt het argument pcRow ingesteld op de waarde die de toepassing instelt voor het instructiekenmerk SQL_ATTR_ROWS_FETCHED_PTR via een aanroep naar SQLSetStmtAttr.

Opmerking

Wanneer de toepassing SQLSetStmtAttr aanroept om SQL_ATTR_ROW_STATUS_PTR in te stellen zodat deze verwijst naar een statusarray, slaat de Driver Manager de aanwijzer in de cache op. RowStatusArray kan gelijk zijn aan een null-aanwijzer.

Als het stuurprogramma SQLExtendedFetch niet ondersteunt en de cursorbibliotheek wordt geladen, gebruikt Driver Manager de SQLExtendedFetch van de cursorbibliotheek om SQLFetch toe te wijzen aan SQLExtendedFetch. Als het stuurprogramma GEEN ondersteuning biedt voor SQLExtendedFetch en de cursorbibliotheek niet wordt geladen, geeft Driver Manager de aanroep door aan SQLFetch door aan het stuurprogramma. Als de toepassing SQLSetStmtAttr aanroept om SQL_ATTR_ROW_STATUS_PTR in te stellen, zorgt Driver Manager ervoor dat de matrix is ingevuld. Als de toepassing SQLSetStmtAttr aanroept om SQL_ATTR_ROWS_FETCHED_PTR in te stellen, stelt Driver Manager dit veld in op 1.

SQLFetchScroll

Driver Manager wijst dit toe aan SQLExtendedFetch. De volgende aanroep van SQLFetchScroll:

SQLFetchScroll(StatementHandle, FetchOrientation, FetchOffset);  

resulteert in de volgende reeks stappen:

  1. Wanneer de toepassing SQLSetStmtAttr aanroept om SQL_ATTR_ROW_STATUS_PTR in te stellen (waarmee het SQL_DESC_ARRAY_STATUS_PTR veld in de IRD wordt ingesteld) om naar een statusmatrix te verwijzen, slaat Driver Manager deze aanwijzer in de cache op. Laat deze aanwijzer RowStatusArray zijn; Laat RowStatusArray anders gelijk zijn aan een null-aanwijzer. Als het argument RowStatusArray is ingesteld op een null-pointer, genereert de Driver Manager een rijstatus-array.

  2. Als FetchOrientation niet een van SQL_FETCH_NEXT is, SQL_FETCH_PRIOR, SQL_FETCH_ABSOLUTE, SQL_FETCH_RELATIVE, SQL_FETCH_FIRST, SQL_FETCH_LAST of SQL_FETCH_BOOKMARK, retourneert Driver Manager SQL_ERROR en SQLSTATE HY106 (Type ophalen buiten bereik). Er zijn geen verdere regels van deze sectie van toepassing.

  3. Case:

  • Als FetchOrientation gelijk is aan SQL_FETCH_BOOKMARK, gaat u als volgt te werk:

    • Als SQLSetStmtAttr eerder is aangeroepen om de waarde van SQL_ATTR_FETCH_BOOKMARK_PTR in te stellen, laat Bmk de waarde zijn die is verkregen door de aanwijzer uit te stellen SQL_DESC_FETCH_BOOKMARK_PTR.

    • Anders retourneert u SQL_ERROR met SQLSTATE HY111 (ongeldige bladwijzerwaarde). Er zijn geen verdere regels van deze sectie van toepassing.

    Driver Manager roept nu SQLExtendedFetch als volgt aan:

    rc = SQLExtendedFetch(StatementHandle, FetchOrientation, Bmk, pcRow, RowStatusArray);  
    
  • Anders roept Driver Manager SQLExtendedFetch als volgt aan:

    rc = SQLExtendedFetch(StatementHandle, FetchOrientation, FetchOffset, pcRow, RowStatusArray);  
    

    In deze aanroepen wordt het argument pcRow ingesteld op de waarde waarop de toepassing het instructiekenmerk SQL_ATTR_ROWS_FETCHED_PTR via een aanroep naar SQLSetStmtAttr instelt.

  • SQL_ATTR_ROW_ARRAY_SIZE is toegewezen aan SQL_ROWSET_SIZE.

  • Als rc gelijk is aan SQL_SUCCESS of SQL_SUCCESS_WITH_INFO, en als FetchOrientation gelijk is aan SQL_FETCH_BOOKMARK en FetchOffset niet gelijk is aan 0, plaatst Driver Manager een waarschuwing, SQLSTATE 01S10 (Poging om op te halen door een bladwijzer-offset, offsetwaarde genegeerd) en retourneert SQL_SUCCESS_WITH_INFO.

SQLFreeHandle

De Driver Manager wijst dit toe aan SQLFreeEnv, SQLFreeConnect of SQLFreeStmt. De volgende aanroep van SQLFreeHandle:

SQLFreeHandle(HandleType, Handle);  

resulteert erin dat de Driver Manager de volgende toewijzing (conceptueel en zonder foutcontrole) uitvoert:

switch (HandleType) {  
   case SQL_HANDLE_ENV: return (SQLFreeEnv(Handle));  
   case SQL_HANDLE_DBC: return (SQLFreeConnect(Handle));  
   case SQL_HANDLE_STMT: return (SQLFreeStmt(Handle, SQL_DROP));  
   default: // return SQL_ERROR, SQLSTATE HY092 ("Invalid attribute/option identifier")  
}  

SQLGetConnectAttr

Driver Manager wijst dit toe aan SQLGetConnectOption. De volgende aanroep naar SQLGetConnectAttr:

SQLGetConnectAttr(ConnectionHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr);  

resulteert in de volgende reeks stappen:

  1. Als kenmerk geen door het stuurprogramma gedefinieerde verbindings- of instructiekenmerk is en geen kenmerk is dat is gedefinieerd in ODBC 2.x, retourneert Driver Manager SQL_ERROR met SQLSTATE HY092 (ongeldig kenmerk/optie-id). Er zijn geen verdere regels in deze sectie van toepassing.

  2. Als kenmerk gelijk is aan SQL_ATTR_AUTO_IPD of SQL_ATTR_METADATA_ID, retourneert Driver Manager SQL_ERROR met SQLSTATE HY092 (ongeldig kenmerk/optie-id).

  3. Driverbeheer voert de benodigde controles uit om te bepalen of SQLSTATE 08003 (Verbinding niet geopend) of SQLSTATE HY010 (Functiereeksfout) moet worden gegenereerd. Als dat het geval is, retourneert Driver Manager SQL_ERROR en wordt het juiste foutbericht weergegeven. Er zijn geen verdere regels van deze sectie van toepassing.

  4. Driver Manager roept SQLGetConnectOption als volgt aan:

    SQLGetConnectOption (ConnectionHandle, Attribute, ValuePtr);  
    

    Houd er rekening mee dat bufferlength en StringLengthPtr worden genegeerd.

SQLGetData

Wanneer een ODBC 3.x-toepassing die werkt met een ODBC 2.x-stuurprogrammaSQLGetData aanroept met het argument ColumnNumber gelijk aan 0, wijst odBC 3.x Driver Manager dit toe aan een aanroep naar SQLGetStmtOption met het kenmerk Option ingesteld op SQL_GET_BOOKMARK.

SQLGetStmtAttr

Driver Manager wijst dit toe aan SQLGetStmtOption. De volgende aanroep van SQLGetStmtAttr:

SQLGetStmtAttr(StatementHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr);  

resulteert in de volgende reeks stappen:

  1. Als kenmerk geen door het stuurprogramma gedefinieerde verbindings- of instructiekenmerk is en geen kenmerk is dat is gedefinieerd in ODBC 2.x, retourneert Driver Manager SQL_ERROR met SQLSTATE HY092 (ongeldig kenmerk/optie-id). Er zijn geen verdere regels in deze sectie van toepassing.

  2. Als kenmerk een van de volgende opties is:

    SQL_ATTR_APP_ROW_DESC

    SQL_ATTR_APP_PARAM_DESC

    SQL_ATTR_AUTO_IPD

    SQL_ATTR_ROW_BIND_TYPE

    SQL_ATTR_IMP_ROW_DESC

    SQL_ATTR_IMP_PARAM_DESC

    SQL_ATTR_METADATA_ID

    SQL_ATTR_PARAM_BIND_TYPE

    SQL_ATTR_PREDICATE_PTR

    SQL_ATTR_PREDICATE_OCTET_LENGTH_PTR

    SQL_ATTR_PARAM_BIND_OFFSET_PTR

    SQL_ATTR_ROW_BIND_OFFSET_PTR

    SQL_ATTR_ROW_OPERATION_PTR

    SQL_ATTR_PARAM_OPERATION_PTR

    Driver Manager retourneert SQL_ERROR met SQLSTATE HY092 (ongeldig kenmerk/optie-id). Er zijn geen verdere regels van deze sectie van toepassing.

  3. Driver Manager voert de benodigde controles uit om te bepalen of de SQLSTATE HY010 (volgordefout) moet worden gemeld. Zo ja, dan retourneert Driver Manager SQL_ERROR en SQLSTATE HY010 (functiereeksfout). Er zijn geen verdere regels van deze sectie van toepassing.

  4. Als kenmerk gelijk is aan SQL_ATTR_ROWS_FETCHED_PTR, retourneert Driver Manager een aanwijzer naar de interne Driver Manager-variabele cRow, die het heeft gebruikt of gebruikt in een aanroep naar SQLExtendedFetch. Er zijn geen verdere regels van deze sectie van toepassing.

  5. Als het kenmerk gelijk is aan SQL_DESC_FETCH_BOOKMARK_PTR, retourneert Driver Manager de juiste aanwijzer die tijdens een aanroep naar SQLSetStmtAttr in de cache is opgeslagen.

  6. Als kenmerk gelijk is aan SQL_ATTR_ROW_STATUS_PTR, retourneert Driver Manager de juiste aanwijzer die tijdens een aanroep naar SQLSetStmtAttr in de cache is opgeslagen.

  7. Driver Manager roept SQLGetStmtOption als volgt aan:

    SQLGetStmtOption (hstmt, fOption, pvParam);  
    

    waarbij hstmt, fOption en pvParam worden ingesteld op respectievelijk de waarden van StatementHandle, Attribute en ValuePtr. De BufferLength en StringLengthPtr worden genegeerd.

SQLSetConnectAttr

Driver Manager wijst dit toe aan SQLSetConnectOption. De volgende aanroep naar SQLSetConnectAttr:

SQLSetConnectAttr(ConnectionHandle, Attribute, ValuePtr, StringLength);  

resulteert in de volgende reeks stappen:

  1. Als kenmerk geen door het stuurprogramma gedefinieerde verbindings- of instructiekenmerk is en geen kenmerk is dat is gedefinieerd in ODBC 2.x, retourneert Driver Manager SQL_ERROR met SQLSTATE HY092 (ongeldig kenmerk/optie-id). Er zijn geen verdere regels in deze sectie van toepassing.

  2. Als kenmerk gelijk is aan SQL_ATTR_AUTO_IPD, retourneert Driver Manager SQL_ERROR met SQLSTATE HY092 (ongeldig kenmerk/optie-id).

  3. Driverbeheer voert de nodige controles uit om vast te stellen of SQLSTATE 08003 (verbinding niet geopend) of SQLSTATE HY010 (functiereeksfout) gegenereerd moeten worden. Als een van deze fouten moet worden gegenereerd, retourneert Driver Manager SQL_ERROR en plaatst het juiste foutbericht. Er zijn geen verdere regels van deze sectie van toepassing.

  4. Driver Manager roept SQLSetConnectOption als volgt aan:

    SQLSetConnectOption (hdbc, fOption, vParam);  
    

    waarbij hdbc, fOption en vParam worden ingesteld op respectievelijk de waarden van ConnectionHandle, Attribute en ValuePtr. StringLengthPtr wordt genegeerd.

Opmerking

De mogelijkheid om instructiekenmerken op het verbindingsniveau in te stellen, is afgeschaft. Statement-attributen mogen nooit worden ingesteld op het verbindingsniveau door een ODBC 3.x-toepassing.

SQLSetStmtAttr

Driver Manager wijst dit toe aan SQLSetStmtOption. De volgende aanroep van SQLSetStmtAttr:

SQLSetStmtAttr(StatementHandle, Attribute, ValuePtr, StringLength);  

resulteert in de volgende reeks stappen:

  1. Als kenmerk geen door het stuurprogramma gedefinieerde verbindings- of instructiekenmerk is en geen kenmerk is dat is gedefinieerd in ODBC 2.x, retourneert Driver Manager SQL_ERROR met SQLSTATE HY092 (ongeldig kenmerk/optie-id). Er zijn geen verdere regels in deze sectie van toepassing.

  2. Als kenmerk een van de volgende opties is:

    SQL_ATTR_APP_ROW_DESC

    SQL_ATTR_APP_PARAM_DESC

    SQL_ATTR_AUTO_IPD

    SQL_ATTR_ROW_BIND_TYPE

    SQL_ATTR_IMP_ROW_DESC

    SQL_ATTR_IMP_PARAM_DESC

    SQL_ATTR_METADATA_ID

    SQL_ATTR_PARAM_BIND_TYPE

    SQL_ATTR_PREDICATE_PTR

    SQL_ATTR_PREDICATE_OCTET_LENGTH_PTR

    SQL_ATTR_PARAM_BIND_OFFSET_PTR

    SQL_ATTR_ROW_BIND_OFFSET_PTR

    SQL_ATTR_ROW_OPERATION_PTR

    SQL_ATTR_PARAM_OPERATION_PTR

    Driver Manager retourneert SQL_ERROR met SQLSTATE HY092 (ongeldig kenmerk/optie-id). Er zijn geen verdere regels van deze sectie van toepassing.

  3. De Driver Manager voert de benodigde controles uit om te controleren of SQLSTATE HY010 (functievolgordefout) moet worden gegenereerd. Zo ja, dan retourneert Driver Manager SQL_ERROR en SQLSTATE HY010 (functiereeksfout). Er zijn geen verdere regels van deze sectie van toepassing.

  4. Als kenmerk gelijk is aan SQL_ATTR_PARAMSET_SIZE of SQL_ATTR_PARAMS_PROCESSED_PTR, raadpleegt u de sectie 'Toewijzingen voor het afhandelen van parametermatrices', verderop in dit onderwerp. Er zijn geen verdere regels van deze sectie van toepassing.

  5. Als kenmerk gelijk is aan SQL_ATTR_ROWS_FETCHED_PTR, slaat Driver Manager de aanwijzerwaarde op voor later gebruik met SQLFetchScroll.

  6. Als kenmerk gelijk is aan SQL_ATTR_ROW_STATUS_PTR, slaat Driver Manager de aanwijzerwaarde op voor later gebruik met SQLFetchScroll of SQLSetPos. Er zijn geen verdere regels van deze sectie van toepassing.

  7. Als kenmerk gelijk is aan SQL_ATTR_FETCH_BOOKMARK_PTR, slaat Driver Manager ValuePtr op en gebruikt de waarde in de cache verderop in een aanroep van SQLFetchScroll. Er zijn geen verdere regels van deze sectie van toepassing.

  8. Driver Manager roept SQLSetStmtOption als volgt aan:

    SQLSetStmtOption (hstmt, fOption, vParam);  
    

    waarbij hstmt, fOption en vParam worden ingesteld op respectievelijk de waarden van StatementHandle, Attribute en ValuePtr. Het argument StringLength wordt genegeerd.

    Als een ODBC 2.x-stuurprogramma tekenreeks, stuurprogrammaspecifieke instructieopties ondersteunt, moet een ODBC 3.x-toepassingSQLSetStmtOption aanroepen om deze opties in te stellen.

Toewijzingen voor het verwerken van parametermatrices

Wanneer de toepassing aanroept:

SQLSetStmtAttr (StatementHandle, SQL_ATTR_PARAMSET_SIZE, Size, StringLength);  

De Driver Manager voert oproepen uit:

SQLParamOptions (StatementHandle, Size, &RowCount);  

Driver Manager retourneert later een aanwijzer naar deze variabele wanneer de toepassing SQLGetStmtAttr aanroept om SQL_ATTR_PARAMS_PROCESSED_PTR op te halen. De Driver Manager kan deze interne variabele pas wijzigen wanneer de statementhandle terugkeert naar de voorbereide of gealloceerde status.

Een ODBC 3.x-toepassing kan SQLGetStmtAttr aanroepen om de waarde van SQL_ATTR_PARAMS_PROCESSED_PTR te verkrijgen, ook al is het SQL_DESC_ARRAY_SIZE veld niet expliciet ingesteld in de APD. Deze situatie kan zich bijvoorbeeld voordoen als de toepassing een algemene routine heeft die controleert op de huidige 'rij' van parameters die worden verwerkt wanneer SQLExecute SQL_NEED_DATA retourneert. Deze routine wordt aangeroepen, ongeacht of de SQL_DESC_ARRAY_SIZE 1 is of groter is dan 1. Om hier rekening mee te houden, moet de Driver Manager deze interne variabele definiëren, ongeacht of de toepassing SQLSetStmtAttr heeft aangeroepen om het veld SQL_DESC_ARRAY_SIZE in APD in te stellen. Als SQL_DESC_ARRAY_SIZE niet is ingesteld, moet de Driver Manager ervoor zorgen dat deze variabele de waarde 1 bevat voordat er wordt teruggekeerd van SQLExecDirect of SQLExecute.

Foutafhandeling

In ODBC 3.x vult het aanroepen van SQLFetch of SQLFetchScroll de SQL_DESC_ARRAY_STATUS_PTR in de IRD en bevat het SQL_DIAG_ROW_NUMBER veld van een bepaalde diagnostische record het nummer van de rij in de rijenset waarop deze record betrekking heeft. Hiermee kan de toepassing een foutbericht correleren met een bepaalde rijpositie.

Een ODBC 2.x-stuurprogramma kan deze functionaliteit niet bieden. Het biedt echter foutafbakening met SQLSTATE 01S01 (fout in rij). Een ODBC 3.x-toepassing die SQLFetch of SQLFetchScroll gebruikt in combinatie met een ODBC 2.x-stuurprogramma, moet zich hiervan bewust zijn. Houd er ook rekening mee dat een dergelijke toepassing SQLGetDiagField niet kan aanroepen om het SQL_DIAG_ROW_NUMBER veld toch te verkrijgen. Een ODBC 3.x-toepassing die werkt met een ODBC 2.x-stuurprogramma kan SQLGetDiagField alleen aanroepen met een DiagIdentifier-argument van SQL_DIAG_MESSAGE_TEXT, SQL_DIAG_NATIVE, SQL_DIAG_RETURNCODE of SQL_DIAG_SQLSTATE. De ODBC 3.x-stuurprogrammabeheer onderhoudt de structuur van diagnostische gegevens bij het werken met een ODBC 2.x-stuurprogramma , maar het ODBC 2.x-stuurprogramma retourneert alleen deze vier velden.

Wanneer een ODBC 2.x-toepassing werkt met een ODBC 2.x-stuurprogramma en een bewerking meerdere fouten kan veroorzaken die door Driver Manager kunnen worden geretourneerd, kunnen verschillende fouten worden geretourneerd door ODBC 3.x Driver Manager dan door ODBC 2.x Driver Manager.

Toewijzingen voor bladwijzerbewerkingen

ODBC 3.x Driver Manager voert de volgende mappings uit wanneer een ODBC 3.x-toepassing die werkt met een ODBC 2.x-stuurprogramma bladwijzerbewerkingen uitvoert.

SQLBindCol

Wanneer een ODBC 3.x-toepassing die werkt met een ODBC 2.x-stuurprogrammaSQLBindCol aanroept om verbinding te maken met kolom 0 met fCType gelijk aan SQL_C_VARBOOKMARK, controleert odBC 3.x Driver Manager of het argument BufferLength kleiner is dan 4 of groter dan 4 en retourneert de SQLSTATE HY090 (ongeldige tekenreeks of bufferlengte). Als het argument BufferLength gelijk is aan 4, roept Driver Manager SQLBindCol aan in het stuurprogramma, nadat fCType is vervangen door SQL_C_BOOKMARK.

SQLColAttribute

Wanneer een ODBC 3.x-toepassing die werkt met een ODBC 2.x-stuurprogrammaSQLColAttribute aanroept met het argument ColumnNumber ingesteld op 0, retourneert Driver Manager de FieldIdentifier-waarden die worden vermeld in de volgende tabel.

FieldIdentifier Waarde
SQL_DESC_AUTO_UNIQUE_VALUE SQL_FALSE
SQL_DESC_CASE_SENSITIVE SQL_FALSE
SQL_DESC_CATALOG_NAME "" (lege tekenreeks)
SQL_DESC_CONCISE_TYPE SQL_BINARY
SQL_DESC_COUNT Dezelfde waarde geretourneerd door SQLNumResultCols
SQL_DESC_DATETIME_INTERVAL_CODE 0
SQL_DESC_DISPLAY_SIZE 8
SQL_DESC_FIXED_PREC_SCALE SQL_FALSE
SQL_DESC_LABEL "" (lege tekenreeks)
SQL_DESC_LENGTH 0
SQL_DESC_LITERAL_PREFIX "" (lege tekenreeks)
SQL_DESC_LITERAL_SUFFIX "" (lege tekenreeks)
SQL_DESC_LOCAL_TYPE_NAME "" (lege tekenreeks)
SQL_DESC_NAME "" (lege tekenreeks)
SQL_DESC_NULLABLE SQL_NO_NULLS
SQL_DESC_OCTET_LENGTH 4
SQL_DESC_PRECISION 4
SQL_DESC_SCALE 0
SQL_DESC_SCHEMA_NAME "" (lege tekenreeks)
SQL_DESC_SEARCHABLE SQL_PRED_NONE
SQL_DESC_TABLE_NAME "" (lege tekenreeks)
SQL_DESC_TYPE SQL_BINARY
SQL_DESC_TYPE_NAME "" (lege tekenreeks)
SQL_DESC_UNNAMED SQL_UNNAMED
SQL_DESC_UNSIGNED SQL_FALSE
SQL_DESC_UPDATEABLE SQL_ATTR_READ_ONLY

SQLDescribeCol

Wanneer een ODBC 3.x-toepassing die werkt met een ODBC 2.x-stuurprogrammaSQLDescribeCol aanroept met het argument ColumnNumber ingesteld op 0, retourneert Driver Manager de waarden die worden vermeld in de volgende tabel.

Buffer Waarde
ColumnName "" (lege tekenreeks)
*NameLengthPtr 0
*DataTypePtr SQL_BINARY
*ColumnSizePtr 4
*DecimalDigitsPtr 0
*NullablePtr SQL_NO_NULLS

SQLGetData

Wanneer een ODBC 3.x-toepassing die werkt met een ODBC 2.x-stuurprogramma , de volgende aanroep naar SQLGetData uitvoert om een bladwijzer op te halen:

SQLGetData(StatementHandle, 0, SQL_C_VARBOOKMARK, TargetValuePtr, BufferLength, StrLen_or_IndPtr)  

de aanroep is als volgt toegewezen aan SQLGetStmtOption met een fOption van SQL_GET_BOOKMARK:

SQLGetStmtOption(hstmt, SQL_GET_BOOKMARK, TargetValuePtr)  

waarbij hstmt en pvParam respectievelijk worden ingesteld op de waarden in StatementHandle en TargetValuePtr. De bladwijzer wordt geretourneerd in de buffer waar het argument pvParam (TargetValuePtr) naar verwijst. De waarde in de buffer die wordt verwezen door het argument StrLen_or_IndPtr in de aanroep naar SQLGetData is ingesteld op 4.

Deze toewijzing is nodig om rekening te houden met het geval waarin SQLFetch werd aangeroepen vóór de aanroep van SQLGetData en het ODBC 2.x-stuurprogramma geen ondersteuning biedt voor SQLExtendedFetch. In dit geval wordt SQLFetch doorgegeven aan het ODBC 2.x-stuurprogramma . In dat geval wordt het ophalen van bladwijzers niet ondersteund.

SQLGetData kan niet meerdere keren worden aangeroepen in een ODBC 2.x-stuurprogramma om een bladwijzer op te halen in delen. Als u SQLGetData aanroept met het argument BufferLength dat is ingesteld op een waarde kleiner dan 4, retourneert het argument ColumnNumber ingesteld op 0 SQLSTATE HY090 (ongeldige tekenreeks- of bufferlengte). SQLGetData kan echter meerdere keren worden aangeroepen om dezelfde bladwijzer op te halen.

SQLSetStmtAttr

Wanneer een ODBC 3.x-toepassing die werkt met een ODBC 2.x-stuurprogrammaSQLSetStmtAttr aanroept om het kenmerk SQL_ATTR_USE_BOOKMARKS in te stellen op SQL_UB_VARIABLE, stelt Driver Manager het kenmerk in op SQL_UB_ON in het onderliggende ODBC 2.x-stuurprogramma .