|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
13.3.5 Сортировка и фильтрация данныхСортировка и фильтрация данных в Recordset из VBScript, свойства Sort и Filter, ограничения сортировки и фильтрации данных Данные в Recordset помещаются в том порядке, как они пришли из источника. Если специальный порядок сортировки в запросе не указан, то данные возвращаются в соответствии с параметрами источника данных (например, на SQL Server они будут по умолчанию упорядочены по кластерному индексу, который по умолчанию создается для первичного ключа). Можно произвести сортировку на сервере (указав в запросе выражение ORDER BY), а можно - сортировку на клиенте (при помощи свойства Sort объекта Recordset). Общее правило выглядит так: если есть возможность, всегда нужно выполнять сортировку на сервере. Сервер намного лучше оптимизирован для выполнения подобных операций, на нем обычно больше оперативной памяти и процессорных ресурсов. На клиенте сортировку выполнять следует только тогда, когда это невозможно сделать на сервере (например, вы получаете данные от хранимой процедуры, в тексте которой сортировка не предусмотрена). Однако, в принципе, сортировка в Recordset менее ресурсоемка, чем могла бы быть (данные физически не перемещаются, только создается новый индекс для поля, по которому производится сортировка), поэтому ее вполне можно использовать. Применение свойства Sort связано с серьезным ограничением: его можно использовать только тогда, когда курсор открыт на клиенте. Кроме того, при открытии соединения с базами данных SQL Server или Microsoft Access по OLE DB применение этого свойства специально запрещено (чтобы фильтрация производилась на сервере). Работа с этим свойством выглядит очень просто: rs.Sort = "CompanyName" При этом, то что передается этому свойству, должно быть названием столбца (то есть именем объекта Field) в Recordset. Можно передавать несколько названий столбцов и порядок сортировки: rs.Sort = "Country ASC, CompanyName DESC" Recordset вначале будет отсортирован по стране, а потом - по имени компании в убывающем порядке ( по умолчанию используется ASC - по возрастанию). Чтобы отменить сортировку (и вернуться к записям в том порядке, в котором они были возвращены с источника), достаточно присвоить этому свойству пустое значение: rs.Sort = "" В Recordset записи можно фильтровать. Отфильтрованные записи остаются в Recordset, но являются невидимыми при выполнении операции перемещения и поиска и курсор на отфильтрованных записях не установить. В принципе, всего можно обойтись фильтрацией записей в запросе к источника или вставить дополнительные проверки при операциях перемещения, но иногда с синтаксической точки зрения удобнее использовать именно фильтрацию. Для фильтрации используется свойство Filter. Это свойство может принимать три типа значений: · строковое значение, по синтаксису аналогичное передаваемому методу Find: rs.Filter = "LastName = 'Smith' AND FirstName = 'John'" Можно использовать оператор Like с подстановочными символами (только * и %). Отличие от Find заключается в том, что в Find просто устанавливается курсор на первую найденную подходящую запись, а в Filter все неподходящие становятся невидимыми. · массив закладок; · несколько (5) специальных значений - все конфликтующие записи, записи, ожидающие сохранения на источнике и т.п. Снять фильтрацию можно точно так же, как и сортировку: rs.Filter = ""
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||