Aracılığıyla paylaş


CRecordset::Open

Tablo alma veya Recordset'i temsil eden sorgusu gerçekleştiren bir recordset açar.

virtual BOOL Open( 
   UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, 
   LPCTSTR lpszSQL = NULL, 
   DWORD dwOptions = none  
);

Parametreler

  • nOpenType
    Varsayılan değeri kabul afx_db_use_default_type, ya da aşağıdaki değerleri kullanın enum OpenType:

    • CRecordset::dynaset bir recordset ile çift yönlü kaydırma.Üyelik ve sipariş kayıtları, Recordset'in açılması, ancak veri değerleri için diğer kullanıcılar tarafından yapılan değişiklikler aşağıdaki getirme işlemi görülebilir belirlenir.Kümelere anahtar kümesi kullanımlı bağlanım da verilir.

    • CRecordset::snapshot çift yönlü kaydırma ile statik bir kayıt kümesi.Bir recordset açıldıında üyelik ve kayıtların sırası belirlenir; kayıtlar getirildi, veri değerleri belirlenir.Diğer kullanıcıların yaptığı değişiklikleri recordset kapatılıp yeniden açıldığında kadar görünmez.

    • CRecordset::dynamic bir recordset ile çift yönlü kaydırma.Üyelik, sıralama ve veri değerleri için diğer kullanıcılar tarafından yapılan değişiklikler aşağıdaki getirme işlemi görülebilir.Not birçok odbc sürücüsü bu tür bir Recordset'i desteklemez.

    • CRecordset::forwardOnly sadece ileri kaydırma ile salt okunur bir kayıt kümesi.

      İçin CRecordset, varsayılan değer olan CRecordset::snapshot.Varsayılan değer mekanizması hem de odbc ile etkileşimde bulunmak Visual C++ sihirbazları sağlar CRecordset ve dao CDaoRecordset, farklı varsayılan ayarlar vardır.

    Bu recordset türleri hakkında daha fazla bilgi için bkz: makale Kayıt kümesi (odbc).İlgili bilgiler için "Kullanarak blok ve kaydırılabilir imleçler" makalesine bakın Windows SDK.

    Uyarı notuUyarı

    İstenen türü desteklenmiyor, çerçeve bir istisna atar.

  • lpszSQL
    Aşağıdakilerden birini içeren bir dize işaretçisi:

    • A null işaretçisi.

    • Bir tablonun adı.

    • Bir sql seçin deyimi (isteğe bağlı olarak bir sql ile burada veya order by yan tümcesi).

    • A call (saklı yordam) önceden tanımlanmış bir sorgu adını belirleyen ifade.Kaşlı ayraç arasında boşluk koymayın dikkatli olun ve call anahtar sözcüğü.

    Bu dize hakkında daha fazla bilgi için bkz: tablo ve ClassWizard'ın rolü açıklamalar altında tartışılması.

    [!NOT]

    Sonuç kümesi sütun sırası rfx eşleşmesi gerekir ya da Bulk rfx işlev çağrıları, DoFieldExchange veya DoBulkFieldExchange Geçersiz Kıl işlevini.

  • dwOptions
    Aşağıda listelenen değerleri birleşimi belirtebileceğiniz bir bit maskesi.Bunlardan bazıları karşılıklı olarak birbirini dışlar.Varsayılan değer yok.

    • CRecordset::none seçenekler kümesi yok.Bu parametre değeri diğer değerleri ile karşılıklı olarak birbirini dışlar.Varsayılan olarak, recordset ile güncelleştirilebilir düzenleme veya silmek ve ile yeni kayıtlar ekleme izin verir AddNew.Bağlı veri kaynağı üzerinde açık olarak Güncelleştirilebilirlik nOpenType , belirlediğiniz seçenek.En iyileştirme toplu eklemeleri için kullanılamaz.BULK satır getiriliyor gerçekleştirilmez.Silinen kayıtlar recordset gezinti sırasında Atlanan değil.Yer imleri kullanılabilir değil.Otomatik kirli alan denetimi gerçekleştirilir.

    • CRecordset::appendOnly izin vermeyin düzenleme veya silmek kayıt kümesinde.İzin AddNew sadece.Bu seçenek ile karşılıklı olarak birbirini dışlar, CRecordset::readOnly.

    • CRecordset::readOnly kayıt kümesi salt okunur olarak açar.Bu seçenek ile karşılıklı olarak birbirini dışlar, CRecordset::appendOnly.

    • CRecordset::optimizeBulkAdd aynı anda çok sayıda kayıt ekleme en iyi duruma getirmek için hazırlanmış bir sql deyimi kullanın.Yalnızca odbc API işlevini kullanmıyorsanız, geçerli SQLSetPos kayıt güncelleştirilecek.Hangi alanların kirli olarak işaretlenmiş ilk güncelleştirme belirler.Bu seçenek ile karşılıklı olarak birbirini dışlar, CRecordset::useMultiRowFetch.

    • CRecordset::useMultiRowFetchTek getirme işlemde alınması birden çok satıra izin vermek için satır toplu getiriliyor uygular.Bu, performansı artırmak için tasarlanmış gelişmiş bir özelliğidir; Bununla birlikte, toplu kayıt alan değiş ClassWizard tarafından desteklenmiyor.Bu seçenek ile karşılıklı olarak birbirini dışlar, CRecordset::optimizeBulkAdd.Belirttiğiniz unutmayın CRecordset::useMultiRowFetch, seçenek CRecordset::noDirtyFieldCheck otomatik olarak açılır (çift arabelleğe alma kullanılamaz); salt ileri kayıt kümeleri, seçenek üzerinde CRecordset::useExtendedFetch otomatik olarak açılır.Makaleyi satır toplu alma hakkında daha fazla bilgi için bkz: Recordset: getiriliyor kayıtları toplu (odbc).

    • CRecordset::skipDeletedRecords kayıt kümesi içinde gezinirken tüm silinen kayıtlar atlanacak.Bu belirli göreli fetches performansını yavaşlatır.Bu seçenek yalnızca ileri kayıt kümeleri üzerinde geçerli değil.Çağırırsanız, Taşı ile nRows parametre 0 olarak ayarlayın ve CRecordset::skipDeletedRecords seçenek kümesi, Taşı onaylama.Dikkat CRecordset::skipDeletedRecords benzer şekilde, sürücü ambalaj, silinen satırların hangi anlamına gelir, recordset'ten kaldırılır.Kayıtları sürücü paketleri, ancak daha sonra sildiğiniz kayıtlar vazgeçmek; Kayıt kümesi açıkken, diğer kullanıcıların sildiği kayıtlara atlamak değildir.CRecordset::skipDeletedRecords diğer kullanıcılar tarafından silinmiş satırları atlar.

    • CRecordset::useBookmarks yer işaretleri kayıt kümesinde desteklenen kullanabilir.Yer imleri, veri alma yavaş ancak veri gezinti performansını artırmak.Salt ileri kayıt kümeleri üzerinde geçerli değil.Makalede daha fazla bilgi için bkz: Recordset: yer imleri ve mutlak Pozisyonlar (odbc).

    • CRecordset::noDirtyFieldCheck otomatik kirli alan denetimi (çift arabelleğe kapalı) açın.Bu performans artar; Ancak, el ile alanları olarak kirli çağırarak işaretlemelisiniz SetFieldDirty ve SetFieldNull üye işlevler.Bu çift arabelleğe alma sınıfta Not CRecordset sınıfında çift arabelleğe almak için benzer CDaoRecordset.Bununla birlikte, CRecordset, tek tek alanların; çift arabelleğe alma işlevini etkinleştiremiyorum tüm alanlar için etkinleştirmek veya tüm alanları için devre dışı bırakın.Seçeneğini belirtirseniz, Not CRecordset::useMultiRowFetch, sonra CRecordset::noDirtyFieldCheck otomatik olarak; yanar Ancak, SetFieldDirty ve SetFieldNull bulk satır getiriliyor uygulayan kayıt kümeleri üzerinde kullanılamaz.

    • CRecordset::executeDirect hazırlanmış bir sql deyimini kullanmayın.Geliştirilmiş performans için bu seçeneği belirleyin Requery üye işlevi asla denir.

    • CRecordset::useExtendedFetch uygulamak SQLExtendedFetch yerine SQLFetch.Bulk satır salt ileri kayıt kümeleri getiriliyor uygulamak için tasarlanmıştır.Bu seçeneği belirlerseniz, CRecordset::useMultiRowFetch salt ileri Recordset, daha sonra CRecordset::useExtendedFetch otomatik olarak açılır.

    • CRecordset::userAllocMultiRowBuffers kullanıcı için veri depolama arabellek ayırır.Bu seçenek ile birlikte kullanmak CRecordset::useMultiRowFetch kendi depolama; ayırmak istiyorsanız Aksi halde, çerçeve otomatik olarak gerekli depolama ayıracaktır.Makalede daha fazla bilgi için bkz: Recordset: getiriliyor kayıtları toplu (odbc).O belirten Not CRecordset::userAllocMultiRowBuffers belirtmeden CRecordset::useMultiRowFetch başarısız bir onaylama işlemi hatasına neden olur.

Dönüş Değeri

Sıfır olmayan if CRecordset başarıyla nesne açıldı; Aksi halde 0 if CDatabase::Open (çağrılmışsa) 0 değerini döndürür.

Notlar

Kayıt kümesi tarafından tanımlanan sorguyu çalıştırmak için bu üye işlevi çağırmalıdır.Önce arama açık, recordset nesnesinin oluşturmalıdır.

Bu kayıt kümesinin veri kaynağına bağlanmak için arama önce Recordset'in nasıl oluşturduğunuza bağlıdır açık.Aktarýrsanýz, bir CDatabase nesne veri kaynağına bağlı olmayan recordset kurucusuna Bu üye işlevini kullanan GetDefaultConnect database nesnesi açma girişiminde bulunmak için.Aktarýrsanýz, null yapıcı recordset yapıcısına yapıları bir CDatabase nesnesini, ve açık veritabanı nesnesi bağlanma girişiminde bulunur.Recordset ve connection değişen bu koşullarda kapatılması ile ilgili ayrıntılar için bkz: Kapat.

[!NOT]

Bir veri kaynağına erişim bir CRecordset nesne her zaman paylaşılır.Aksine CDaoRecordset sınıfı, kullanamaz bir CRecordset bir veri kaynağına özel erişimle açmak için nesne.

Aradığınızda açık, genellikle bir sql sorgusu seçin deyimi, aşağıdaki tabloda gösterilen ölçütlere göre kayıtları seçer.

LpszSQL parametresinin değeri

Seçilen kayıtları tarafından belirlenir

Örnek

NULL

Tarafından döndürülen dize GetDefaultSQL.

 

sql tablo adı

Tablo listesinde, tüm sütunlar DoFieldExchange veya DoBulkFieldExchange.

"Customer"

Önceden tanımlanmış bir sorgu (saklı yordam) adı

Sorgu geri dönmek için tanımlanmış sütunlar.

"{call OverDueAccts}"

SEÇİN sütun listesi from Tablo listesi

Belirtilen tablo sütunlarından belirtilen.

"SELECT CustId, CustName FROM

Customer"

Uyarı notuUyarı

Bilgisayarınıza sql dizesi fazladan boşluk koymayın dikkatli olun.Örneğin, kaşlı ayraç arasında boşluk ekle ve ÇAĞRISI anahtar sözcüğü, mfc bir tablo adı olarak sql dizesi hatalı yorumlayan ve içine birleştirme bir seçin bir özel durumu oluşturuldu içinde sonuçlanacak deyimi.Önceden tanımlanmış sorgunuz bir çıkış parametresi kullanıyorsa, benzer şekilde, kaşlı ayraç arasında boşluk ekle değil ve '?' simgesi.Son olarak, kaşlı ayraç önce boşluk eklememeniz gerekir bir call deyimi veya daha önce seçin bir anahtar sözcük bir seçin ifadesi.

Her zamanki gibi geçmesine yordamdır null için açık; Bu durumda, açık çağrıları GetDefaultSQL.Bir türetilmiş kullanıyorsanız, CRecordset sınıfı GetDefualtSQL ClassWizard içinde belirtilen tablo adlarını verir.Bunun yerine diğer bilgileri belirtmek lpszSQL parametresi.

Ne olursa olsun, pass, açık sorgu için son bir sql dizesi oluşturur (sql dizesi olabilir burada ve order by yan tümceleri eklenmiş için lpszSQL , geçirilen dize) ve sonra sorguyu yürütür.Çağrılarak oluşturulan dize incelemek GetSQL sonra arama açık.Recordset'in bir sql bildirisi oluşturur ve kayıtları seçer hakkında ek ayrıntılar için bkz: makale Recordset: nasıl kayıt kümeleri seçmek kayıtları (odbc).

Recordset sınıf alanı veri üyeleri seçili veri sütunları bağlıdır.Herhangi bir kayıt döndürülürse, ilk kayıt geçerli kayıt olur.

Filtre veya sıralama, recordset seçeneklerini ayarlamak istiyorsanız, recordset nesnesi oluşturmak ancak siz aramadan önce belirtmeniz açık.Sonra recordset içindeki kayıt yenilemek istiyorsanız, kayıt kümesi açıksa, çağrı Requery.

Ek örnekler de dahil olmak üzere daha fazla bilgi için bkz: makaleleri Kayıt kümesi (odbc), Recordset: nasıl kayıt kümeleri seçmek kayıtları (odbc), ve Recordset: oluşturma ve kayıt kümeleri (odbc) kapanış.

Özel Durumlar

Bu yöntem türü istisnalar atabilirsiniz CDBException * ve CMemoryException*.

Örnek

Aşağıdaki kod, farklı formları örnekler açık çağırın.

// rsSnap, rsLName, and rsDefault are CRecordset or CRecordset-derived 
// objects

// Open rs using the default SQL statement, implement bookmarks, and turn 
// off automatic dirty field checking
rsSnap.Open(CRecordset::snapshot, NULL, CRecordset::useBookmarks | 
   CRecordset::noDirtyFieldCheck);

// Pass a complete SELECT statement and open as a dynaset
rsLName.Open(CRecordset::dynaset, _T("Select L_Name from Customer"));

// Accept all defaults
rsDefault.Open();

Gereksinimler

Başlık: afxdb.h

Ayrıca bkz.

Başvuru

CRecordset sınıfı

Hiyerarşi grafik

CRecordset::CRecordset

CRecordset::Close

CRecordset::GetDefaultSQL

CRecordset::GetSQL

CRecordset::m_strFilter

CRecordset::m_strSort

CRecordset::Requery