Использование ODBC в Visual C++ - Фильтры, сортировка CRecordset

ОГЛАВЛЕНИЕ

Фильтры, сортировка 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, хотя в исходной таблице он последний :-(. Логика точно такая же, как и выше в примере. Установка поля сортировки и обновление.