Мы можем использовать SQL оператор для доступа к данным и формирования набора. Мы это делали вот так:
cDaoRset = new CExtRecordSet(&cDaoDB); cDaoRset->Open( AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM TABLE1 ");
Запрос SELECT * FROM TABLE1 выбирает все колонки из таблицы Table1. Мы с Вами работали только с одной колонкой. Выбор одной колонки экономит время работы и память. Как выбрать одну колонку ??? Вместо * указать ее.
cDaoRset->Open( AFX_DAO_USE_DEFAULT_TYPE,"SELECT Name FROM TABLE1");
Будет иметь тот же результат. А больше ??? Можно и больше, если у вас конечно в таблице больше. Вот так:
cDaoRset->Open( AFX_DAO_USE_DEFAULT_TYPE,"SELECT Name,ID FROM TABLE1");
ID у меня есть в таблице.
Итак, общий вид такой:
SELECT Pole1,Pole2 FROM INPUT_TABLE
Если все, то *. Можно при выборе сразу и указать сортировку с помощью ORDER BY. Вот так:
cDaoRset->Open( AFX_DAO_USE_DEFAULT_TYPE,"SELECT Name,ID FROM TABLE1 ORDER BY Name");
Общий вид:
SELECT Pole1,Pole2 FROM INPUT_TABLE ORDER BY Pole_Sort
При создании SQL оператора вы можете ошибиться в синтаксисе. Ничего страшного, получите сообщение об ошибке и пустой набор. Вот такую примерно:
А сортировать по двум полям ??? То же можно через запятую:
SELECT Pole1,Pole2 FROM INPUT_TABLE ORDER BY Pole_Sort1 , PoleSort2
Можно накладывать условия на результирующий набор. Вот пример:
cDaoRset->Open( AFX_DAO_USE_DEFAULT_TYPE,"SELECT Name,ID FROM TABLE1 WHERE ID > 20 ORDER BY Name");
Выборку выполняет WHERE поле условие значение. Для сложного условия можно использовать AND, OR и сравнения:
< > = >= <= <>