Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual2.doc
Скачиваний:
5
Добавлен:
07.03.2016
Размер:
3.31 Mб
Скачать

Void cado6Dlg::OnFilter()

{

if(pRecordset->GetState()==0)return;

// відв’язка елемента керування від pRecordset

m_datagrid1.SetRefDataSource(0);

CString str_query;

m_editquery.GetWindowText(str_query);

struct _timeb timebuffer;

_ftime( &timebuffer );

double nach = timebuffer.time+timebuffer.millitm/1000.0;

try

{

pRecordset->Filter = (_variant_t)str_query;

_ftime( &timebuffer );

double conec = timebuffer.time+timebuffer.millitm/1000.0;

CString vr_zap;

vr_zap.Format(" Фильтр установлен за %f сек ",

conec - nach);

//прив'язка елемента керування до pRecordset

m_datagrid1.SetRefDataSource(pRecordset);

MessageBox(vr_zap);

}

catch(_com_error &ce)

{

//прив'язка елемента керування до pRecordset

m_datagrid1.SetRefDataSource(pRecordset);

Doc->ErrMessage(ce);

m_editquery.SetFocus ();

}

}

Властивість Filter об'єкта Recordset приймає значення полів із заданими умовами. Можуть застосовуватися оператори відношення >, <, >=, <=, <>, =, а також порозрядні оператори AND, OR, NOT і т.д. Також як вхідний параметр може бути масив закладок відібраних записів.

Для того щоб зняти фільтр, необхідно властивості Filter встановити порожнє значення:

pRecordset->Filter = "";

Як й у випадку із сортуванням, до виконання фільтрації записів необхідно відв'язати елемент керування від набору, а потім при виконанні фільтра або при виникненні помилки – прив'язати заново.

Відновлення або перечитання набору записів відбувається у функції відгуку OnVozvrat() (кнопка <Возврат>), текст якої наведений нижче.

// Повернення - перечитування набору Recordset –

// кнопка <Возврат>

Void cado6Dlg::OnVozvrat()

{

if(pRecordset->GetState()==0)return;

struct _timeb timebuffer;

_ftime( &timebuffer );

double nach = timebuffer.time+timebuffer.millitm/1000.0;

//Відв’язка об'єкта Recordset від елемента керування

m_datagrid1.SetRefDataSource(0);

//Скидання сортування й фільтрації даних

pRecordset->Sort = "";

pRecordset->Filter = "";

((CButton*)GetDlgItem(IDC_CHECK_SORT))->SetCheck (0);

m_editquery.SetWindowText("");

//Прив'язка об'єкта Recordset до елемента керування

m_datagrid1.SetRefDataSource(pRecordset);

pRecordset->Requery (-1); // перечитати набір

_ftime( &timebuffer );

double conec = timebuffer.time+timebuffer.millitm/1000.0;

CString vr_zap;

vr_zap.Format("Обновление записей выполнено за %f сек ",

conec - nach);

MessageBox(vr_zap);

}

У даній функції заново перечитується набір з використанням методу Requery(). Для того щоб повернути початковий набір, необхідно відв'язати об'єкт Recordset від елемента керування Datagrid, після чого зняти сортування й фільтрацію записів.

Увага!!! При використанні методу Requery(-1) закриваються всі індекси й поточні настроювання, пов'язані з даним об'єктом Recordset. У тому випадку, якщо було встановлене сортування записів, то після створення нового об'єкта Recordset сортування буде виконане автоматично - тобто заново будуть створюватися тимчасові індекси. При використанні цього методу коректно перечитуються закладки (Bookmark). Його доцільно застосовувати після видалення однієї або декількох записів. Після застосування методу Requery() властивість Bookmark буде відповідати фізичному номеру запису в заданому наборі.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]