Шаг 17 - O SQL и CDaoRecordset

Мы можем использовать 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 у меня есть в таблице.

17_1.gif (1945 b)

Итак, общий вид такой:

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 оператора вы можете ошибиться в синтаксисе. Ничего страшного, получите сообщение об ошибке и пустой набор. Вот такую примерно:

17_2.gif (1444 b)

А сортировать по двум полям ??? То же можно через запятую:

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 и сравнения:

<
>
=
>=
<=
<>

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 11.03.2001