Страница 9 из 17 Фильтры, сортировка CRecordset Если тщательно разобраться с SQL оператором SELECT, то с помощью него можно получить практически любые виды от исходной таблицы. Но этот способ не единственный. Даже если с помощью данного оператора Вы отсортировали записи, всегда возникает необходимость допустим их отсортировать по полю или наложить фильтр. Это можно сделать и на основе доступных переменных класса CRecordset. Для накладывания фильтра в классе CRecordset есть переменная m_strFilter. В эту переменную можно поместить фильтр и вызвать функцию обновления источника строк. void CDatebaseDlg::OnOpen() { CRecordset cr(NULL); try { cr.Open(CRecordset::dynaset, "SELECT * FROM TABLE1"); cr.m_strFilter ="Count<100"; cr.Requery(); CDBVariant var; short index=1; cr.Move(0); cr.GetFieldValue(index,var); AfxMessageBox(*var.m_pstring); cr.Close(); } catch(CDBException cdb) { AfxMessageBox(cdb.m_strStateNativeOrigin); } }
Обратите внимание, что я обьявил таблицу как dynaset, что позволяет проводить подобные операции, в будущем эта опция разрешит добавлять, редактировать и удалять записи. В фильтр я поместил строку, которая указывает, что поле должно быть меньше 100. Если вы запустите, то увидите фамилию Vasilev, так как он единственный, который имеет это поле меньше 100. После задания фильтра я вызвал функцию Requery, которая обновила источник строк на основе фильтра. Не забывайте её использовать. Для сортировки тоже есть переменная и она носит имя m_strSort, в ней молжно указать поле ,по которому будет произведена сортировка. void CDatebaseDlg::OnOpen() { CRecordset cr(NULL); try { cr.Open(CRecordset::dynaset, "SELECT * FROM TABLE1"); cr.m_strSort="Family"; cr.Requery(); CDBVariant var; short index=1; cr.Move(0); cr.GetFieldValue(index,var); AfxMessageBox(*var.m_pstring); cr.Close(); } catch(CDBException cdb) { AfxMessageBox(cdb.m_strStateNativeOrigin); } }
При работе этого кода первым будет Artem, хотя в исходной таблице он последний :-(. Логика точно такая же, как и выше в примере. Установка поля сортировки и обновление. |