Работаем с текущим. Только изменения внутри IsOpen.
if (db->IsOpen()) { CDaoRecordset *CRec; CRec=new CDaoRecordset(db); CDaoTableDef *CTab; CTab=new CDaoTableDef(db); CTab->Open("TABLE1"); CRec->Open(CTab); int y=CRec->GetRecordCount(); cout << y << endl; for (int x=0;x < y;x++) { COleVariant CValue; CRec->GetFieldValue("Count",CValue); long d=CValue.lVal; CRec->GetFieldValue("Family",CValue); CString s=CValue.pbVal; cout << d << " " << s << endl; CRec->MoveNext(); } CRec->Close(); CTab->Close(); db->Close(); }
Для работ с записями нам надо открыть обьект CDaoRecordset на базе обькета CDaoTableDef. Потом мы получаем количество записей.
COleVariant обьект хамелеон. Он создан специально для того, чтобы в нем можно было хранить разные данные. Вот в этот обьект мы и получаем данные поля. В предыдущем шаге мы с вами получали типы полей, в принципе на основе этого необходимо извлекать данные.
GetFieldValue получает данные по имени поля или индексу. Данные получаются из текущего поля. При открытии записей указатель(кусор) стоит в начале записи. Для перехода к следующей я использовал MoveNext.
Использование DAO хорошо тем, что этот механизм доступа к базе данных применяется часто например для офисного программирования VBA. Пример приведен ниже.
Sub test() Dim db As Database Set db = OpenDatabase("d:\db1.mdb") Dim rc As Recordset Set rc = db.OpenRecordset("TABLE1") Do While Not rc.EOF MsgBox (rc.Fields(1)) rc.MoveNext Loop End Sub
Со временем я продолжу эти шаги. А для первого знакомства этого достаточно.
Создай обьект открой объект таблицы:
CRec->Open(CTab);
Получи данные на основе обьекта COleVariant:
COleVariant CValue; CRec->GetFieldValue("Count",CValue);
Извлеки данные на основе типа данных:
long d=CValue.lVal;