Aracılığıyla paylaş


SQLFetch İşlevi

uyumluluk
Kullanıma Sunulan Sürüm: ODBC 1.0 Standartları Uyumluluğu: ISO 92

Özet
SQLFetch sonuç kümesinden sonraki veri satır kümesini getirir ve tüm ilişkili sütunlar için veri döndürür.

Sözdizimi

  
SQLRETURN SQLFetch(  
     SQLHSTMT     StatementHandle);  

Tartışmalar

StatementHandle
[Giriş] Deyim tanıtıcısı.

İade

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

Tanılama

SQLFetch SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, SQL_HANDLE_STMT HandleType ve StatementHandleTanıtıcısı ile SQLGetDiagRec İşlevi çağrılarak ilişkili bir SQLSTATE değeri elde edilebilir. Aşağıdaki tabloda genellikle SQLFetch tarafından döndürülen SQLSTATE değerleri listelenerek her biri bu işlev bağlamında açıklanmaktadır; "(DM)" gösterimi, Sürücü Yöneticisi tarafından döndürülen SQLSTATEs 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 , hatanın oluştuğu sütunu belirlemek için SQL_DIAG_COLUMN_NUMBER DiagIdentifier ile çağrılabilir; ve SQLGetDiagField , bu sütunu içeren satırı belirlemek için SQL_DIAG_ROW_NUMBER DiagIdentifier ile çağrılabilir.

SQL_SUCCESS_WITH_INFO veya SQL_ERROR döndürebilen tüm BU SQLSTAT'lar için (01xxx SQLSTATEs hariç), çok satırlı işlemin bir veya birden çok satırında hata oluşursa SQL_SUCCESS_WITH_INFO döndürülür, tek satırlı bir işlemde hata oluşursa SQL_ERROR döndürülür.

SQLSTATE Hata Açıklama
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 döndürülen dize veya ikili veriler boş olmayan karakterin veya NULL olmayan ikili verilerin kesilmesiyle sonuçlandı. Bir dize değeriyse, sağ kesilmiştir.
01S01 Satırda hata Bir veya daha fazla satır getirilirken bir hata oluştu.

(BIR ODBC 3*.x* uygulaması ODBC 2*.x* sürücüsüyle çalışırken bu SQLSTATE döndürülürse, yoksayılabilir.)
01S07 Kesirli kesme Bir sütun için döndürülen veriler kesildi. Sayısal veri türleri için sayının kesirli kısmı kesildi. Zaman bileşeni içeren zaman, zaman damgası ve aralık veri türleri için, zamanın kesirli kısmı kesildi.

(İş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ülemedi.

0. sütun SQL_C_BOOKMARK veri türüne bağlıydı ve SQL_ATTR_USE_BOOKMARKS deyimi özniteliği SQL_UB_VARIABLE olarak ayarlandı.

Sütun 0, SQL_C_VARBOOKMARK veri türüyle ilişkiliydi ve SQL_ATTR_USE_BOOKMARKS deyimi özniteliği SQL_UB_VARIABLE olarak ayarlanmadı.
07009 Geçersiz tanımlayıcı dizini Sürücü SQLExtendedFetch'i desteklemeyen bir ODBC 2*.x* sürücüsü ve bir sütun için bağlamada belirtilen sütun numarası 0'dı.

Sütun 0 bağlıydı ve SQL_ATTR_USE_BOOKMARKS deyimi özniteliğ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ş Sütun için döndürülen değişken uzunlukta yer işareti kesildi.
22002 Gösterge değişkeni gerekli ancak sağlanmadı NULL veriler, SQLBindCol (veya SQLSetDescField veya SQLSetDescRectarafından ayarlanan SQL_DESC_INDICATOR_PTR) tarafından ayarlanan StrLen_or_IndPtr null işaretçisi olan bir sütuna getirildi.
22003 Sayısal değer aralık dışında Sayısal değeri bir veya daha fazla ilişkili sütun için sayısal veya dize olarak döndürmek, sayının tamamının (kesirlinin aksine) kesilmesine neden olabilir.

Daha fazla bilgi için bkz. Ek D: Veri Türleri'nde Verileri SQL'den C Veri Türlerine Dönüştürme .
22007 Geçersiz tarih saat biçimi Sonuç kümesindeki karakter sütunu bir tarih, saat veya zaman damgası C yapısına bağlıydı ve sütundaki bir değer sırasıyla geçersiz bir tarih, saat veya zaman damgasıydı.
22012 Sıfıra bölme Aritmetik ifadeden bir değer döndürüldü ve bu da sıfıra bölünmesine neden oldu.
22015 Aralık alanı taşması Tam bir sayısal veya aralık SQL türünden C aralığı türüne atama, baştaki alanda önemli basamak kaybına neden oldu.

C aralığı türüne veri getirilirken, C aralığındaKI SQL türünün değerinin gösterimi yoktu.
22018 Atama belirtimi için geçersiz karakter değeri Sonuç kümesindeki bir karakter sütunu bir C karakteri arabelleğine bağlıydı ve sütun, arabelleğin karakter kümesinde gösterimi olmayan bir karakter içeriyordu.

C türü tam veya yaklaşık bir sayısal, tarih saat veya aralık veri türü idi; sütunun SQL türü bir karakter veri türü idi; ve sütundaki değer, ilişkili C türünün geçerli bir değişmez değeri değildi.
24000 Geçersiz imleç durumu StatementHandle yürütüldü durumundaydı ancak StatementHandle ile hiçbir sonuç kümesi ilişkilendirilmemiş.
40001 Serileştirme hatası Kilitlenmeyi önlemek için getirme işleminin yürütüldiği işlem 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ğindeki 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 StatementHandleiçin zaman uyumsuz işleme etkinleştirildi. SQLFetch işlevi çağrıldı ve yürütme tamamlanmadan önce StatementHandle üzerinde SQLCancel veya SQLCancelHandle çağrıldı. Ardından SQLFetch işlevi StatementHandle üzerinde yeniden çağrıldı.

Veya SQLFetch işlevi ç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) StatementHandleile ilişkili bağlantı tanıtıcısı için zaman uyumsuz olarak yürütülen bir işlev çağrıldı. SQLFetch işlevi çağrıldığında bu zaman uyumsuz işlev hala yürütülüyordu.

(DM) SQLExecute, SQLExecDirectveya 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üldü durumunda değildi. İşlev, sqlexecute veya katalog işlevi SQLExecDirectçağrılmadan çağrıldı.

(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, SQLBulkOperationsveya 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) SQLExtendedFetch çağrıldıktan sonra ve SQL_CLOSE seçeneğiyle SQLFreeStmt çağrılmadan önce StatementHandle için SQLFetch ç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 deyimi özniteliği SQL_UB_VARIABLE olarak ayarlandı ve 0 sütunu bu sonuç kümesi için yer işareti için uzunluk üst sınırına eşit olmayan bir arabelleğe bağlıydı. (Bu uzunluk IRD'nin SQL_DESC_OCTET_LENGTH alanında bulunur ve SQLDescribeCol, SQLColAttribute veya SQLGetDescField çağrılarak elde edilebilir.)
HY107 Satır değeri aralık dışında SQL_ATTR_CURSOR_TYPE deyimi özniteliğiyle belirtilen değer SQL_CURSOR_KEYSET_DRIVEN, ancak SQL_ATTR_KEYSET_SIZE deyimi özniteliğiyle belirtilen değer 0'dan büyük ve SQL_ATTR_ROW_ARRAY_SIZE deyimi özniteliğiyle belirtilen değerden küçüktür.
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 alma 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 türü birleşimi tarafından belirtilen dönüştürmeyi 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ı süresi SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT aracılığıyla ayarlanır.
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 SQLSetConnectAttrSQL_ATTR_CONNECTION_TIMEOUT üzerinden 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 etkinse, SQLCompleteAsync işlem sonrası işlem yapmak ve işlemi tamamlamak için tanıtıcıda çağrılmalıdır.

Yorumlar

SQLFetch , sonuç kümesindeki sonraki satır kümesini döndürür. Yalnızca bir sonuç kümesi mevcutken çağrılabilir: sonuç kümesi oluşturan bir çağrıdan sonra ve bu sonuç kümesinin üzerindeki imleç kapatılmadan önce. Herhangi bir sütun bağlıysa, bu sütunlardaki verileri döndürür. Uygulama bir satır durumu dizisine veya getirilen satır sayısının döndürüleceği arabelleğe bir işaretçi belirttiyse, SQLFetch de bu bilgileri döndürür. SQLFetch çağrıları SQLFetchScroll çağrılarıyla karıştırılabilir, ancak SQLExtendedFetch çağrılarıyla karıştırılamaz. Daha fazla bilgi için bkz. Veri Satırı Getirme.

ODBC 3*.x* uygulaması bir ODBC 2*.x* sürücüsüyle çalışıyorsa, Sürücü Yöneticisi SQLExtendedFetch'i destekleyen bir ODBC 2*.x* sürücüsü için SQLExtendedFetch'e çağrıları eşler. ODBC 2*.x* sürücüsü SQLExtendedFetch'i desteklemiyorsa, Sürücü Yöneticisi SQLFetch çağrılarını ODBC 2*.x* sürücüsündeki SQLFetch'e eşler ve bu da yalnızca tek bir satır getirebilir.

Daha fazla bilgi için 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 bakın.

İmleci Konumlandırma

Sonuç kümesi oluşturulduğunda, imleç sonuç kümesinin başlangıcından önce konumlandırılır. SQLFetch sonraki satır kümesini getirir. FetchOrientation SQL_FETCH_NEXT olarak ayarlanmış SQLFetchScroll çağrısıyla eşdeğerdir. İmleçler hakkında daha fazla bilgi için bkz. İmleçler ve Blok İmleçleri.

SQL_ATTR_ROW_ARRAY_SIZE deyimi özniteliği, satır kümesindeki satır sayısını belirtir. SQLFetch tarafından getirilen satır kümesi sonuç kümesinin sonuyla çakışıyorsa, SQLFetch kısmi bir satır kümesi döndürür. Yani, S + R - 1 L'den büyükse, burada S getirilmekte olan satır kümesinin başlangıç satırı, R satır kümesi boyutu ve L sonuç kümesindeki son satırdır, satır kümesinin yalnızca ilk L - S + 1 satırı geçerlidir. Kalan satırlar boş ve durumu SQL_ROW_NOROW.

SQLFetch döndürdüğünde, geçerli satır satır kümesinin ilk satırıdır.

Aşağıdaki tabloda listelenen kurallar, bu bölümdeki ikinci tabloda listelenen koşullara göre SQLFetch çağrısından sonra imleç konumlandırmayı açıklar.

Koşul Yeni satır kümesinin ilk satırı
Başlamadan önce 1
CurrRowsetStart<= LastResultRow - RowsetSize[1] CurrRowsetStart + RowsetSize[2]
CurrRowsetStart>LastResultRow - RowsetSize[1] Sona erdikten sonra
Sona erdikten sonra Sona erdikten sonra

[1] Getirmeler arasında satır kümesi boyutu değiştirilirse, bu, önceki getirme işlemiyle kullanılan satır kümesi boyutudur.

[2] Getirmeler arasında satır kümesi boyutu değiştirilirse, bu yeni getirme ile kullanılan satır kümesi boyutudur.

Notasyon Anlamı
Başlamadan önce Blok imleci, sonuç kümesinin 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 , SQLFetch SQL_NO_DATA döndürür.
Sona erdikten sonra Blok imleci, sonuç kümesinin sonundan sonra konumlandırılır. Yeni satır kümesinin ilk satırı sonuç kümesinin sonundan sonraysa , SQLFetch SQL_NO_DATA döndürür.
CurrRowsetStart Geçerli satır kümesindeki ilk satırın sayısı.
LastResultRow Sonuç kümesindeki son satırın sayısı.
RowsetSize Satır kümesi boyutu.

Örneğin, bir sonuç kümesinin 100 satırı olduğunu ve satır kümesi boyutunun 5 olduğunu varsayalım. Aşağıdaki tabloda farklı başlangıç konumları için SQLFetch tarafından döndürülen satır kümesi ve dönüş kodu gösterilmektedir.

Geçerli satır kümesi İade kodu Yeni satır kümesi # of rows fetched
Başlamadan önce SQL_SUCCESS 1 - 5 5
1 - 5 SQL_SUCCESS 6 - 10 5
52 - 56 SQL_SUCCESS 57 - 61 5
91 - 95 SQL_SUCCESS 96 - 100 5
93 - 97 SQL_SUCCESS 98-100. Satır durumu dizisinin 4. ve 5. satırları SQL_ROW_NOROW olarak ayarlanır. 3
96 - 100 SQL_VERİ_YOK Yok. 0
99 - 100 SQL_VERİ_YOK Yok. 0
Sona erdikten sonra SQL_VERİ_YOK Yok. 0

İlişkili Sütunlarda Veri Döndürme

SQLFetch her satırı döndürdüğünde, her ilişkili sütunun verilerini ilgili sütuna bağlı arabelleğe yerleştirir. Hiçbir sütun bağlı değilse , SQLFetch veri döndürmez ancak blok imlecini ileri taşır. Veriler YINE SQLGetData kullanılarak alınabilir. İmleç çok yerli bir imleçse (yani, SQL_ATTR_ROW_ARRAY_SIZE 1'den büyükse), SQLGetData yalnızca SQLGetInfo SQL_GETDATA_EXTENSIONS InfoType değeriyle çağrıldığında SQL_GD_BLOCK döndürülürse çağrılabilir. (Daha fazla bilgi için bkz . SQLGetData.)

SqlFetch, bir satırdaki her ilişkili sütun için aşağıdakileri yapar:

  1. Uzunluk/gösterge arabelleği SQL_NULL_DATA olarak ayarlar ve veriler NULL ise sonraki sütuna devam eder. Veriler NULL ise ve hiçbir uzunluk/gösterge arabelleği bağlı değilse, SQLFetch satır için SQLSTATE 22002 (Gösterge değişkeni gerekli ancak sağlanmadı) döndürür ve sonraki satıra devam eder. Uzunluk/gösterge arabelleğinin adresini belirleme hakkında bilgi için bkz. SQLBindCol'da "Arabellek Adresleri".

    Sütunun verileri NULL değilse , SQLFetch 2. adıma geçer.

  2. SQL_ATTR_MAX_LENGTH deyimi özniteliği sıfır olmayan bir değere ayarlanırsa ve sütun karakter veya ikili veri içeriyorsa, veriler SQL_ATTR_MAX_LENGTH bayt olarak kesilir.

    Uyarı

    SQL_ATTR_MAX_LENGTH deyimi özniteliği, ağ trafiğini azaltmaya yöneliktir. Genellikle verileri ağ üzerinden döndürmeden önce kesen veri kaynağı tarafından uygulanır. Sürücüleri ve veri kaynaklarını desteklemek için gerekli değildir. Bu nedenle, verilerin belirli bir boyuta kesilmesini garanti etmek için, bir uygulama bu boyutta bir arabellek ayırmalı ve boyutu SQLBindCol'dakicbValueMax bağımsız değişkeninde belirtmelidir.

  3. Verileri SQLBindCol'daTargetType tarafından belirtilen türe dönüştürür.

  4. Veriler karakter veya ikili gibi değişken uzunlukta bir veri türüne dönüştürüldüyse , SQLFetch verilerin uzunluğunun veri arabelleğinin uzunluğunu aşıp aşmadığını denetler. Karakter verilerinin uzunluğu (null sonlandırma karakteri dahil) veri arabelleğinin uzunluğunu aşarsa , SQLFetch verileri veri arabelleğinin uzunluğuna, null sonlandırma karakterinin uzunluğundan daha az keser. Ardından verileri null-terminates. İkili verilerin uzunluğu veri arabelleğinin uzunluğunu aşarsa , SQLFetch bunu veri arabelleğinin uzunluğuna kadar kısaltılır. Veri arabelleğinin uzunluğu SQLBindCol'daBufferLength ile belirtilir.

    SQLFetch hiçbir zaman sabit uzunlukta veri türlerine dönüştürülen verileri kesmez; her zaman veri arabelleği uzunluğunun veri türünün boyutu olduğunu varsayar.

  5. Dönüştürülen (ve büyük olasılıkla kesilmiş) verileri veri arabelleğine yerleştirir. Veri arabelleğinin adresini belirleme hakkında bilgi için bkz. SQLBindCol'da "Arabellek Adresleri".

  6. Verilerin uzunluğunu uzunluk/gösterge arabelleğine yerleştirir. Gösterge işaretçisi ve uzunluk işaretçisi aynı arabelleğe ayarlanmışsa ( SQLBindCol çağrısında olduğu gibi), uzunluk geçerli veriler için arabelleğe yazılır ve null veriler için arabelleğe SQL_NULL_DATA yazılır. Hiçbir uzunluk/gösterge arabelleği bağlı değilse , SQLFetch uzunluğu döndürmez.

    • Karakter veya ikili veriler için bu, veri arabelleğinin çok küçük olması nedeniyle dönüştürmeden ve kesilmeden önce verilerin uzunluğudur. Sürücü, bazen uzun verilerde olduğu gibi dönüştürmeden sonra verilerin uzunluğunu belirleyemezse uzunluğu SQL_NO_TOTAL olarak ayarlar. veriler SQL_ATTR_MAX_LENGTH deyimi özniteliği nedeniyle kesildiyse, bu özniteliğin değeri gerçek uzunluk yerine uzunluk/gösterge arabelleğine konur. Bunun nedeni, bu özniteliğin dönüştürmeden önce sunucudaki verileri kesecek şekilde tasarlanmış olmasıdır, böylece sürücü gerçek uzunluğun ne olduğunu anlamanın hiçbir yolu yoktur.

    • Diğer tüm veri türleri için bu, dönüştürmeden sonra verilerin uzunluğudur; yani, verilerin dönüştürüldüğü türün boyutudur.

    Uzunluk/gösterge arabelleğinin adresini belirleme hakkında bilgi için bkz. SQLBindCol'da "Arabellek Adresleri".

  7. Dönüştürme sırasında veriler önemli basamak kaybı olmadan kesilirse (örneğin, gerçek sayı 1,234 dönüştürüldüğünde 1 tamsayısına kesilir), SQLFetch SQLSTATE 01S07 (Kesirli kesme) ve SQL_SUCCESS_WITH_INFO döndürür. Veri arabelleğinin uzunluğu çok küçük olduğundan veriler kesilirse (örneğin, "abcdef" dizesi 4 baytlık bir arabelleğe konur), SQLFetch SQLSTATE 01004 (Veriler kesilmiş) ve SQL_SUCCESS_WITH_INFO döndürür. veriler SQL_ATTR_MAX_LENGTH deyimi özniteliği nedeniyle kesilirse, SQLFetch SQL_SUCCESS döndürür ve SQLSTATE 01S07 (Kesirli kesme) veya SQLSTATE 01004 (Veri kesilmiş) döndürmez. Dönüştürme sırasında veriler önemli basamak kaybıyla kesilirse (örneğin, 100.000'den büyük bir SQL_INTEGER değeri bir SQL_C_TINYINT dönüştürüldüyse), SQLFetch SQLSTATE 22003 (Sayısal değer aralık dışında) ve SQL_ERROR (satır kümesi boyutu 1 ise) veya SQL_SUCCESS_WITH_INFO (satır kümesi boyutu 1'den büyükse) döndürür.

SQLFetch veya SQLFetchScroll SQL_SUCCESS veya SQL_SUCCESS_WITH_INFO döndürmezse, ilişkili veri arabelleğinin ve uzunluk/gösterge arabelleğinin içeriği tanımlanmaz.

Satır Durumu Dizisi

Satır durumu dizisi, satır kümesindeki her satırın durumunu döndürmek için kullanılır. Bu dizinin adresi SQL_ATTR_ROW_STATUS_PTR deyimi özniteliğiyle belirtilir. Dizi uygulama tarafından ayrılır ve SQL_ATTR_ROW_ARRAY_SIZE deyimi özniteliği tarafından belirtilen sayıda öğeye sahip olmalıdır. Değerleri SQLFetch,SQLFetchScroll ve SQLBulkOperations veya SQLSetPos tarafından ayarlanır (imleç SQLExtendedFetch tarafından konumlandırıldıktan sonra çağrılmaları dışında). SQL_ATTR_ROW_STATUS_PTR deyimi özniteliğinin değeri null bir işaretçiyse, bu işlevler satır durumunu döndürmez.

SQLFetch veyaSQLFetchScroll SQL_SUCCESS veya SQL_SUCCESS_WITH_INFO döndürmezse satır durumu dizi arabelleğinin içeriği tanımlanmamış olur.

Satır durumu dizisinde aşağıdaki değerler döndürülür.

Satır durumu dizi değeri Açıklama
SQL_ROW_SUCCESS Satır başarıyla getirilmiştir ve bu sonuç kümesinden son getirildiğinden beri değişmemiştir.
SQL_ROW_SUCCESS_WITH_INFO Satır başarıyla getirilmiştir ve bu sonuç kümesinden son getirildiğinden beri değişmemiştir. Ancak, satır hakkında bir uyarı döndürüldü.
SQL_ROW_ERROR Satır getirilirken bir hata oluştu.
SQL_ROW_UPDATED[1],[2]ve [3] Satır başarıyla getirilmiştir ve bu sonuç kümesinden en son getirildiğinden bu yana değişmiştir. Satır bu sonuç kümesinden yeniden getirilirse veya SQLSetPos tarafından yenilenirse, durum satırın yeni durumuna değiştirilir.
SQL_ROW_DELETED[3] Satır, bu sonuç kümesinden en son getirildikten sonra silindi.
SQL_ROW_ADDED[4] Satır SQLBulkOperations tarafından eklendi. Satır bu sonuç kümesinden yeniden getirilirse veya SQLSetPos tarafından yenilenirse, durumu SQL_ROW_SUCCESS.
SQL_ROW_NOROW Satır kümesi sonuç kümesinin sonuyla çakıştı ve satır durumu dizisinin bu öğesine karşılık gelen hiçbir satır döndürülmedi.

[1] Anahtar kümesi, karma ve dinamik imleçler için bir anahtar değeri güncelleştirilirse veri satırı silinmiş olarak kabul edilir ve yeni bir satır eklenir.

[2] Bazı sürücüler veri güncelleştirmelerini algılayamaz ve bu nedenle bu değeri döndüremez. Bir sürücünün yeniden yüklenen satırlara yönelik güncelleştirmeleri algılayıp algılayamadığını belirlemek için, bir uygulama SQL_ROW_UPDATES seçeneğiyle SQLGetInfo'yı çağırır.

[3] SQLFetch bu değeri yalnızca SQLFetchScroll çağrılarıyla karıştırıldığında döndürebilir. Bunun nedeni SQLFetch'in sonuç kümesinde ilerlemesi ve özel olarak kullanıldığında herhangi bir satırı yeniden kullanmamasıdır. Hiçbir satır yeniden eklenmediğinden , SQLFetch daha önce getirilen satırlarda yapılan değişiklikleri algılamaz. Ancak , SQLFetchScroll imleci daha önce getirilen satırlardan önce konumlandırırsa ve bu satırları getirmek için SQLFetch kullanılırsa , SQLFetch bu satırlarda yapılan değişiklikleri algılayabilir.

[4] Yalnızca SQLBulkOperations tarafından döndürülür. SQLFetch veya SQLFetchScroll tarafından ayarlanmadı.

Getirilen SatırLar Arabelleği

Getirilen satırlar arabelleği, getirildikleri sırada bir hata oluştuğu için veri döndürülmeyen satırlar da dahil olmak üzere getirilen satır sayısını döndürmek için kullanılır. Başka bir deyişle, satır durumu dizisindeki değerin SQL_ROW_NOROW olmayan satır sayısıdır. Bu arabelleğin adresi SQL_ATTR_ROWS_FETCHED_PTR deyimi özniteliğiyle belirtilir. Arabellek uygulama tarafından ayrılır. SQLFetch ve SQLFetchScroll tarafından ayarlanır. SQL_ATTR_ROWS_FETCHED_PTR deyimi özniteliğinin değeri null bir işaretçiyse, bu işlevler getirilen satır sayısını döndürmez. Sonuç kümesindeki geçerli satırın sayısını belirlemek için, bir uygulama SQL_ATTR_ROW_NUMBER özniteliğiyle SQLGetStmtAttr'ı çağırabilir.

SQLFetch veyaSQLFetchScroll SQL_SUCCESS veya SQL_SUCCESS_WITH_INFO döndürmezse, SQL_NO_DATA döndürülmesi dışında, getirilen satırlar arabelleğindeki değerin 0 olarak ayarlanması dışında, getirilen satırların arabelleğindeki içerik tanımlanmamıştır.

Hata İşleme

Hatalar ve uyarılar tek tek satırlara veya işlevin tamamına uygulanabilir. Tanılama kayıtları hakkında daha fazla bilgi için bkz. Tanılama ve SQLGetDiagField.

İşlevin Tamamında Hatalar ve Uyarılar

SQLSTATE HYT00 (Zaman aşımı süresi doldu) veya SQLSTATE 24000 (Geçersiz imleç durumu) gibi bir hata işlevin tamamı için geçerliyse , SQLFetch SQL_ERROR ve geçerli SQLSTATE döndürür. Satır kümesi arabelleklerinin içeriği tanımlanmamıştır ve imleç konumu değiştirilmez.

İşlevin tamamına bir uyarı uygulanırsa , SQLFetch SQL_SUCCESS_WITH_INFO ve geçerli SQLSTATE değerini döndürür. İşlevin tamamına uygulanan uyarıların durum kayıtları, tek tek satırlara uygulanan durum kayıtlarından önce döndürülür.

Tek Tek Satırlarda Hatalar ve Uyarılar

Bir hata (SQLSTATE 22012 (sıfıra bölme)) veya bir uyarı (SQLSTATE 01004 (Kesilen veri) gibi) tek bir satır için geçerliyse, SQLFetch aşağıdakileri yapar:

  • Satır durumu dizisinin ilgili öğesini hatalar için SQL_ROW_ERROR veya uyarılar için SQL_ROW_SUCCESS_WITH_INFO olarak ayarlar.

  • Hata veya uyarı için SQLSTATEs içeren sıfır veya daha fazla durum kaydı ekler.

  • Durum kayıtlarındaki satır ve sütun numarası alanlarını ayarlar. SQLFetch bir satır veya sütun numarasını belirleyemezse, bu sayıyı sırasıyla SQL_ROW_NUMBER_UNKNOWN veya SQL_COLUMN_NUMBER_UNKNOWN olarak ayarlar. Durum kaydı belirli bir sütuna uygulanmıyorsa , SQLFetch sütun numarasını SQL_NO_COLUMN_NUMBER olarak ayarlar.

SQLFetch , satır kümesindeki tüm satırları getirene kadar satırları getirmeye devam eder. Satır kümesinin her satırında hata oluşmadığı sürece (durum SQL_ROW_NOROW olan satırlar dahil değil) SQL_SUCCESS_WITH_INFO döndürür ve bu durumda SQL_ERROR döndürür. Özellikle satır kümesi boyutu 1 ise ve bu satırda bir hata oluşursa , SQLFetch SQL_ERROR döndürür.

SQLFetch , durum kayıtlarını satır numarası sırasına göre döndürür. Başka bir ifadeyle, bilinmeyen satırlar için tüm durum kayıtlarını döndürür (varsa); ardından, ilk satırın (varsa) tüm durum kayıtlarını döndürür ve ardından ikinci satırın (varsa) tüm durum kayıtlarını döndürür ve bu şekilde devam eder. Her satırın durum kayıtları, durum kayıtlarını sıralamak için normal kurallara göre sıralanır; daha fazla bilgi için bkz. SQLGetDiagField'da "Durum Kayıtlarının Sırası".

Tanımlayıcılar ve SQLFetch

Aşağıdaki bölümlerde SQLFetch'in tanımlayıcılarla nasıl etkileşime geçdiği açıklanmaktadır.

Bağımsız Değişken Eşlemeleri

Sürücü , SQLFetch bağımsız değişkenlerine göre hiçbir tanımlayıcı alanı ayarlamaz.

Diğer Tanımlayıcı Alanları

Aşağıdaki tanımlayıcı alanları SQLFetch tarafından kullanılır.

Tanımlayıcı alanı Desc. Içindeki alan Ayarlama
SQL_DESC_ARRAY_SIZE ARD üstbilgi SQL_ATTR_ROW_ARRAY_SIZE deyimi özniteliği
SQL_DESC_ARRAY_STATUS_PTR IRD üstbilgi SQL_ATTR_ROW_STATUS_PTR deyimi özniteliği
SQL_DESC_BIND_OFFSET_PTR ARD üstbilgi SQL_ATTR_ROW_BIND_OFFSET_PTR deyimi özniteliği
SQL_DESC_BIND_TYPE ARD üstbilgi SQL_ATTR_ROW_BIND_TYPE deyimi özniteliği
SQL_DESC_COUNT ARD üstbilgi SQLBindCol'unColumnNumber bağımsız değişkeni
SQL_DESC_DATA_PTR ARD kayıt SQLBindCol'unTargetValuePtr bağımsız değişkeni
SQL_DESC_INDICATOR_PTR ARD kayıt SQLBindCol'daStrLen_or_IndPtr bağımsız değişkeni
SQL_DESC_OCTET_LENGTH ARD kayıt SQLBindCol'daBufferLength bağımsız değişkeni
SQL_DESC_OCTET_LENGTH_PTR ARD kayıt SQLBindCol'daStrLen_or_IndPtr bağımsız değişkeni
SQL_DESC_ROWS_PROCESSED_PTR IRD üstbilgi SQL_ATTR_ROWS_FETCHED_PTR deyimi özniteliği
SQL_DESC_TYPE ARD kayıt SQLBindCol'daTargetType bağımsız değişkeni

Tüm tanımlayıcı alanları SQLSetDescField aracılığıyla da ayarlanabilir.

Ayrı Uzunluk ve Gösterge Arabellekleri

Uygulamalar, uzunluk ve gösterge değerlerini tutmak için kullanılabilecek tek bir arabelleğe veya iki ayrı arabelleğe bağlanabilir. Bir uygulama SQLBindCol çağırdığında, sürücü ARD'nin SQL_DESC_OCTET_LENGTH_PTR ve SQL_DESC_INDICATOR_PTR alanlarını StrLen_or_IndPtr bağımsız değişkeninde geçirilen aynı adrese ayarlar. Bir uygulama SQLSetDescField veya SQLSetDescRec'i çağırdığında, bu iki alanı farklı adreslere ayarlayabilir.

SQLFetch , uygulamanın ayrı uzunluk ve gösterge arabellekleri belirtip belirtmediğini belirler. Bu durumda, veriler NULL olmadığında SQLFetch gösterge arabelleği 0 olarak ayarlar ve uzunluk arabelleğinde uzunluğu döndürür. Veriler NULL olduğunda , SQLFetch gösterge arabelleği SQL_NULL_DATA olarak ayarlar ve uzunluk arabelleğinde değişiklik yapmaz.

Kod Örneği

Bkz . SQLBindCol, SQLColumns, SQLGetData ve SQLProcedures.

Hakkında bilgi için Bkz:
Sonuç kümesindeki bir sütuna arabellek bağlama SQLBindCol İşlevi
Deyim işlemeyi iptal etme SQLCancel İşlevi
Sonuç kümesindeki bir sütun hakkında bilgi döndürme SQLDescribeCol İşlevi
SQL deyimi yürütme SQLExecDirect İşlevi
Hazırlanmış bir SQL deyimini yürütme SQLExecute İşlevi
Veri bloğunu getirme veya sonuç kümesinde kaydırma SQLFetchScroll İşlevi
deyimindeki imleci kapatma SQLFreeStmt İşlevi
Veri sütununun bir bölümünü veya tamamını getirme SQLGetData İşlevi
Sonuç kümesi sütunlarının sayısını döndürme SQLNumResultCols İşlevi
Bir deyimi yürütme için hazırlama SQLPrepare İşlevi

Ayrıca Bkz.

ODBC API Başvurusu
ODBC Üst Bilgi Dosyaları