Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ö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 SQLCancelHandle på StatementHandle, och sedan anropades funktionen igen på StatementHandle. Funktionen anropades och innan körningen slutfördes anropades SQLCancel eller SQLCancelHandle på StatementHandle 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.
Relaterade funktioner
| 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 |