Mengambil data
Setelah membuka sumber data, sesi, dan objek set baris, Anda dapat mengambil data. Bergantung pada jenis aksesor yang Anda gunakan, Anda mungkin perlu mengikat kolom.
Untuk mengambil data
Buka set baris menggunakan perintah Buka yang sesuai.
Jika Anda menggunakan
CManualAccessor
, ikat kolom output jika Anda belum melakukannya. Contoh berikut diambil dari sampel DBViewer . Untuk mengikat kolom, panggilGetColumnInfo
, lalu buat aksesor dengan pengikatan, seperti yang ditunjukkan dalam contoh berikut:// From the DBViewer Sample CDBTreeView::OnQueryEdit // Get the column information ULONG ulColumns = 0; DBCOLUMNINFO* pColumnInfo = NULL; LPOLESTR pStrings = NULL; if (rs.GetColumnInfo(&ulColumns, &pColumnInfo, &pStrings) != S_OK) ThrowMyOLEDBException(rs.m_pRowset, IID_IColumnsInfo); struct MYBIND* pBind = new MYBIND[ulColumns]; rs.CreateAccessor(ulColumns, &pBind[0], sizeof(MYBIND)*ulColumns); for (ULONG l=0; l<ulColumns; l++) rs.AddBindEntry(l+1, DBTYPE_STR, sizeof(TCHAR)*40, &pBind[l].szValue, NULL, &pBind[l].dwStatus); rs.Bind();
Tulis perulangan
while
untuk mengambil data. Dalam perulangan, panggilMoveNext
untuk memajukan kursor dan menguji nilai pengembalian terhadap S_OK, seperti yang ditunjukkan dalam contoh berikut:while (rs.MoveNext() == S_OK) { // Add code to fetch data here // If you are not using an auto accessor, call rs.GetData() }
Dalam perulangan
while
, Anda dapat mengambil data sesuai dengan jenis aksesor Anda.Jika Anda menggunakan kelas CAccessor , Anda harus memiliki catatan pengguna yang berisi anggota data. Anda dapat mengakses data menggunakan anggota data tersebut, seperti yang diperlihatkan dalam contoh berikut:
while (rs.MoveNext() == S_OK) { // Use the data members directly. In this case, m_nFooID // is declared in a user record that derives from // CAccessor wsprintf_s("%d", rs.m_nFooID); }
Jika Anda menggunakan
CDynamicAccessor
kelas atauCDynamicParameterAccessor
, Anda dapat mengambil data dengan menggunakan fungsiGetValue
akses danGetColumn
, seperti yang ditunjukkan dalam contoh berikut. Jika Anda ingin menentukan jenis data yang Anda gunakan, gunakanGetType
.while (rs.MoveNext() == S_OK) { // Use the dynamic accessor functions to retrieve your data. ULONG ulColumns = rs.GetColumnCount(); for (ULONG i=0; i<ulColumns; i++) { rs.GetValue(i); } }
Jika Anda menggunakan
CManualAccessor
, Anda harus menentukan anggota data Anda sendiri, mengikatnya sendiri, dan mengaksesnya secara langsung, seperti yang ditunjukkan dalam contoh berikut:while (rs.MoveNext() == S_OK) { // Use the data members you specified in the calls to // AddBindEntry. wsprintf_s("%s", szFoo); }