SQLExtendedFetch-funktion

Överensstämmelse
Version introducerad: ODBC 1.0 Standarder Efterlevnad: Föråldrad

Summary
SQLExtendedFetch hämtar den angivna radmängden av data från resultatuppsättningen och returnerar data för alla bundna kolumner. Radmängder kan specificeras på en absolut eller relativ position eller med bokmärke.

Note

I ODBC 3*.x* har SQLExtendedFetch ersatts av SQLFetchScroll. ODBC 3*.x*-applikationer bör inte anropa SQLExtendedFetch; istället borde de anropa SQLFetchScroll. Driver Manager mappar SQLFetchScroll till SQLExtendedFetch när man arbetar med en ODBC 2*.x*-drivrutin. ODBC 3*.x*-drivrutiner bör stödja SQLExtendedFetch om de vill arbeta med ODBC 2*.x*-applikationer som anropar det. För mer information, se "Kommentarer" och Blockmarkörer, rullbara markörer och bakåtkompatibilitet i bilaga G: Drivrutinsriktlinjer för bakåtkompatibilitet.

Syntax

  
SQLRETURN SQLExtendedFetch(  
      SQLHSTMT         StatementHandle,  
      SQLUSMALLINT     FetchOrientation,  
      SQLLEN           FetchOffset,  
      SQLULEN *        RowCountPtr,  
      SQLUSMALLINT *   RowStatusArray);  

Arguments

StatementHandle
[Indata] Instruktionshandtag.

FetchOrientation
[Input] Typ av apport. Detta är samma som FetchOrientation i SQLFetchScroll.

FetchOffset
[Input] Nummer på raden att hämta. Detta är samma som FetchOffset i SQLFetchScroll, med ett undantag. När FetchOrientation är SQL_FETCH_BOOKMARK är FetchOffset ett bokmärke med fast längde, inte en offset från ett bokmärke. Med andra ord hämtar SQLExtendedFetch bokmärket från detta argument, inte attributet SQL_ATTR_FETCH_BOOKMARK_PTR statement. Den stöder inte bokmärken med variabel längd och tillåter inte att hämta en raduppsättning vid en offset (annat än 0) från ett bokmärke.

RowCountPtr
[Utdata] Peka på en buffert där man returnerar antalet rader som faktiskt hämtats. Denna buffert används på samma sätt som bufferten specificerad av attributet SQL_ATTR_ROWS_FETCHED_PTR statement. Denna buffert används endast av SQLExtendedFetch. Den används inte av SQLFetch eller SQLFetchScroll.

RowStatusArray
[Utdata] Pekar på en array där statusen för varje rad ska returneras. Denna array används på samma sätt som arrayen som specificeras av attributet SQL_ATTR_ROW_STATUS_PTR statement.

Dock lagras inte adressen till denna array i fältet SQL_DESC_STATUS_ARRAY_PTR i IRD. Dessutom används denna array endast av SQLExtendedFetch och av SQLBulkOperations med en Operation av SQL_ADD eller SQLSetPos när den anropas efter SQLExtendedFetch. Den används inte av SQLFetch eller SQLFetchScroll, och den används inte av SQLBulkOperations eller SQLSetPos när de anropas efter SQLFetch eller SQLFetchScroll. Den används inte heller när SQLBulkOperations med en Operation av SQL_ADD anropas innan någon hämtningsfunktion anropas. Med andra ord används den endast i satstillstånd S7. Det används inte i påståenden S5 eller S6. För mer information, se Statement Transitions i Appendix B: ODBC State Transition Tables.

Applikationer bör tillhandahålla en giltig pekare i argumentet RowStatusArray ; om inte, är beteendet hos SQLExtendedFetch och beteendet hos anrop till SQLBulkOperations eller SQLSetPos efter att en markör har placerats av SQLExtendedFetch odefinierade.

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_STILL_EXECUTING, SQL_ERROR eller SQL_INVALID_HANDLE.

Diagnostics

När SQLExtendedFetch returnerar antingen SQL_ERROR eller SQL_SUCCESS_WITH_INFO kan ett associerat SQLSTATE-värde erhållas genom att anropa SQLError. Följande tabell listar de SQLSTATE-värden som vanligtvis returneras av SQLExtendedFetch och förklarar var och en i kontexten av denna funktion; notationen "(DM)" föregår beskrivningarna av SQLSTATE som returneras av Driver Manager. Returkoden som är associerad med varje SQLSTATE-värde är SQL_ERROR, om inget annat anges. Om ett fel uppstår i en enda kolumn kan SQLGetDiagField anropas med DiagIdentifier SQL_DIAG_COLUMN_NUMBER för att bestämma vilken kolumn felet inträffade i; och SQLGetDiagField kan anropas med en DiagIdentifier av SQL_DIAG_ROW_NUMBER för att bestämma raden som innehåller den kolumnen.

SQLSTATE Error Description
01000 Allmän varning Informationsmeddelande för drivrutinsspecifikt. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
01004 Strängdata, höger trunkerade Sträng- eller binärdata som returnerades för en kolumn resulterade i trunkering av icke-blanka tecken eller icke-NULL-binärdata. Om det var ett strängvärde trunkerades det korrekt. Om det var ett numeriskt värde avkortades den bråkdelade delen av talet. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
01S01 Fel i rad Ett fel uppstod vid hämtning av en eller flera rader. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
01S06 Försök att hämta innan resultatuppsättningen returnerade den första raduppsättningen Den begärda raduppsättningen överlappade början av resultatuppsättningen när den aktuella positionen låg bortom första raden, och antingen var FetchOrientation SQL_PRIOR eller så SQL_RELATIVE FetchOrientation med en negativ FetchOffset vars absolutvärde var mindre än eller lika med den aktuella SQL_ROWSET_SIZE. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
01S07 Fraktionell trunkering Datan som returnerades för en kolumn var förkortad. För numeriska datatyper förkortades den bråkdelade delen av talet. För tids-, tidsstämpel- och intervalldatatyper som innehåller en tidskomponent förkortades den bråkdelade delen av tiden.

(Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
07006 Attributöverträdelse för begränsad datatyp Ett datavärde kunde inte konverteras till den C-datatyp som specificerades av TargetType i SQLBindCol.
07009 Ogiltigt deskriptorindex Kolumn 0 var bunden till SQLBindCol och attributet SQL_ATTR_USE_BOOKMARKS satsen sattes till SQL_UB_OFF.
08S01 Kommunikationslänkfel Kommunikationslänken mellan drivrutinen och datakällan som drivrutinen var ansluten till misslyckades innan funktionen slutförde bearbetningen.
22002 Indikatorvariabel krävs men tillhandahålls inte NULL-data hämtades till en kolumn vars StrLen_or_IndPtr sattes av SQLBindCol var en nullpekare.

(Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
22003 Numeriskt värde som ligger utom intervallet Att returnera det numeriska värdet (som numeriskt eller sträng) för en eller flera kolumner skulle ha orsakat att hela (istället för bråkdels) delen av talet hade trunkerats.

(Funktionen returnerar SQL_SUCCESS_WITH_INFO.)

För mer information, se Riktlinjer för intervall- och numeriska datatyper i bilaga D: Datatyper.
22007 Ogiltigt datetime-format En teckenkolumn i resultatuppsättningen var bunden till en datum-, tids- eller tidsstämpelstruktur C, och ett värde i kolumnen var respektive ett ogiltigt datum, tid eller tidsstämpel.

(Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
22012 Division med noll Ett värde från ett aritmetiskt uttryck returnerades, vilket resulterade i division med noll.

(Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
22015 Intervallfältsspill Att tilldela från en exakt numerisk eller intervall SQL-typ till en intervall C-typ orsakade förlust av betydande siffror i det ledande fältet.

När data hämtades till en intervalltyp C fanns ingen representation av värdet för SQL-typen i intervall C-typen.

(Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
22018 Ogiltigt teckenvärde för gjuten specifikation C-typen var en exakt eller ungefärlig numerisk typ, en date-time eller en intervalldatatyp; kolumnens SQL-typ var en teckendatatyp; och värdet i kolumnen var inte en giltig literal av den bundna typen C.

(Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
24000 Ogiltigt markörtillstånd StatementHandle var i ett exekverat tillstånd, men ingen resultatuppsättning var kopplad till StatementHandle.
HY000 Allmänt fel Ett fel uppstod för vilket det inte fanns någon specifik SQLSTATE och för vilken ingen implementeringsspecifik SQLSTATE definierades. Felmeddelandet som returnerades av SQLError i bufferten *MessageText beskriver felet och orsaken.
HY001 Fel vid minnesallokering Drivrutinen kunde inte allokera minne som krävs för körning eller slutförande av funktionen.
HY008 Åtgärden avbröts Asynkron bearbetning aktiverades för StatementHandle. Funktionen anropades, och innan exekveringen var klar anropades SQLCancel eller SQLCancelHandleStatementHandle, och sedan anropades funktionen igen på StatementHandle.

Funktionen anropades och innan körningen slutfördes anropades SQLCancel eller SQLCancelHandleStatementHandle från en annan tråd i ett flertrådsprogram.
HY010 Funktionssekvensfel (DM) En asynkront körande funktion anropades för anslutningshandtaget som är associerat med StatementHandle. Denna asynkrona funktion kördes fortfarande när SQLExtendedFetch-funktionen anropades.

(DM) SQLExecute, SQLExecDirect eller SQLMoreResults anropades för StatementHandle och returnerades SQL_PARAM_DATA_AVAILABLE. Den här funktionen anropades innan data hämtades för alla strömmade parametrar.

(DM) Den specificerade StatementHandle var inte i ett exekverat tillstånd. Funktionen anropades utan att först anropa SQLExecDirect, SQLExecute eller en katalogfunktion.

(DM) En asynkront körande funktion (inte den här) anropades för StatementHandle och kördes fortfarande när den här funktionen anropades.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations eller SQLSetPos anropades för StatementHandle och returnerades SQL_NEED_DATA. Den här funktionen anropades innan data skickades för alla data-at-execution-parametrar eller kolumner.

(DM) SQLExtendedFetch anropades för StatementHandle efter att SQLFetch eller SQLFetchScroll anropats och innan SQLFreeStmt anropades med SQL_CLOSE-alternativet.

(DM) SQLBulkOperations anropades för en sats innan SQLFetch, SQLFetchScroll eller SQLExtendedFetch anropades, och sedan anropades SQLExtendedFetch innan SQLFreeStmt anropades med SQL_CLOSE-alternativet.
HY013 Minneshanteringsfel Det gick inte att bearbeta funktionsanropet eftersom det inte gick att komma åt underliggande minnesobjekt, möjligen på grund av minnesbrist.
HY106 Hämta-typ utanför räckvidd (DM) Värdet som angavs för argumentet FetchOrientation var ogiltigt. (Se "Kommentarer.")

Argumentet FetchOrientation var SQL_FETCH_BOOKMARK, och attributet SQL_ATTR_USE_BOOKMARKS satsen sattes till SQL_UB_OFF.

Värdet på SQL_CURSOR_TYPE-formuleringsalternativet var SQL_CURSOR_FORWARD_ONLY, och värdet av argumentet FetchOrientation var inte SQL_FETCH_NEXT.

Argumentet FetchOrientation var SQL_FETCH_RESUME.
HY107 Radvärde utanför räckvidden Värdet som specificerades med SQL_CURSOR_TYPE-satsalternativet var SQL_CURSOR_KEYSET_DRIVEN, men värdet som specificerades med attributet SQL_KEYSET_SIZE sats var större än 0 och mindre än värdet som specificerades med attributet SQL_ROWSET_SIZE-sats.
HY111 Ogiltigt bokmärkesvärde Argumentet FetchOrientation var SQL_FETCH_BOOKMARK, och bokmärket som specificerades i argumentet FetchOffset var inte giltigt.
HY117 Anslutningen pausas på grund av okänt transaktionstillstånd. Endast frånkopplings- och skrivskyddade funktioner tillåts. (DM) Mer information om pausat tillstånd finns i SQLEndTran-funktion.
HYC00 Valfri funktion har inte implementerats Drivrutin eller datakälla stöder inte den angivna hämtningstypen.

Drivrutinen eller datakällan stöder inte konverteringen som specificeras av kombinationen av TargetType i SQLBindCol och SQL-datatypen i motsvarande kolumn. Detta fel gäller endast när kolumnens SQL-datatyp mappats till en drivrutinsspecifik SQL-datatyp.
HYT00 Tidsgränsen har upphört att gälla Tidsgränsen för frågan upphörde att gälla innan datakällan returnerade resultatuppsättningen. Timeout-perioden sätts via SQLSetStmtOption, SQL_QUERY_TIMEOUT.
HYT01 Tidsgränsen för anslutningen gick ut Tidsgränsen för anslutningen löpte ut innan datakällan svarade på begäran. Tidsgränsen för anslutningen anges via SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Drivrutinen stöder inte den här funktionen (DM) Drivrutinen som är associerad med StatementHandle stöder inte funktionen.

Comments

Beteendet hos SQLExtendedFetch är identiskt med SQLFetchScroll, med följande undantag:

  • SQLExtendedFetch och SQLFetchScroll använder olika metoder för att returnera antalet rader som hämtats. SQLExtendedFetch returnerar antalet rader hämtade i *RowCountPtr; SQLFetchScroll returnerar antalet rader som hämtats direkt till bufferten som SQL_ATTR_ROWS_FETCHED_PTR pekar på. För mer information, se argumentet RowCountPtr .

  • SQLExtendedFetch och SQLFetchScroll returnerar status för varje rad i olika arrayer. För mer information, se argumentet RowStatusArray .

  • SQLExtendedFetch och SQLFetchScroll använder olika metoder för att hämta bokmärket när FetchOrientation är SQL_FETCH_BOOKMARK. SQLExtendedFetch stöder inte bokmärken med variabel längd eller att hämta raduppsättningar vid en annan offset än 0 från ett bokmärke. För mer information, se argumentet FetchOffset.

  • SQLExtendedFetch och SQLFetchScroll använder olika raduppsättningsstorlekar. SQLExtendedFetch använder värdet av attributet SQL_ROWSET_SIZE statement, och SQLFetchScroll använder värdet av attributet SQL_ATTR_ROW_ARRAY_SIZE statement.

  • SQLExtendedFetch har något annorlunda felhanteringssemantik än SQLFetchScroll. För mer information, se "Felhantering" i avsnittet "Kommentarer" i SQLFetchScroll.

  • SQLExtendedFetch stöder inte bindningsoffsets (attributet SQL_ATTR_ROW_BIND_OFFSET_PTR statement).

  • Anrop till SQLExtendedFetch kan inte blandas med anrop till SQLFetch eller SQLFetchScroll, och om SQLBulkOperations anropas innan någon fetch-funktion anropas, kan SQLExtendedFetch inte anropas förrän markören stängs och öppnas igen. Det vill säga, SQLExtendedFetch kan endast anropas i satstillstånd S7. För mer information, se Statement Transitions i Appendix B: ODBC State Transition Tables.

När en applikation anropar SQLFetchScroll medan den använder en ODBC 2*.x*-drivrutin, mappar Driver Manager detta anrop till SQLExtendedFetch. För mer information, se "SQLFetchScroll och ODBC 2*.x* Drivrutiner" i SQLFetchScroll.

I ODBC 2*.x* anropades SQLExtendedFetch för att hämta flera rader och SQLFetch för att hämta en rad en. I ODBC 3*.x* kan SQLFetch däremot anropas för att hämta flera rader.

Mer information om Se
Binda en buffert till en kolumn i en resultatuppsättning SQLBindCol-funktion
Utför massinsättningar, uppdateringar eller borttagningsoperationer SQLBulkOperations-funktionen
Avbryta instruktionsbearbetning SQLCancel-funktion
Returnerar information om en kolumn i en resultatmängd SQLDescribeCol-funktionen
Exekvering av en SQL-sats SQLExecDirect-funktionen
Köra en förberedd SQL-instruktion SQLExecute-funktion
Returnerar antalet resultatuppsättningskolumner SQLNumResultCols-funktionen
Positionering av markören, uppdatering av data i raduppsättningen eller uppdatering eller borttagning av data i resultatuppsättningen SQLSetPos-funktionen
Ange ett instruktionsattribut SQLSetStmtAttr-funktion