SQLFetchScroll İşlevi

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.

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