C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 9 - Фильтры, сортировка CRecordset / ODBC / Visual C++

Шаг 9 - Фильтры, сортировка CRecordset

Для испытаний данного шага Вам лучше создать записи, как показанно ниже. Это будет проще и результат понятно как получается.

9_1.gif (2338 b)

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


| |
Автор Каев Артем.
[AD]