DROP THE BASE! ADO И БАЗЫ БАННЫХ Pony (pony@xakep.ru) Спецвыпуск Xakep, номер #028, стр. 028-020-5 Что еще можно делать с объектом Recordset? 1) искать, фильтровать и сортировать записи (есть методы Recordset.Sort и Recordset.Find). Но лучше сортировать и фильтровать мусор еще на стадии открытия объекта Recordset; 2) Обновлять и добавлять записи, используя методы Recordset.AddNew и Recordset.Update. ДЛЯ СКОРОСТИ Есть еще один способ выдрать данные через ADO: используя объект Command. Зачем нужна еще одна фиговина, если можно выгрести данные и так? А для выполнения хранимых процедур с входными и выходными параметрами. Без подробностей, хранимая процедура - это откомпиленный SQL-запрос, который валяется на сервере. Процедура имеет входные и выходные параметры и выполняется сильно шустрее обычного запроса. Итак, замутим объект: Set cmd = Server.CreateObject("ADODB.Command"). Определяем активное соединение (к этому времени оно должно быть открыто): Set cmd.ActiveConnection = cnn Для того чтобы юзать хранимую процедуру с входными и выходными параметрами, надо эти параметры засадить в коллекцию Command.Parameter: Set param = cmd.CreateParameter (Name, Type, Direction, Size, Value) Все аргументы - необязательные, но для любопытных: аргумент Name - задает имя, аргумент Size - размер, аргумент Value - значение, а Type - тип параметра (ниже я дал только самые распространенные): adBigInt - 8-байтовое целое; adBinary - поле фиксированной длины для записи двоичных данных; adBoolean - булев тип. Значение True или False (1 или 0); adChar - строковая переменная до 255 символов длиной; adCurrency - поле валюты. 8 байт, 4 знака после запятой; adDate - поле даты. 8 байт. Содержит количество дней, прошедших с 30 декабря 1899 г; adDBDate - дата в формате (yyyymmdd); adDBTime - время в формате (hhmmss); adDBTimeStamp - поле даты и времени в формате (yyyymmddhhmmss) плюс доли секунды с точностью до одной миллиардной (во как!); adDecimal - численное значение с фиксированной точностью и размером; adDouble - 8-байтовое действительное значение с плавающей запятой; adGUID - глобальный идентификатор GUID; adInteger - 4-байтовое целое; adSingle - действительное значение с плавающей запятой. Аргумент Direction задает направление, равен одной из пяти констант: adParamUnknown - направление неизвестно (лучше не использовать); adParamInput - входной параметр (значение по умолчанию); adParamOutput - выходной параметр; adParamInputOutput - одновременно входной и выходной параметры; adParamReturnValue - возвращаемое значение. Перед выполнением надо задать тип выполняемой команды: cmd.CommandType = adCmdStoredProc и имя выполняемой хранимой процедуры: cmd.CommandText = Имя_Хранимой_Процедуры И, наконец, выполняем команду: Set recordset = command.Execute( RecordsAffected, Parameters, Options ) или command.Execute RecordsAffected, Parameters, Options И опять все аргументы не обязательны. КОНЧАЙ РАБОТУ! Когда закрывается соединение? В нескольких случаях: 1) если прямо убить соединение методом Close; 2) если ссылке на объект Connection присвоить значение nothing; |