Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uygunluk
Tanıtılan Sürüm: ODBC 3.0 Standartlarına Uyum: ISO 92
Summary
SQLFetchScroll , belirlenen satır veri kümesini sonuç kümesinden alır ve tüm bağlı sütunlar için veri döndürür. Sıra kümeleri mutlak veya göreceli konumda veya yer imiyle belirtilebilir.
ODBC 2.x sürücüsüyle çalışırken, Driver Manager bu fonksiyonu SQLExtendedFetch ile eşler. Daha fazla bilgi için, Uygulamaların Geriye Doğru Uyumluluğu için Eşleme Değiştirme Fonksiyonları bölümüne bakınız.
Syntax
SQLRETURN SQLFetchScroll(
SQLHSTMT StatementHandle,
SQLSMALLINT FetchOrientation,
SQLLEN FetchOffset);
Arguments
StatementHandle
[Giriş] Deyim tanıtıcısı.
FetchOrientation
[Giriş]
Getirme türü:
SQL_FETCH_NEXT
SQL_FETCH_PRIOR
SQL_FETCH_FIRST
SQL_FETCH_LAST
SQL_FETCH_ABSOLUTE
SQL_FETCH_RELATIVE
SQL_FETCH_BOOKMARK
Daha fazla bilgi için "Yorumlar" bölümünde "İmleci Konumlandırma" bölümüne bakınız.
FetchOffset
[Giriş]
Getirilecek sıranın sayısı. Bu argümanın yorumu, FetchOrientation argümanının değerine bağlıdır. Daha fazla bilgi için "Yorumlar" bölümünde "İmleci Konumlandırma" bölümüne bakınız.
İadeler
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_STILL_EXECUTING, SQL_ERROR veya SQL_INVALID_HANDLE.
Diagnostics
SQLFetchScroll SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, ilişkili bir SQLSTATE değeri alınabilir; bu değer SQLGetDiagRec ile SQL_HANDLE_STMT HandleType ve StatementHandle ile çağrılabilir. Aşağıdaki tablo, SQLFetchScroll tarafından sıkça duygulanan SQLSTATE değerlerini listeler ve her birini bu fonksiyonun bağlamında açıklar; "(DM)" gösterimi, Sürücü Yöneticisi tarafından döndürülen SQLSTATE açıklamalarından önce gelir. Aksi belirtilmediği sürece, her SQLSTATE değeriyle ilişkili dönüş kodu SQL_ERROR. Tek bir sütunda hata oluşursa, SQLGetDiagField SQL_DIAG_COLUMN_NUMBER DiagIdentifier ile çağrılıp hatanın hangi sütunda gerçekleştiğini belirleyebilir; ve SQLGetDiagField , SQL_DIAG_ROW_NUMBER DiagIdentifier ile çağrılarak o sütunu içeren satırı belirlemek için çağrılabilir.
SQL_SUCCESS_WITH_INFO veya SQL_ERROR döndürebilen tüm SQLSTATE'ler için (01xxx SQLSTATE hariç), SQL_SUCCESS_WITH_INFO bir veya daha fazla, ancak tüm satırlarda değil satırlarda hata oluşursa döner; tek satırlı bir işlemde hata oluşursa SQL_ERROR döner.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Genel uyarı | Sürücüye özgü bilgilendirici ileti. (İşlev SQL_SUCCESS_WITH_INFO döndürür.) |
| 01004 | Dize verileri, sağ kesilmiş | Bir sütun için dize veya ikili veri dönerken, boş karakter olmayan veya NULL olmayan ikili verilerin kısaltılmasına yol açardı. Bir dize değeriyse, sağ kesilmiştir. |
| 01S01 | Sırada hata | Bir veya daha fazla satır getirilirken hata meydana geldi. (Eğer bu SQLSTATE, bir ODBC 3*.x* uygulaması ODBC 2*.x* sürücüsüyle çalışırken dönerse, göz ardı edilebilir.) |
| 01S06 | Sonuç seti dönerken, ilk satır setini geri getirdiğinde getirmeye çalışın | İstenen satır kümesi, FetchOrientation SQL_FETCH_PRIOR olduğunda, mevcut konum ilk satırın ötesindeyken ve mevcut satırın sayısı satır kümesi büyüklüğünden az veya eşit olduğunda sonuç kümesinin başlangıcıyla örtüşüyordu. İstenen satır kümesi, FetchOrientation SQL_FETCH_PRIOR olduğunda, mevcut konum sonuç setinin sonunun ötesinde ve satır kümesi boyutu sonuç kümesi boyutundan büyük olduğunda sonuç setinin başlangıcıyla örtüşüyordu. İstenen satır kümesi, FetchOrientation SQL_FETCH_RELATIVE, FetchOffset negatif ve FetchOffset'in mutlak değeri satır kümesi büyüklüğünden küçük veya eşit olduğunda sonuç kümesinin başlangıcıyla örtüşüyordu. İstenen satır kümesi, FetchOrientation SQL_FETCH_ABSOLUTE, FetchOffset negatif ve FetchOffset'in mutlak değeri sonuç kümesi boyutundan büyük ancak satır kümesi büyüklüğünden küçük veya eşit olduğunda sonuç kümesinin başlangıcıyla örtüşüyordu. (İşlev SQL_SUCCESS_WITH_INFO döndürür.) |
| 01S07 | Kesirli kesme | Bir sütun için verilen veriler kısaltılmıştı. Sayısal veri tipleri için, sayının kesirlik kısmı kısaltılmıştır. Zaman bileşeni içeren zaman, zaman damgası ve aralık veri türleri için, zamanın kesirlik kısmı kısaltılmıştır. (İşlev SQL_SUCCESS_WITH_INFO döndürür.) |
| 07006 | Kısıtlanmış veri türü özniteliği ihlali | Sonuç kümesindeki bir sütunun veri değeri, SQLBindCol'daTargetType tarafından belirtilen veri türüne dönüştürülemezdi. Sütun 0, SQL_C_BOOKMARK veri tipiyle sınırlıydı ve SQL_ATTR_USE_BOOKMARKS ifadesi özniteliği SQL_UB_VARIABLE olarak ayarlandı. Sütun 0, SQL_C_VARBOOKMARK veri tipiyle sınırlıydı ve SQL_ATTR_USE_BOOKMARKS ifadesi özniteliği SQL_UB_VARIABLE olarak ayarlanmamıştı. |
| 07009 | Geçersiz tanımlayıcı indeksi | Sürücü, SQLExtendedFetch'i desteklemeyen bir ODBC 2*.x* sürücüydü ve bir sütun için bağlanmada belirtilen sütun numarası 0 idi. 0. sütun bağlıydı ve SQL_ATTR_USE_BOOKMARKS ifadesi özetliği SQL_UB_OFF olarak ayarlandı. |
| 08S01 | İletişim bağlantısı hatası | sürücü ile sürücünün bağlandığı veri kaynağı arasındaki iletişim bağlantısı, işlev işlenmeden önce başarısız oldu. |
| 22001 | Dize verileri, sağ kesilmiş | Bir sütun için geri dönen değişken uzunlukta bir yer ayracı kısaltıldı. |
| 22002 | Gösterge değişkeni gerekli ancak sağlanmadı | NULL verisi, SQLBindCol tarafından belirlenen StrLen_or_IndPtr (veya SQLSetDescField veya SQLSetDescRec tarafından belirlenen) bir sütuna alınırdı; SQL_DESC_INDICATOR_PTR bir null işaretçiydi. |
| 22003 | Sayısal değer aralık dışında | Bir veya daha fazla bağlı sütun için sayısal değeri (sayısal veya dizi olarak) döndürmek, sayının (kesirli değil) kısmının tamamen kesilmesine neden olurdu. Daha fazla bilgi için, Ek D'dekiVeri Türleri (Veri Türleri) bölümünde SQL'den C Veri Tiplerine Dönüştürme bölümünü inceleyebilirsiniz. |
| 22007 | Geçersiz tarih saat biçimi | Sonuç kümesindeki bir karakter sütunu tarih, saat veya zaman damgası C yapısına bağlıdır ve sütundaki bir değer sırasıyla geçersiz bir tarih, saat veya zaman damgasıdır. |
| 22012 | Sıfıra bölme | Aritmetik ifadeden bir değer döndürülür ve bu da sıfıra bölünmeye yol açar. |
| 22015 | Aralık alanı taşması | Kesin sayısal veya aralıklı SQL tipinden C aralığına atanmak, öndeki alanda önemli rakamların kaybına yol açardı. Veri C aralığına getirilirken, C aralığında SQL tipinin değeri temsil edilmezdi. |
| 22018 | Atama belirtimi için geçersiz karakter değeri | Sonuç kümesindeki bir karakter sütunu, bir C karakter tamponuna bağlanmıştı ve bu sütun, tamponun karakter kümesinde temsil edilmediği bir karakter içeriyordu. C tipi, tam veya yaklaşık bir sayısal, tarih saati veya aralık veri tipiydi; sütunun SQL tipi bir karakter veri tipiydi; ve sütundaki değer, bağlı C tipinin geçerli bir literali değildi. |
| 24000 | Geçersiz imleç durumu | StatementHandle yürütülmüş durumdaydı ancak StatementHandle ile ilişkilendirilmiş bir sonuç kümesi yoktu. |
| 40001 | Serileştirme hatası | Getirmenin gerçekleştirildiği işlem, çıkmazlığı önlemek için sonlandırıldı. |
| 40003 | Deyim tamamlama bilinmiyor | İlişkili bağlantı bu işlevin yürütülmesi sırasında başarısız oldu ve işlemin durumu belirlenemiyor. |
| HY000 | Genel hata | Belirli bir SQLSTATE olmayan ve uygulamaya özgü SQLSTATE tanımlanmayan bir hata oluştu. *MessageText arabelleğinde SQLGetDiagRec tarafından döndürülen hata iletisi, hatayı ve nedenini açıklar. |
| HY001 | Bellek ayırma hatası | Sürücü, işlevin yürütülmesini veya tamamlanmasını desteklemek için gereken belleği ayıramadı. |
| HY008 | İşlem iptal edildi |
StatementHandle için zaman uyumsuz işleme etkinleştirildi. İşlev çağrıldı ve yürütme tamamlanmadan önce StatementHandle üzerinde SQLCancel veya SQLCancelHandle çağrıldı. Ardından işlev StatementHandle üzerinde yeniden çağrıldı. İşlev çağrıldı ve yürütme tamamlanmadan önce, çok iş parçacıklı bir uygulamadaki farklı bir iş parçacığından StatementHandle üzerinde SQLCancel veya SQLCancelHandle çağrıldı. |
| HY010 | İşlev dizisi hatası | (DM) StatementHandle ile ilişkili bağlantı tanıtıcısı için zaman uyumsuz olarak yürütülen bir işlev çağrıldı. Bu asenkron fonksiyon SQLFetchScroll fonksiyonu çağrıldığında hâlâ çalışıyordu. (DM) SQLExecute, SQLExecDirect veya SQLMoreResults, StatementHandle için çağrıldı ve SQL_PARAM_DATA_AVAILABLE döndürdü. Bu işlev, tüm akış parametreleri için veri alınmadan önce çağrıldı. (DM) Belirtilen StatementHandle yürütülmüş durumda değildi. Fonksiyon, önce SQLExecDirect, SQLExecute veya bir katalog fonksiyonu çağrılmadan çağrılmıştır. (DM) StatementHandle için zaman uyumsuz olarak yürütülen bir işlev (bu işlev değil) çağrıldı ve bu işlev çağrıldığında hala yürütülüyordu. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations veya SQLSetPos, StatementHandle için çağrıldı ve SQL_NEED_DATA döndürdü. Bu işlev, tüm yürütme sırasında veri parametreleri veya sütunları için veri gönderilmeden önce çağrıldı. (DM) SQLFetch, SQLExtendedFetch çağrıldıktan sonra StatementHandle için ve SQLFreeStmt ile SQL_CLOSE seçeneği çağrılmadan önce çağrıldı. |
| HY013 | Bellek yönetimi hatası | Büyük olasılıkla düşük bellek koşulları nedeniyle, temel alınan bellek nesnelerine erişilemediğinden işlev çağrısı işlenemedi. |
| HY090 | Geçersiz dize veya arabellek uzunluğu | SQL_ATTR_USE_BOOKMARK ifadesi özniteliği SQL_UB_VARIABLE olarak ayarlanmıştı ve 0 sütunu, bu sonuç kümesi için yer iminin maksimum uzunluğuna eşit olmayan bir tampona bağlandı. (Bu uzunluk IRD'nin SQL_DESC_OCTET_LENGTH alanında mevcuttur ve SQLDescribeCol, SQLColAttribute veya SQLGetDescField çağrılarak elde edilebilir.) |
| HY106 | Menzil dışı tıp getir | DM) FetchOrientation argümanı için belirtilen değer geçersizdi. (DM) FetchOrientation argümanı SQL_FETCH_BOOKMARK ve SQL_ATTR_USE_BOOKMARKS ifadesi özelliği SQL_UB_OFF olarak ayarlandı. SQL_ATTR_CURSOR_TYPE ifadesi özniteliğinin değeri SQL_CURSOR_FORWARD_ONLY ve argüman FetchOrientation değeri SQL_FETCH_NEXT değildi. SQL_ATTR_CURSOR_SCROLLABLE ifadesi özniteliğinin değeri SQL_NONSCROLLABLE ve argüman FetchOrientation değeri SQL_FETCH_NEXT değildi. |
| HY107 | Satır değeri aralık dışı | SQL_ATTR_CURSOR_TYPE ifadesi özniteliğiyle belirtilen değer SQL_CURSOR_KEYSET_DRIVEN idi, ancak SQL_ATTR_KEYSET_SIZE ifadesi özniteliğiyle belirtilen değer 0'dan büyük ve SQL_ATTR_ROW_ARRAY_SIZE ibeleme özniteliğinde belirtilen değerden küçüktü. |
| HY111 | Geçersiz yer imimi değeri | FetchOrientation argümanı SQL_FETCH_BOOKMARK ve SQL_ATTR_FETCH_BOOKMARK_PTR ifadesi özniteliğindeki değerle işaret edilen yer adı, geçerli değildi veya null pointer'dı. |
| HY117 | Bilinmeyen işlem durumu nedeniyle bağlantı askıya alındı. Yalnızca bağlantıyı kesme ve salt okunur işlevlere izin verilir. | (DM) Askıya alınma durumu hakkında daha fazla bilgi için bkz. SQLEndTran İşlevi. |
| HYC00 | İsteğe bağlı özellik uygulanmadı | Sürücü veya veri kaynağı, SQLBindCol'dakiTargetType ile ilgili sütunun SQL veri tipinin birleşimiyle belirlenen dönüşümü desteklemez. |
| HYT00 | Zaman aşımı süresi doldu | Veri kaynağı istenen sonuç kümesini döndürmeden önce sorgu zaman aşımı süresi doldu. Zaman aşımına ulaşma süresi SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT üzerinden belirlenir. |
| HYT01 | Bağlantı zaman aşımı süresi doldu | Veri kaynağı isteği yanıtlamadan önce bağlantı zaman aşımı süresi doldu. Bağlantı zaman aşımı süresi SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT aracılığıyla ayarlanır. |
| IM001 | Sürücü bu işlevi desteklemiyor | (DM) StatementHandle ile ilişkili sürücü işlevi desteklemiyor. |
| IM017 | Yoklama zaman uyumsuz bildirim modunda devre dışı bırakıldı | Bildirim modeli her kullanıldığında yoklama devre dışı bırakılır. |
| IM018 | SQLCompleteAsync , bu tanıtıcıda önceki zaman uyumsuz işlemi tamamlamak için çağrılmadı. | Tanıtıcıdaki önceki işlev çağrısı SQL_STILL_EXECUTING döndürüyorsa ve bildirim modu etkinleştirildiyse, son işlemeyi yapmak ve işlemi tamamlamak için tanıtıcıda SQLCompleteAsync çağrılmalıdır. |
Comments
SQLFetchScroll , sonuç kümesinden belirtilen bir satır kümesini döndürür. Sıra kümeleri mutlak veya göreceli konumla veya yer imiyle belirtilebilir. SQLFetchScroll yalnızca bir sonuç kümesi varken çağrılanabilir - yani, bir sonuç kümesi oluşturan bir çağrıdan sonra ve o sonuç kümesi üzerindeki imleç kapanmadan önce. Herhangi bir sütun sınırlıysa, o sütunlardaki verileri döndürür. Uygulama, bir satır durum dizisine işaret veya getirilen satır sayısını döndürmek için bir tampon belirttiyse, SQLFetchScroll bu bilgiyi de döndürür. SQLFetchScroll çağrıları SQLFetch çağrılarıyla karıştırılabilir ancak SQLExtendedFetch çağrılarıyla karıştırılamaz.
Daha fazla bilgi için bkz. Blok İmlecini Kullanmak ve Kaydırılabilir İmleçleri Kullanmak bölümleri.
İmleci Konumlandırma
Sonuç kümesi oluşturulduğunda, imleç sonuç setinin başlangıcının önüne yerleştirilir. SQLFetchScroll , blok imlecini aşağıdaki tabloda gösterildiği gibi FetchOrientation ve FetchOffset argümanlarının değerlerine göre konumlandırır. Yeni satır setinin başlangıcını belirleme kuralları bir sonraki bölümde gösterilmiştir.
| FetchOrientation | Meaning |
|---|---|
| SQL_FETCH_NEXT | Bir sonraki sıra setini geri ver. Bu, SQLFetch çağırmakla eşdeğerdir. SQLFetchScroll , FetchOffset değerini görmezden gelir. |
| SQL_FETCH_PRIOR | Önceki sıra setini geri getir. SQLFetchScroll , FetchOffset değerini görmezden gelir. |
| SQL_FETCH_RELATIVE | Mevcut satır kümesinin başından FetchOffset satırını geri döndür. |
| SQL_FETCH_ABSOLUTE | FetchOffset satırından başlayan sıra setini geri döndür. |
| SQL_FETCH_FIRST | Sonuç kümesinde ilk satır setini geri getirin. SQLFetchScroll , FetchOffset değerini görmezden gelir. |
| SQL_FETCH_LAST | Sonuç kümesinde son tam satır setini döndür. SQLFetchScroll , FetchOffset değerini görmezden gelir. |
| SQL_FETCH_BOOKMARK | SQL_ATTR_FETCH_BOOKMARK_PTR ifadesi özniteliğinde belirtilen yer imiminden FetchOffset satır satırlarını geri getirin. |
Sürücülerin tüm getirme yönelimlerini desteklemesi zorunlu değildir; bir uygulama, sürücünün hangi getirme yönlerinin desteklendiğini belirlemek için SQL_DYNAMIC_CURSOR_ATTRIBUTES1, SQL_KEYSET_CURSOR_ATTRIBUTES1 veya SQL_STATIC_CURSOR_ATTRIBUTES1 bilgi tipiyle SQLGetInfo'yu çağırır. Uygulama, bu bilgi tiplerindeki SQL_CA1_NEXT, SQL_CA1_RELATIVE, SQL_CA1_ABSOLUTE ve WQL_CA1_BOOKMARK bitmasklerine bakmalıdır. Ayrıca, imleç sadece ileri yöndeyse ve FetchOrientation SQL_FETCH_NEXT değilse, SQLFetchScroll SQLSTATE HY106 (Fetch type out of range) döndürür.
SQL_ATTR_ROW_ARRAY_SIZE ifadesi özözniteliği, satır kümesindeki satır sayısını belirtir. SQLFetchScroll tarafından alınan satır kümesi sonuç kümesinin sonuyla örtüşüyorsa, SQLFetchScroll kısmi bir satır kümesi döndürür. Yani, S + R - 1, L'den büyükse, S getirilen satır kümesinin başlangıç satırı, R satır kümesi boyutu ve L sonuç kümesinin son satırı, o zaman sadece ilk L - S + 1 satırı geçerlidir. Kalan sıralar boş ve SQL_ROW_NOROW statüsüne sahiptir.
SQLFetchScroll dönerken, mevcut satır satırın ilk satırıdır.
İmleç Konumlandırma Kuralları
Aşağıdaki bölümler, FetchOrientation'ın her değeri için tam kuralları açıklar. Bu kurallar aşağıdaki gösterimi kullanır.
| Notation | Meaning |
|---|---|
| Başlamadan önce | Blok imleci, sonuç setinin başlangıcından önce konumlandırılır. Yeni satır kümesinin ilk satırı sonuç kümesinin başlangıcından önceyse, SQLFetchScroll SQL_NO_DATA döndürür. |
| Sondan sonra | Blok imleci sonuç setinin sonunda konumlandırılır. Yeni satır setinin ilk satırı sonuç kümesinin sonundan sonraysa, SQLFetchScroll SQL_NO_DATA döndürür. |
| CurrRowsetBaşlat | Mevcut sıra setindeki ilk satırın numarası. |
| LastResultRow | Sonuç setindeki son sıranın numarası. |
| RowsetSize | Sıra seti boyutu. |
| FetchOffset | FetchOffset argümanının değeri. |
| BookmarkRow | SQL_ATTR_FETCH_BOOKMARK_PTR ifadesi özelliğiyle belirtilen yer imeğine karşılık gelen satır. |
SQL_FETCH_NEXT
Aşağıdaki kurallar geçerlidir.
| Koşul | Yeni sıra setinin ilk sırası |
|---|---|
| Başlamadan önce | 1 |
| CurrRowsetStart + RowsetSize[1] <= LastResultRow | CurrRowsetStart + RowsetSize[1] |
| CurrRowsetStart + RowsetSize[1]> LastResultRow | Sondan sonra |
| Sondan sonra | Sondan sonra |
[1] Eğer önceki satır getirme çağrısından sonra satır kümesi boyutu değiştirilmişse, bu, önceki çağrıda kullanılan satır kümesi büyüklüğüdür.
SQL_FETCH_PRIOR
Aşağıdaki kurallar geçerlidir.
| Koşul | Yeni sıra setinin ilk sırası |
|---|---|
| Başlamadan önce | Başlamadan önce |
| CurrRowsetStart = 1 | Başlamadan önce |
| 1 < CurrRowsetStart <= RowsetSize[2] | 1[1] |
| CurrRowsetBaşlat > RowsetSize[2] | CurrRowsetStart - RowsetSize[2] |
| Ve SonSonuçSıra'dan < sonra RowsetSize[2] | 1[1] |
| Son VE LastResultRow >= RowsetSize[2] sonrası | LastResultRow - RowsetSize + 1[2] |
[1] SQLFetchScroll SQLSTATE 01S06 (Sonuç kümesi ilk satır kümesini getirmeden önce getirme girişimi) ve SQL_SUCCESS_WITH_INFO döndürür.
[2] Eğer satır kümesi boyutu, önceki satır getirme çağrısından bu yana değiştirilmişse, bu yeni satır kümesi boyutudur.
SQL_FETCH_RELATIVE
Aşağıdaki kurallar geçerlidir.
| Koşul | Yeni sıra setinin ilk sırası |
|---|---|
| (Başlamadan VE FetchOffset > 0'dan Önce) VEYA (Son VE FetchOffset < 0'dan sonra) | -- [1] |
| BeforeStart VE FetchOffset <= 0 | Başlamadan önce |
| CurrRowsetStart = 1 VE FetchOffset < 0 | Başlamadan önce |
| CurrRowsetStart > 1 VE CurrRowsetStart + FetchOffset < 1 VE | FetchOffset | > RowsetSize[3] | Başlamadan önce |
| CurrRowsetStart > 1 VE CurrRowsetStart + FetchOffset < 1 VE | FetchOffset | <= RowsetSize[3] | 1[2] |
| 1 <= CurrRowsetStart + FetchOffset <= LastResultRow | CurrRowsetStart + FetchOffset |
| CurrRowsetStart + FetchOffset > LastResultRow | Sondan sonra |
| Sonunda VE FetchOffset >= 0 | Sondan sonra |
[1] SQLFetchScroll , FetchOrientation SQL_FETCH_ABSOLUTE olarak ayarlanmış gibi aynı satır kümesini döndürür. Daha fazla bilgi için "SQL_FETCH_ABSOLUTE" bölümüne bakınız.
[2] SQLFetchScroll , SQLSTATE 01S06 (Sonuç kümesi ilk satır kümesini döndürmeden önce getirmeye çalışma) ve SQL_SUCCESS_WITH_INFO döndürür.
[3] Eğer önceki satır getirme çağrısından bu yana satır kümesi boyutu değiştirilmişse, bu yeni sıralar kümesi boyutudur.
SQL_FETCH_ABSOLUTE
Aşağıdaki kurallar geçerlidir.
| Koşul | Yeni sıra setinin ilk sırası |
|---|---|
| FetchOffset < 0 VE | FetchOffset | <= SonunSonuçSıra | LastResultRow + FetchOffset + 1 |
| FetchOffset < 0 VE | FetchOffset | > LastResultRow VE | FetchOffset | > RowsetSize[2] | Başlamadan önce |
| FetchOffset < 0 VE | FetchOffset | > LastResultRow VE | FetchOffset | <= RowsetSize[2] | 1[1] |
| FetchOffset = 0 | Başlamadan önce |
| 1 <= FetchOffset <= LastResultRow | FetchOffset |
| FetchOffset > LastResultRow | Sondan sonra |
[1] SQLFetchScroll SQLSTATE 01S06 (Sonuç kümesi ilk satır kümesini getirmeden önce getirme girişimi) ve SQL_SUCCESS_WITH_INFO döndürür.
[2] Eğer satır kümesi boyutu, önceki satır getirme çağrısından bu yana değiştirilmişse, bu yeni satır kümesi boyutudur.
Dinamik bir imleçte yapılan mutlak bir getirme, dinamik bir imleçteki satır konumları belirlenmediği için gerekli sonucu veremez. Böyle bir işlem, önce fetch ve ardından fetch aklabasına eşdeğerdir; Bu, statik bir imleçte mutlak bir fetch gibi atomik bir işlem değildir.
SQL_FETCH_FIRST
Aşağıdaki kurallar geçerlidir.
| Koşul | Yeni sıra setinin ilk sırası |
|---|---|
| Herhangi biri | 1 |
SQL_FETCH_LAST
Aşağıdaki kurallar geçerlidir.
| Koşul | Yeni sıra setinin ilk sırası |
|---|---|
| RowsetSize[1]<= LastResultRow | LastResultRow - RowsetSize + 1[1] |
| RowsetSize[1]> LastResultRow | 1 |
[1] Eğer önceki satır seti çağrısından sonra satır kümesi boyutu değiştirilmişse, bu yeni satır kümesi boyutudur.
SQL_FETCH_BOOKMARK
Aşağıdaki kurallar geçerlidir.
| Koşul | Yeni sıra setinin ilk sırası |
|---|---|
| BookmarkRow + FetchOffset < 1 | Başlamadan önce |
| 1 <= BookmarkRow + FetchOffset <= LastResultRow | BookmarkRow + FetchOffset |
| BookmarkRow + FetchOffset > LastResultRow | Sondan sonra |
Yer imleri hakkında bilgi için Yer Imleri (ODBC) sayfasına bakınız.
Silinen, Eklenen ve Hata Satırlarının İmleç Hareketi üzerindeki Etkisi
Statik ve tuş seti tabanlı imleçler bazen sonuç kümesine eklenen satır noktaları algılar ve sonuç kümesinden silinen satırları kaldırır. SQLGetInfo'yu SQL_STATIC_CURSOR_ATTRIBUTES2 ve SQL_KEYSET_CURSOR_ATTRIBUTES2 seçenekleriyle çağırarak ve SQL_CA2_SENSITIVITY_ADDITIONS, SQL_CA2_SENSITIVITY_DELETIONS ve SQL_CA2_SENSITIVITY_UPDATES bitmasklerine bakarak, bir uygulama belirli bir sürücü tarafından uygulanan imleçlerin bunu yapıp yapmadığını belirler. Silinen satırları tespit edip kaldırabilen sürücüler için, aşağıdaki paragraflar bu davranışın etkilerini açıklar. Silinen satırları tespit edebilen ancak kaldıramayan sürücüler için, silme işlemleri imlecin hareketlerini etkilemez ve aşağıdaki paragraflar geçerli değildir.
İmleç sonuç kümesine eklenen satırları algılarsa veya sonuç kümesinden silinen satırları kaldırırsa, bu değişiklikleri yalnızca veri getirdiğinde algılıyormuş gibi görünür. Bu, SQLFetchScroll'un FetchOrientation SQL_FETCH_RELATIVE ve FetchOffset'in 0 olarak çağrıldığı durumu kapsar; aynı satır kümesini yeniden efirde tartışmak gerekirken, SQLSetPos fOption SQL_REFRESH olarak çağrıldığı durumu kapsamaz. Son durumda, satır kümesi tamponlarındaki veriler yenilenir ancak yeniden eleştirilmez ve silinen satırlar sonuç kümesinden çıkarılmaz. Bu nedenle, bir satır mevcut satır kümesinden silindiğinde veya içine eklendiğinde, imleç satır kümesi tamponlarını değiştirmez. Bunun yerine, daha önce silinmiş satırı içeren veya şimdi eklenmiş satırı içeren herhangi bir satır setini getirdiğinde değişikliği algılar.
Örneğin:
// Fetch the next rowset.
SQLFetchScroll(hstmt, SQL_FETCH_NEXT, 0);
// Delete third row of the rowset. Does not modify the rowset buffers.
SQLSetPos(hstmt, 3, SQL_DELETE, SQL_LOCK_NO_CHANGE);
// The third row has a status of SQL_ROW_DELETED after this call.
SQLSetPos(hstmt, 3, SQL_REFRESH, SQL_LOCK_NO_CHANGE);
// Refetch the same rowset. The third row is removed, replaced by what
// was previously the fourth row.
SQLFetchScroll(hstmt, SQL_FETCH_RELATIVE, 0);
SQLFetchScroll, mevcut satır kümesine göre konuma sahip yeni bir satır kümesi döndürdüğünde - yani FetchOrientation SQL_FETCH_NEXT, SQL_FETCH_PRIOR veya SQL_FETCH_RELATIVE - yeni satır kümesinin başlangıç konumu hesaplanırken mevcut satır kümesinde değişiklikleri dahil etmez. Ancak, mevcut satır kümesi dışındaki değişiklikleri tespit edebiliyorsa da içeriyor. Ayrıca, SQLFetchScroll mevcut satır kümesinden bağımsız bir konuma sahip yeni bir satır kümesi döndürdüğünde - yani FetchOrientation SQL_FETCH_FIRST, SQL_FETCH_LAST, SQL_FETCH_ABSOLUTE veya SQL_FETCH_BOOKMARK - tespit edebildiği tüm değişiklikleri, hatta mevcut satır kümesinde olsalar bile içerir.
Yeni eklenen satırların mevcut satır kümesinin içinde mi yoksa dışında mı olduğu belirlenirken, kısmi bir satır kümesi son geçerli satırda bitmiş sayılır; yani, satır durumu SQL_ROW_NOROW olmayan son satır. Örneğin, imleç yeni eklenen satır setleri algılayabildiğini, mevcut satır kümesinin kısmi bir satır kümesi olduğunu, uygulamanın yeni satırlar eklediğini ve imlecinin bu satırları sonuç kümesinin sonuna eklediğini varsayalalım. Uygulama FetchOrientation SQL_FETCH_NEXT olarak ayarlanmış SQLFetchScroll çağırırsa, SQLFetchScroll yeni eklenen ilk satırdan başlayan satır kümesini döndürür.
Örneğin, mevcut satır kümesi 21'den 30'a kadar olan sıralardan oluşuyordu, satır kümesi boyutu 10'dur, imleç sonuç kümesinden silinen satırları kaldırır ve imleç sonuç kümesine eklenen satırları algılar. Aşağıdaki tablo, SQLFetchScroll'un çeşitli durumlarda döndürdüğü satırları göstermektedir.
| Değiştir | Getir türü | FetchOffset | Yeni rowset[1] |
|---|---|---|---|
| 21. satırı sil | SONRAKİ | 0 | 31 ila 40 |
| 31. satırı sil | SONRAKİ | 0 | 32'den 41'e |
| 21 ve 22. sıralar arasında sıra ekleyin | SONRAKİ | 0 | 31 ila 40 |
| 30 ve 31. sıralar arasında sıra ekleyin | SONRAKİ | 0 | Eklenen sıra, 31'den 39'a |
| 21. satırı sil | PRIOR | 0 | 11'den 20'ye kadar |
| 20. satırı sil | PRIOR | 0 | 10'dan 19'a |
| 21 ve 22. sıralar arasında sıra ekleyin | PRIOR | 0 | 11'den 20'ye kadar |
| 20 ve 21. sıralar arasında sıra ekleyin | PRIOR | 0 | 12 ile 20, yerleştirilmiş sıra |
| 21. satırı sil | AKRABA | 0 | 22 ila 31[2] |
| 21. satırı sil | AKRABA | 1 | 22'den 31'e |
| 21 ve 22. sıralar arasında sıra ekleyin | AKRABA | 0 | 21, eklenen sıra, 22'den 29'a |
| 21 ve 22. sıralar arasında sıra ekleyin | AKRABA | 1 | 22'den 31'e |
| 21. satırı sil | ABSOLUTE | 21 | 22 ila 31[2] |
| 22. satırı sil | ABSOLUTE | 21 | 21, 23 ila 31 |
| 21 ve 22. sıralar arasında sıra ekleyin | ABSOLUTE | 22 | Eklenen sıra, 22'den 29'a |
[1] Bu sütun, herhangi bir satır eklenmeden veya silinmeden önceki satır numaralarını kullanır.
[2] Bu durumda, imleç 21. sıradan başlayan satırları geri getirmeye çalışır. 21. satır silindiği için, ilk döndürülen satır 22.
Hata satırları (yani SQL_ROW_ERROR statüsüne sahip satırlar) imlecin hareketini etkilemez. Örneğin, mevcut satır kümesi 11. sırayla başlıyorsa ve 11. satırın durumu SQL_ROW_ERROR ise, FetchOrientation SQL_FETCH_RELATIVE ve FetchOffset 5 olarak ayarlanmış SQLFetchScroll'u çağırmak, 11. satırın durumu SQL_SUCCESS olduğu gibi 16. satırdan başlayan satır kümesini döndürür.
Bağlı Sütunlarda Veri Döndürülmesi
SQLFetchScroll , verileri bağlı sütunlarda SQLFetch ile aynı şekilde döndürür. Daha fazla bilgi için, SQLFetch Fonksiyonu içindeki "Bound Columns'ta Veri Döndürme" bölümüne bakınız.
Eğer hiçbir sütun bağlanmazsa, SQLFetchScroll veri döndürmez ancak blok imlecini belirtilen konuma taşır. Verilerin blok imlecinin bağlanmamış sütunlarından SQLGetData ile alınıp alınamayacağı sürücüye bağlıdır. Bu özellik, SQLGetInfo'ya yapılan bir çağrı SQL_GETDATA_EXTENSIONS bilgi tipinin SQL_GD_BLOCK bitini döndürdüğünde desteklenir.
Tampon Adresleri
SQLFetchScroll , veri adresini ve uzunluk/gösterge tamponları belirlemek için SQLFetch ile aynı formülü kullanır. Daha fazla bilgi için SQLBindCol Fonksiyonu'ndaki "Buffer Adresleri"ne bakınız.
Satır Durumu Dizisi
SQLFetchScroll , satır durum dizisinde SQLFetch ile aynı şekilde değerleri ayarlar. Daha fazla bilgi için SQLFetch Fonksiyonu bölümünde "Sıra Durum Dizisi"ne bakınız.
Satır Getirilen Tampon
SQLFetchScroll , getirilen satır tamponunda getirilen satır sayısını SQLFetch ile aynı şekilde döndürür. Daha fazla bilgi için, SQLFetch Fonksiyonu içindeki "Satır Getirilmiş Tampon" bölümüne bakınız.
Hata İşleme
Bir uygulama ODBC 3.x sürücüsünde SQLFetchScroll'u çağırdığında, Sürücü Yöneticisi sürücüde SQLFetchScroll'u çağırır. Bir uygulama ODBC 2.x sürücüsünde SQLFetchScroll çağırdığında, Sürücü Yöneticisi sürücüde SQLExtendedFetch çağrısını yapar. SQLFetchScroll ve SQLExtendedFetch hataları biraz farklı şekilde ele aldığından, uygulama ODBC 2.x ve ODBC 3.x sürücülerinde SQLFetchScroll'u çağırdığında biraz farklı hata davranışları görür.
SQLFetchScroll , hataları ve uyarıları SQLFetch ile aynı şekilde döndürür; Daha fazla bilgi için SQLFetch'teki "Hata İşleme" bölümüne bakınız. SQLExtendedFetch , hataları SQLFetch ile aynı şekilde döndürür, ancak aşağıdaki istisnalar vardır:
Satır kümesinde belirli bir satıra uygulanan bir uyarı olduğunda, SQLExtendedFetch satır durum dizisinde karşılık gelen girişi SQL_ROW_SUCCESS_WITH_INFO değil, SQL_ROW_SUCCESS olarak ayarlar.
Eğer satır kümesinin her satırında hata olursa, SQLExtendedFetch SQL_ERROR değil, SQL_SUCCESS_WITH_INFO döndürür.
Bireysel bir satıra uygulanan her durum kayıt grubunda, SQLExtendedFetch tarafından döndürülen ilk durum kaydı SQLSTATE 01S01 (Satır hatası) içermelidir; SQLFetchScroll bu SQLSTATE'i döndürmez. Eğer SQLExtendedFetch ek SQLSTATE'leri döndüremiyorsa, yine de bu SQLSTATE'i geri döndürmelidir.
SQLFetchScroll ve İyimser Eşzamanlılık
Bir imleç iyimser eşzamanlılık kullanıyorsa - yani SQL_ATTR_CONCURRENCY ifadesi özniteliği SQL_CONCUR_VALUES veya SQL_CONCUR_ROWVER değere sahipse - SQLFetchScroll , veri kaynağının kullandığı iyimser eşdeğerlilik değerlerini günceller. Bu, SQLFetchScroll yeni bir satır kümesi getirdiğinde ve mevcut satır kümesini yeniden açtığında da olur. (FetchOrientation SQL_FETCH_RELATIVE ve FetchOffset 0 olarak ayarlandığında çağrılır.)
SQLFetchScroll ve ODBC 2.x Sürücüleri
Bir uygulama ODBC 2.x sürücüsünde SQLFetchScroll çağırdığında, Sürücü Yöneticisi bu çağrıyı SQLExtendedFetch ile eşler. SQLExtendedFetch argümanları için aşağıdaki değerleri geçer.
| SQLExtendedFetch argument | Değer |
|---|---|
| StatementHandle | SQLFetchScroll'da StatementHandle ile birlikte bulun. |
| FetchOrientation | SQLFetchScroll'da FetchOrientation. |
| FetchOffset | FetchOrientation SQL_FETCH_BOOKMARK değilse, SQLFetchScroll'daki FetchOffset argümanının değeri kullanılır. FetchOrientation SQL_FETCH_BOOKMARK ise, SQL_ATTR_FETCH_BOOKMARK_PTR ifadesi özniteliğinde belirtilen adreste saklanan değer kullanılır. |
| RowCountPtr | SQL_ATTR_ROWS_FETCHED_PTR ifadesi özniteliğiyle belirtilen adres. |
| RowStatusArray | SQL_ATTR_ROW_STATUS_PTR ifadesi özniteliğiyle belirtilen adres. |
Daha fazla bilgi için bkz. Ek G: Geriye Dönük Uyumluluk için Sürücü Yönergeleri bölümünde Blok İmleçleri, Kaydırılabilir İmleçler ve Geriye Dönük Uyumluluk.
Descriptors ve SQLFetchScroll
SQLFetchScroll , tanımlayıcılarla SQLFetch gibi aynı şekilde etkileşime girer. Daha fazla bilgi için SQLFetch Fonksiyonu'ndaki "Descriptors and SQLFetchScroll" bölümüne bakınız.
Kod Örneği
SQLSetPos ile Column-Wise binding, Row-Wise binding, positioned update ve delete ifadeleri ile satır setlerindeki güncelleştirme bölümlerine bakınız.
İlgili Fonksiyonlar
| Hakkında bilgi için | Bkz: |
|---|---|
| Sonuç kümesindeki bir sütuna arabellek bağlama | SQLBindCol İşlevi |
| Toplu ekleme, güncelleme veya silme işlemlerini gerçekleştirmek | SQLBulkOperations Fonksiyonu |
| Deyim işlemeyi iptal etme | SQLCancel İşlevi |
| Sonuç kümesindeki bir sütunla ilgili bilgi döndürme | SQLDescribeCol Fonksiyonu |
| SQL ifadesinin yürütülmesi | SQLExecDirect Fonksiyonu |
| Hazırlanmış bir SQL deyimini yürütme | SQLExecute İşlevi |
| Tek bir satır veya veri bloğunu sadece ileri yönde almak | SQLFetch İşlevi |
| İmleci kapatmak | SQLFreeStmt İşlevi |
| Sonuç kümesi sütunlarının sayısını döndürmek | SQLNumResultCols Fonksiyonu |
| İmleci konumlandırmak, satır kümesinde veriyi yenilemek veya sonuç kümesindeki verileri güncellemek veya silmek | SQLSetPos Fonksiyonu |
| Deyim özniteliğini ayarlama | SQLSetStmtAttr İşlevi |