Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #28, МАРТ 2003 г.

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;

Назад на стр. 028-020-4  Содержание  Вперед на стр. 028-020-6