Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
megfelelőségi
Bevezetett verzió: ODBC 1.0 szabványmegfelelőség: ODBC
Összefoglalás
Az SQLMoreResults meghatározza, hogy több találat érhető-e el a SELECT, UPDATE, INSERT vagy DELETE utasítást tartalmazó utasításon, és ha igen, inicializálja az eredmények feldolgozását.
Szemantika
SQLRETURN SQLMoreResults(
SQLHSTMT StatementHandle);
Érvek
StatementHandle
[Bemenet] Utasításkezelő.
Visszatérítések
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_NO_DATA, SQL_ERROR, SQL_INVALID_HANDLE vagy SQL_PARAM_DATA_AVAILABLE.
Diagnosztika
Amikor az SQLMoreResults SQL_ERROR vagy SQL_SUCCESS_WITH_INFO ad vissza, a társított SQLStatE-érték az SQLGetDiagRec meghívásával érhető el a SQL_HANDLE_STMT HandleType és a StatementHandleleírójával. Az alábbi táblázat az SQLMoreResults által gyakran visszaadott SQLSTATE-értékeket sorolja fel, és ismerteti azokat a függvény kontextusában; a(z) "(DM)" jelölés megelőzi a Driver Manager által visszaadott SQLSTATES-ek leírását. Az egyes SQLSTATE-értékekhez társított visszatérési kód SQL_ERROR, kivéve, ha másként van feltüntetve.
| SQLSTATE | Hiba | Leírás |
|---|---|---|
| 01000 | Általános figyelmeztetés | Illesztőprogram-specifikus tájékoztató üzenet. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.) |
| 01S02 | A beállítás értéke megváltozott | Az utasításattribútum értéke a köteg feldolgozásakor módosult. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.) |
| 08S01 | Kommunikációs kapcsolat hibája | Az illesztőprogram és az adatforrás közötti kommunikációs kapcsolat, amelyhez az illesztőprogram csatlakoztatva volt, nem sikerült, mielőtt a függvény befejeződött a feldolgozás. |
| 40001 | Szerializálási hiba | A tranzakció egy erőforrás holtpontja miatt lett visszaállítva egy másik tranzakcióval. |
| 40003 | Az utasítás befejezése ismeretlen | A társított kapcsolat a függvény végrehajtása során meghiúsult, és a tranzakció állapota nem határozható meg. |
| HY000 | Általános hiba | Hiba történt, amely miatt nem volt konkrét SQLSTATE, és amelyhez nem definiáltak implementációspecifikus SQLSTATE-t. Az SQLGetDiagRec által a *MessageText pufferben visszaadott hibaüzenet leírja a hibát és annak okát. |
| HY001 | Memóriafoglalási hiba | Az illesztőprogram nem tudta lefoglalni a függvény végrehajtásának vagy befejezésének támogatásához szükséges memóriát. |
| HY008 | Művelet megszakítva | Az aszinkron feldolgozás engedélyezve lett a StatementHandle. Meghívták az SQLMoreResults függvényt, és a végrehajtás befejezése előtt az SQLCancel vagy az SQLCancelHandle meghívása megtörtént az Utasításkezelőben. Ezután ismét meghívta az SQLMoreResults függvényt az Utasításkezelőben. Meghívták az SQLMoreResults függvényt, és a végrehajtás befejezése előtt az SQLCancel vagy az SQLCancelHandle meghívást kapott az Utasításkezelőre egy másik szálról egy többszálas alkalmazásban. |
| HY010 | Függvényütemezési hiba | (DM) A rendszer aszinkron módon végrehajtó függvényt hívott meg a StatementHandletársított kapcsolati leíróhoz. Ez az aszinkron függvény továbbra is az SQLMoreResults függvény meghívásakor lett végrehajtva. (DM) A StatementHandle aszinkron módon végrehajtó függvény (nem ez) lett meghívva, és a függvény meghívásakor továbbra is végrehajtó volt. (DM) SQLExecute, SQLExecDirect, SQLBulkOperationsvagy SQLSetPos meghívást kapott az StatementHandle, és visszaadta SQL_NEED_DATA. Ezt a függvényt az összes adatvégrehajtási paraméter vagy oszlop adatküldése előtt hívták meg. |
| HY013 | Memóriakezelési hiba | A függvényhívás nem dolgozható fel, mert a mögöttes memóriaobjektumok nem érhetők el, esetleg a memóriahiány miatt. |
| HY117 | A kapcsolat ismeretlen tranzakciós állapot miatt fel van függesztve. Csak a leválasztási és írásvédett függvények engedélyezettek. | (DM) További információ a felfüggesztett állapotról: SQLEndTran függvény. |
| HYT01 | A kapcsolat időtúllépés miatt megszakadt | A kapcsolat időtúllépési időtartama lejárt, mielőtt az adatforrás válaszolt a kérésre. A kapcsolat időtúllépési időszaka SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | Az illesztőprogram nem támogatja ezt a függvényt | (DM) A StatementHandle illesztőprogramja nem támogatja a függvényt. |
| IM017 | A lekérdezés aszinkron értesítési módban le van tiltva | Az értesítési modell használata esetén a lekérdezés le van tiltva. |
| IM018 | SQLCompleteAsync nem lett meghívva az előző aszinkron művelet végrehajtásához ezen a leírón. | Ha a leíró előző függvényhívása SQL_STILL_EXECUTING ad vissza, és ha az értesítési mód engedélyezve van, SQLCompleteAsync kell meghívni a leíróra a művelet utófeldolgozásához és befejezéséhez. |
Megjegyzések
A SELECT utasítás eredményhalmazokat ad vissza. Az UPDATE, INSERT és DELETE utasítás az érintett sorok számát adja vissza. Ha ezen utasítások bármelyike kötegelve van, paramétertömbökkel (számozott paramétersorrendben, a kötegben megjelenő sorrendben), vagy eljárásokban, több eredményhalmazt vagy sorszámot is visszaadhatnak. Az utasításkötegekről és a paraméterek tömbjeiről további információt az SQL-utasítások kötegei és a paraméterértékek tömbjei című témakörben talál.
A köteg végrehajtása után az alkalmazás az első eredménykészleten lesz elhelyezve. Az alkalmazás meghívhatja az SQLBindCol, az SQLBulkOperations, az SQLFetch, az SQLGetData, az SQLFetchScroll, az SQLSetPos és az összes metaadatfüggvényt az első vagy bármely későbbi eredményhalmazon, ugyanúgy, mintha csak egyetlen eredményhalmaz lenne. Miután elkészült az első eredménykészlettel, az alkalmazás meghívja az SQLMoreResultst , hogy lépjen a következő eredménykészletre. Ha egy másik eredményhalmaz vagy -szám is elérhető, az SQLMoreResults SQL_SUCCESS ad vissza, és inicializálja az eredményhalmazt vagy a darabszámot további feldolgozás céljából. Ha bármilyen sorszám-generáló utasítás megjelenik az eredményhalmaz-generáló utasítások között, az SQLMoreResults meghívásával léptethetők át. Miután meghívta az SQLMoreResults for UPDATE, INSERT vagy DELETE utasítást, az alkalmazás meghívhatja az SQLRowCountot.
Ha egy jelenlegi eredményhalmaz nem rögzített sorokkal rendelkezik, az SQLMoreResults elveti ezt az eredményhalmazt, és elérhetővé teszi a következő eredményhalmazt vagy -számot. Ha az összes eredményt feldolgozták, az SQLMoreResults SQL_NO_DATA ad vissza. Egyes illesztőprogramok esetében a kimeneti paraméterek és a visszatérési értékek mindaddig nem érhetők el, amíg az összes eredményhalmazt és sorszámot fel nem dolgozták. Az ilyen illesztőprogramok esetében a kimeneti paraméterek és a visszatérési értékek akkor válnak elérhetővé, amikor az SQLMoreResults SQL_NO_DATA ad vissza.
Az előző eredményhalmazhoz létrehozott kötések továbbra is érvényesek maradnak. Ha az oszlopstruktúrák eltérnek az eredményhalmaztól, akkor az SQLFetch vagy az SQLFetchScroll meghívása hibát vagy csonkolást eredményezhet. Ennek megakadályozása érdekében az alkalmazásnak meg kell hívnia az SQLBindColt , hogy szükség szerint explicit módon újrakonfigurálja azokat (vagy ezt a leíró mezők beállításával teheti meg). Másik lehetőségként az alkalmazás meghívhatja az SQLFreeStmt-et egy SQL_UNBIND lehetőséggel az összes oszloppuffer kötésének feloldásához.
Az utasításattribútumok értékei, például a kurzor típusa, a kurzor egyidejűsége, a billentyűkészlet mérete vagy maximális hossza megváltozhat, amikor az alkalmazás az SQLMoreResults hívásával navigál a kötegen. Ha ez történik, az SQLMoreResults SQL_SUCCESS_WITH_INFO és SQLSTATE 01S02 értéket ad vissza (a beállítás értéke megváltozott).
Az SQLCloseCursor vagy az SQLFreeStmt meghívása a SQL_CLOSE lehetőséggel elveti a köteg végrehajtása során rendelkezésre álló összes eredményhalmazt és sorszámot. Az utasításkezelő a lefoglalt vagy előkészített állapotba tér vissza. Az SQLCancel meghívása az aszinkron módon végrehajtó függvény megszakítására egy köteg végrehajtásakor, és az utasításkezelő a végrehajtott, kurzorhoz igazított vagy aszinkron állapotban van, és az elvetett köteg által generált összes eredményhalmazt és sorszámot eredményezi, ha a visszavonási hívás sikeres volt. Az utasítás ezután visszatér az előkészített vagy lefoglalt állapotba.
Ha egy utasításköteg vagy eljárás más SQL-utasításokat kever a SELECT, UPDATE, INSERT és DELETE utasításokkal, ezek az utasítások nem befolyásolják az SQLMoreResultst.
További információ: Több találat.
Ha egy utasításkötegben lévő keresésre, beszúrásra vagy törlésre vonatkozó utasítás nem érinti az adatforrás egyik sorát sem, az SQLMoreResults SQL_SUCCESS ad vissza. Ez eltér az SQLExecDirect, az SQLExecute vagy az SQLParamData használatával végrehajtott keresési frissítési, beszúrási vagy törlési utasítás esetétől, amely SQL_NO_DATA ad vissza, ha az nem befolyásolja az adatforrás egyik sorát sem. Ha egy alkalmazás meghívja az SQLRowCount-t a sorszám lekérésére, miután az SQLMoreResults hívása nem érintett egyetlen sort sem, az SQLRowCount visszaadja SQL_NO_DATA.
Az eredményfeldolgozási függvények érvényes szekvenálásával kapcsolatos további információkért lásd a B függeléket: ODBC-állapotáttraszttáblák.
A SQL_PARAM_DATA_AVAILABLE és a streamelt kimeneti paraméterekkel kapcsolatos további információkért lásd: Kimeneti paraméterek lekérése AZ SQLGetData használatával.
A sorok száma rendelkezésre állása
Ha egy köteg több egymást követő sorszám-generáló utasítást tartalmaz, lehetséges, hogy ezek a sorok száma csak egy sorszámba kerül. Ha például egy köteg öt beszúrási utasítással rendelkezik, akkor bizonyos adatforrások öt különálló sorszámot képesek visszaadni. Egyes más adatforrások csak egy sorszámot ad vissza, amely az öt egyes sorszám összegét jelöli.
Ha egy köteg eredményhalmaz-generáló és sorszám-generáló utasítások kombinációját tartalmazza, előfordulhat, hogy a sorok száma egyáltalán nem érhető el. Az illesztő viselkedése a sorok számának rendelkezésre állása tekintetében az SQLGetInfo hívásával elérhető SQL_BATCH_ROW_COUNT információtípusban van számba véve. Tegyük fel például, hogy a köteg tartalmaz egy SELECT,majd két INSERT utasítást és egy másik SELECT utasítást. Ezután a következő esetek lehetségesek:
A két INSERT utasításnak megfelelő sorok száma egyáltalán nem érhető el. Az SQLMoreResults első hívása a második SELECT utasítás eredményhalmazára helyezi.
A két INSERT utasításnak megfelelő sorok száma egyenként érhető el. (Az SQLGetInfo hívása nem adja vissza a SQL_BATCH_ROW_COUNT adattípushoz tartozó SQL_BRC_ROLLED_UP bitet.) Az SQLMoreResults első hívása az első INSERT sorszámára helyezi, a második hívás pedig a második INSERT sorszámára helyezi. Az SQLMoreResults harmadik hívása a második SELECT utasítás eredményhalmazára helyezi.
A két INSERT-nek megfelelő sorszám egyetlen elérhető sorszámba kerül. (Az SQLGetInfo hívása a SQL_BATCH_ROW_COUNT adattípushoz tartozó SQL_BRC_ROLLED_UP bitet adja vissza.) Az SQLMoreResults első hívása az összesített sorszámra helyezi, az SQLMoreResults második hívása pedig a második SELECT eredményhalmazára helyezi.
Egyes illesztőprogramok csak explicit kötegekhez teszik elérhetővé a sorszámokat, a tárolt eljárásokhoz nem.
Kapcsolódó függvények
| Információ erről: | Nézze |
|---|---|
| Utasításfeldolgozás megszakítása | SQLCancel-függvény |
| Adatblokk beolvasása vagy egy eredményhalmaz görgetése | SQLFetchScroll függvény |
| Egyetlen sor vagy adatblokk beolvasása csak továbbítási irányban | SQLFetch-függvény |
| Adatoszlop egy részének vagy egészének beolvasása | SQLGetData függvény |
Lásd még:
ODBC API-referencia
ODBC-fejlécfájlok
Kimeneti paraméterek lekérése SQLGetData használatával