Aracılığıyla paylaş


SQLMoreResults İşlevi

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

Özet
SQLMoreResultsSELECT, UPDATE, INSERT veya DELETE deyimlerini içeren bir deyimde daha fazla sonuç bulunup bulunmadığını belirler ve varsa bu sonuçlar için işlemeyi başlatır.

Sözdizimi

  
SQLRETURN SQLMoreResults(  
     SQLHSTMT     StatementHandle);  

Tartışmalar

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

İade

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_NO_DATA, SQL_ERROR, SQL_INVALID_HANDLE VEYA SQL_PARAM_DATA_AVAILABLE.

Tanılama

SQLMoreResults SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, SQL_HANDLE_STMT HandleType ve StatementHandleTanıtıcısı ile SQLGetDiagRec çağrılarak ilişkili bir SQLSTATE değeri elde edilebilir. Aşağıdaki tabloda SQLMoreResults tarafından yaygın olarak döndürülen SQLSTATE değerleri listelenmektedir ve 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.

SQLSTATE Hata Açıklama
01000 Genel uyarı Sürücüye özgü bilgilendirici ileti. (İşlev SQL_SUCCESS_WITH_INFO döndürür.)
01S02 Seçenek değeri değişti Toplu işlenirken deyim özniteliğinin değeri değişti. (İşlev SQL_SUCCESS_WITH_INFO döndürür.)
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.
40001 Serileştirme hatası Başka bir işlemle kaynak kilitlenmesi nedeniyle işlem geri alındı.
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. SQLMoreResults işlevi çağrıldı ve yürütme tamamlanmadan önce StatementHandle üzerinde SQLCancel veya SQLCancelHandle çağrıldı. Ardından SQLMoreResults işlevi StatementHandle üzerinde yeniden çağrıldı.

SQLMoreResults 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ı. SQLMoreResults işlevi çağrıldığında bu zaman uyumsuz işlev hala yürütülüyordu.

(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ı.
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.
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.
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

SELECT deyimleri sonuç kümeleri döndürür. UPDATE, INSERT ve DELETE deyimleri, etkilenen satırların sayısını döndürür. Bu deyimlerden herhangi biri toplu olarak gönderilirse, parametre dizileriyle gönderilirse (artan parametre sırasına göre, toplu işlemde göründükleri sırayla numaralandırılır) veya yordamlarda birden çok sonuç kümesi veya satır sayısı döndürebilirler. Deyim toplu işlemleri ve parametre dizileri hakkında bilgi için bkz. SQL Deyimleri Toplu İşlemleri ve Parametre Değerleri Dizileri.

Toplu işlemi yürüttkten sonra uygulama ilk sonuç kümesine yerleştirilir. Uygulama ilk veya sonraki sonuç kümelerinde SQLBindCol, SQLBulkOperations, SQLFetch, SQLGetData, SQLFetchScroll, SQLSetPos ve tüm meta veri işlevlerini tek bir sonuç kümesi olduğunda olduğu gibi çağırabilir. İlk sonuç kümesiyle tamamlandıktan sonra, uygulama sonraki sonuç kümesine geçmek için SQLMoreResults'ı çağırır. Başka bir sonuç kümesi veya sayı varsa, SQLMoreResults SQL_SUCCESS döndürür ve ek işleme için sonuç kümesini veya sayısını başlatır. Sonuç kümesi oluşturma deyimleri arasında satır sayısı oluşturma deyimleri görünürse, SQLMoreResults çağrılarak bunlar devredilebilir. UPDATE, INSERT veya DELETEdeyimleri için SQLMoreResults çağrıldıktan sonra, bir uygulama SQLRowCount'u çağırabilir.

Kaydedilmemiş satırları olan geçerli bir sonuç kümesi varsa, SQLMoreResults bu sonuç kümesini atar ve sonraki sonuç kümesini veya sayısını kullanılabilir hale getirir. Tüm sonuçlar işlendiyse , SQLMoreResults SQL_NO_DATA döndürür. Bazı sürücüler için, tüm sonuç kümeleri ve satır sayıları işlenene kadar çıkış parametreleri ve dönüş değerleri kullanılamaz. Bu tür sürücüler için SQLMoreResults SQL_NO_DATA döndürdüğünde çıkış parametreleri ve dönüş değerleri kullanılabilir hale gelir.

Önceki sonuç kümesi için oluşturulan tüm bağlamalar geçerli olmaya devam eder. Bu sonuç kümesi için sütun yapıları farklıysa , SQLFetch veya SQLFetchScroll çağrısı hataya veya kesmeye neden olabilir. Bunu önlemek için, uygulamanın uygun şekilde açıkça yeniden bağlaması için SQLBindCol'u çağırması gerekir (veya tanımlayıcı alanları ayarlayarak bunu yapın). Alternatif olarak, uygulama tüm sütun arabelleklerinin bağlamasını çözmek için SQL_UNBIND Seçeneği ile SQLFreeStmt'yi çağırabilir.

İmleç türü, imleç eşzamanlılığı, anahtar kümesi boyutu veya maksimum uzunluk gibi deyim özniteliklerinin değerleri, uygulama SQLMoreResults çağrılarıyla toplu işlemde gezindikçe değişebilir. Bu durumda , SQLMoreResults SQL_SUCCESS_WITH_INFO ve SQLSTATE 01S02 döndürür (Seçenek değeri değişti).

SQLCloseCursor veya SQLFreeStmt'yi SQL_CLOSE Seçeneğiyle çağırmak, toplu işlemin yürütülmesi sonucunda kullanılabilen tüm sonuç kümelerini ve satır sayılarını atar. Deyim tanıtıcısı, ayrılan veya hazırlanmış duruma döner. Bir toplu iş yürütülürken ve deyim tanıtıcısı yürütülürken, imleç konumlandırıldığında veya zaman uyumsuz durumda olduğunda zaman uyumsuz olarak yürütülen bir işlevi iptal etmek için SQLCancel'i çağırmak, iptal çağrısı başarılı olursa toplu iş tarafından oluşturulan tüm sonuç kümelerinin ve satır sayılarının atılmasıyla sonuçlanır. Deyimi daha sonra hazırlanmış veya ayrılmış duruma döner.

Bir grup deyim veya yordam diğer SQL deyimlerini SELECT, UPDATE, INSERT ve DELETE deyimleriyle karıştırırsa, bu diğer deyimler SQLMoreResults'ı etkilemez.

Daha fazla bilgi için bkz . Birden Çok Sonuç.

Bir toplu deyimde arama yapılan bir güncelleştirme, ekleme veya silme deyimi veri kaynağındaki hiçbir satırı etkilemezse , SQLMoreResults SQL_SUCCESS döndürür. Bu, SQLExecDirect, SQLExecute veya SQLParamData aracılığıyla yürütülen ve veri kaynağındaki herhangi bir satırı etkilememesi durumunda SQL_NO_DATA döndüren arama yapılan bir güncelleştirme, ekleme veya silme deyiminden farklıdır. Bir uygulama SQLMoreResults çağrısı hiçbir satırı etkilemedikten sonra satır sayısını almak için SQLRowCount'u çağırırsa, SQLRowCount SQL_NO_DATA döndürür.

Sonuç işleme işlevlerinin geçerli sıralaması hakkında ek bilgi için bkz . Ek B: ODBC Durumu Geçiş Tabloları.

SQL_PARAM_DATA_AVAILABLE ve akışlı çıkış parametreleri hakkında daha fazla bilgi için bkz. SQLGetData Kullanarak Çıktı Parametrelerini Alma.

Satır Sayılarının Kullanılabilirliği

Toplu işlem ardışık birden çok satır sayısı oluşturma deyimi içeriyorsa, bu satır sayıları tek bir satır sayısına toplanmış olabilir. Örneğin, bir toplu iş beş insert deyimine sahipse, belirli veri kaynakları beş ayrı satır sayısı döndürebilecektir. Bazı diğer veri kaynakları, beş ayrı satır sayısının toplamını temsil eden yalnızca bir satır sayısı döndürür.

Bir toplu işlem sonuç kümesi oluşturma ve satır sayısı oluşturma deyimlerinin bir bileşimini içerdiğinde, satır sayıları kullanılabilir olmayabilir veya hiç kullanılamayabilir. Satır sayılarının kullanılabilirliği açısından sürücünün davranışı , SQLGetInfo çağrısı aracılığıyla kullanılabilen SQL_BATCH_ROW_COUNT bilgi türünde numaralandırılır. Örneğin, toplu işleminin bir SELECT ve ardından iki INSERT deyimi ve başka bir SELECT içerdiğini varsayalım. Ardından aşağıdaki durumlar mümkündür:

  • İki INSERT deyimine karşılık gelen satır sayıları hiç kullanılamaz. SQLMoreResults'a yapılan ilk çağrı sizi ikinci SELECT deyiminin sonuç kümesine konumlandıracaktır.

  • İki INSERT deyimine karşılık gelen satır sayıları tek tek kullanılabilir. (SQLGetInfo çağrısı, SQL_BATCH_ROW_COUNT bilgi türü için SQL_BRC_ROLLED_UP biti döndürmez.) SQLMoreResults'a yapılan ilk çağrı sizi ilk INSERT'in satır sayısına, ikinci çağrı ise sizi ikinci INSERT'in satır sayısına yerleştirir. SQLMoreResults'a yapılan üçüncü çağrı sizi ikinci SELECT deyiminin sonuç kümesine konumlandıracaktır.

  • İki INSERT'ye karşılık gelen satır sayıları, kullanılabilir tek bir satır sayısına yuvarlanır. ( SQLGetInfo çağrısı, SQL_BATCH_ROW_COUNT bilgi türü için SQL_BRC_ROLLED_UP bit döndürür.) SQLMoreResults'a yapılan ilk çağrı, sizi toplu satır sayısına yerleştirir ve sqlmoreResults'a yapılan ikinci çağrı sizi ikinci SELECT'in sonuç kümesine yerleştirir.

Bazı sürücüler, satır sayılarını saklı yordamlar için değil yalnızca açık toplu işlemler için kullanılabilir hale getirir.

Hakkında bilgi için Bkz:
Deyim işlemeyi iptal etme SQLCancel İşlevi
Veri bloğunu getirme veya sonuç kümesinde kaydırma SQLFetchScroll İşlevi
Tek bir satır veya veri bloğunu yalnızca ileri yönde getirme SQLFetch İşlevi
Veri sütununun bir bölümünü veya tamamını getirme SQLGetData İşlevi

Ayrıca Bkz.

ODBC API Başvurusu
ODBC Üst Bilgi Dosyaları

SQLGetData
Kullanarak Çıktı Parametrelerini Alma