Анализ использования getrows и getstring для объектов набора записей в asp. Друзья, которым это необходимо, могут обратиться к методу GetRows.
Копирует несколько записей объекта Recordset в массив.
грамматика
Скопируйте код кода следующим образом:
массив = набор записей.GetRows(строки, начало, поля)
возвращаемое значение
Возвращает двумерный массив.
параметр
Строки Необязательное длинное выражение, определяющее количество извлекаемых записей. Значение по умолчанию — аджетровсрест (-1).
Start Необязательный, строковый или длинный, вычисляет закладку записи в начале операции GetRows. Также можно использовать следующие значения BookmarkEnum.
Постоянное описание
AdBookmarkCurrent начинается с текущей записи.
AdBookmarkFirst начинается с первой записи.
AdBookmarkLast начинается с последней записи.
Поля — необязательный тип варианта, представляющий одно имя поля, последовательную позицию, массив имен полей или последовательный номер позиции. ADO возвращает данные только из этих полей.
иллюстрировать
Используйте метод GetRows для копирования записей из набора записей в двумерный массив. Первый нижний индекс идентифицирует поле, а второй — номер записи. Переменная массива автоматически примет правильный размер, когда метод GetRows вернет данные.
Если вы не укажете значение для параметра Rows, метод GetRows автоматически получит все записи в объекте Recordset. Если запрошено больше записей, чем доступно, GetRows возвращает только количество доступных записей.
Если объект Recordset поддерживает закладки, вы можете указать запись, с которой метод GetRows начнет извлекать данные, передав значение свойства Bookmark записи.
Чтобы ограничить поля, возвращаемые вызовом GetRows, вы можете передать одно имя/номер поля или массив имен/номеров полей в параметре Fields.
После вызова GetRows следующая непрочитанная запись становится текущей записью, а если записей больше нет, для свойства EOF устанавливается значение True.
Метод GetString
При запросе к базе данных для отображения таблиц мы часто используем цикл Do While()...Loop или For...Next для отображения таблиц, поэтому, когда мы хотим запросить большой объем данных, это неизбежно будет медленнее. На данный момент мы можем использовать метод GetString(), предоставляемый объектом набора записей (ADO необходимо обновить до версии 2.0).
грамматика
Скопируйте код кода следующим образом:
Str=objRecordset.GetString(format,n,coldel,rowdel,nullexpr)
Описание параметра:
objRecordset: открытый объект набора записей;
формат: необязательный, обычно принимает значение по умолчанию (значение по умолчанию — 2)
n: Необязательно, количество отображаемых записей, значение по умолчанию — отображать все.
coldel: необязательно, разделитель столбцов
rowdel: необязательно, разделитель строк
nullexpr: необязательно, этот параметр используется для заполнения пустых полей!
С помощью метода GetString мы можем использовать только один Response.Write для отображения всего вывода. Это похоже на цикл DO... LOOP, который может определить, является ли набор записей EOF.
Используя этот метод, вы можете автоматически выводить строки в цикле без необходимости проходить циклы while или for, пока объект RS создан и выполняются соответствующие операции, независимо от того, возвращает ли он одну или несколько записей или даже пустую. записи, getstring Работайте как обычно.
Чтобы сгенерировать HTML-таблицу из результатов набора записей, нам нужно учитывать только 3 из 5 параметров GetString: coldel (код HTML, разделяющий столбцы набора записей), rowdel (код HTML, разделяющий строки набора записей). набор записей) и nullexpr (HTML-код, который должен генерироваться, когда текущая запись пуста).
Скопируйте код кода следующим образом:
<Граница ТАБЛИЦЫ=1>
<ТР><ТД>
<% = Response.Write rs.GetString(, , </TD><TD>, </TD></TR><TR>, ) %>
</ТАБЛИЦА>
Результат HTML, записанный следующим образом:
Скопируйте код кода следующим образом:
<Граница ТАБЛИЦЫ=1>
<ТР>
<TD>строка1, значение поля1</TD>
<TD>значение строки1, поля2</TD>
</TR>
<ТР>
<TD>строка2, значение поля1</TD>
<TD>строка2, значение поля2</TD>
</TR>
</ТАБЛИЦА>
Здесь есть ОШИБКА, давайте посмотрим на создание выпадающего меню:
Скопируйте код кода следующим образом:
<%
Установите RS = conn.Execute (выберите значение, текст ИЗ таблицы selectOptions или DER BY the Text)
optSuffix = </OPTION> и vbNewLine
valPrefix = <Значение ОПЦИИ ='
valSuffix = '>
opts = RS.GetString(, , valSuffix, optSuffix & valPrefix, --error--)
' Следующая строка - ключ к этому!
opts = Left(opts, Len(opts)-Len(valPrefix) )
Response.Write <Выбрать ...> и vbNewLine
Response.Write valPrefix & opts
Ответ.Запись </Select>
%>
Если вы хотите создать правильную таблицу и устранить ошибку, просто сделайте следующее:
Скопируйте код кода следующим образом:
<%
Установить RS = conn.Execute (выбрать * ИЗ таблицы)
tdSuffix = </TD> & vbNewLine & <TD>
trPrefix = <TR> & vbNewLine & <TD>
trSuffix = </TD> & vbNewLine & </TR> & vbNewLine & <TR> & vbNewLine
opts = RS.GetString(,, tdSuffix, trSuffix & trPrefix, --error--)
' Следующая строка - ключ к этому!
opts = Left(opts, Len(opts)-Len(trPrefix) )
Response.Write <TABLE Border=1 CellPadding=5> & vbNewLine
Response.Write trPrefix & opts
Response.Write </TABLE> и vbNewLine
%>
Давайте представим совершенно другой подход:
Скопируйте код кода следующим образом:
<%
SQL = Выберите '<OPTION Value=''',value,'''>',text,'</OPTION>' FROM table orDER BY text
Установите RS = conn.Execute(SQL)
Response.Write <Select> & vbNewLine & RS.GetString(,,,vbNewLine) & </Select>
%>
Вы когда-нибудь использовали его? . .
Вы это видели? Результаты могут быть возвращены непосредственно из запроса.
Сделав еще один шаг вперед, вы можете сделать это:
Скопируйте код кода следующим образом:
<%
SQL = выберите '<OPTION Value=''', значение & '''>' и текст & '</OPTION>' ИЗ таблицы или ОРДЕР ПО тексту
Установите RS = conn.Execute(SQL)
Response.Write <Select> & vbNewLine & RS.GetString(,,,vbNewLine) & </Select>
%>
Вот полный пример:
Вывод сценария:
711855 Среда 23 23.03.2005 1:33:37
711856 Среда 23 23.03.2005 1:23:00
711857 Среда 23 23.03.2005 1:26:34
711858 Среда 23 23.03.2005 1:33:53
711859 Среда 23 23.03.2005 1:30:36
Полный код ASP выглядит следующим образом:
Скопируйте код кода следующим образом:
<%
'Выбранные константы из adovbs.inc:
Константа adClipString = 2
' Объявите наши переменные... всегда хорошая практика!
Dim cnnGetString 'ADO-соединение
Dim rstGetString 'Набор записей ADO
Dim strDBPath ' Путь к нашему файлу базы данных Access (*.mdb)
Dim strDBData ' Строка, в которую мы сбрасываем все данные
Dim strDBDataTable ' Строка, в которую мы сбрасываем все данные
' только на этот раз мы строим таблицу
' MapPath к физическому пути к нашему файлу mdb.
strDBPath = Server.MapPath(db_scratch.mdb)
'Создание соединения с использованием OLE DB
Установите cnnGetString = Server.CreateObject(ADODB.Connection)
' Эта строка предназначена для примера базы данных Access:
'cnnGetString.Open Provider=Microsoft.Jet.OLEDB.4.0;Источник данных= & strDBPath & ;
' На самом деле мы используем SQL Server, поэтому вместо этого используем эту строку.
' Закомментируйте эту строку и раскомментируйте строку Access выше, чтобы
' поиграйте со сценарием на своем сервере.
cnnGetString.Open Provider=SQLOLEDB;Источник данных=10.2.1.214 _;
& Исходный каталог=образцы;Идентификатор пользователя=образцы;Пароль=пароль _;
& Connect Timeout=15;Сетевая библиотека=dbmssocn;
' Выполняем простой запрос с использованием объекта соединения.
' Сохраняем полученный набор записей в нашей переменной.
Установить rstGetString = cnnGetString.Execute (выбрать * С нуля)
' Вот тут-то и становится интересно... Обычно мы бы делали
' какой-то цикл, пока мы не наткнулись на последнюю запись в
' в наборе записей. На этот раз мы собираемся получить все данные.
' одним махом и записать его в строку, чтобы мы могли
' отключиться от БД как можно быстрее.
стрDBData = rstGetString.GetString()
' Поскольку я делаю это дважды для иллюстрации... я меняю положение
' в начале RS перед вторым вызовом.
рстGetString.MoveFirst
' На этот раз я прошу вернуть все обратно в формате таблицы HTML:
strDBDataTable = rstGetString.GetString(adClipString, -1, _
&</td><td>, </td></tr> & vbCrLf & <tr><td>, )
' Из-за моего ненасытного стремления к аккуратному HTML, я на самом деле
' затем обрезаем строку. Видите ли, GetString имеет только это значение.
' параметр для того, что происходит между строками, а не отдельный
' один для того, что разместить после последней строки.
' способа построения HTML-таблиц, это оставляет нам дополнительные
' <tr><td> после последней записи GetString помещает.
' целый разделитель в конце, так как в нем ничего нет
' else, чтобы поместить туда, и во многих ситуациях это работает нормально.
' С HTML это немного странно. Большинство разработчиков просто.
'закрой ряд и иди дальше, но я не смог себя заставить'
оставьте лишнюю строку... тем более, что в ней будет
' другое количество ячеек, чем все остальные.
Что я могу сказать... меня эти вещи беспокоят ;)
strDBDataTable = Left(strDBDataTable, Len(strDBDataTable) - Len(<tr><td>))
' Некоторые замечания по поводу .GetString:
' На самом деле метод принимает до 5 необязательных аргументов:
' 1. StringFormat — формат, в котором возвращается
' текст набора записей adClipString является единственным.
'действительное значение.
' 2. NumRows — количество возвращаемых строк по умолчанию.
' до -1, обозначающего все строки.
' 3. ColumnDelimiter — текст, который будет помещен между столбцами.
'По умолчанию используется символ табуляции
' 4. RowDelimiter — текст, помещаемый между строками.
'По умолчанию используется возврат каретки
' 5. NullExpr — выражение, которое будет использоваться, если значение NULL равно
' по умолчанию возвращается пустая строка.
' Закрываем наш набор записей и соединение и удаляем объекты.
' Обратите внимание, что я могу сделать это еще до того, как мы побеспокоимся о
'отображение любых данных!
rstGetString.Close
Установить rstGetString = Ничего
cnnGetString.Close
Установить cnnGetString = Ничего
' Отображать таблицу данных мне действительно не нужно.
' любое форматирование, поскольку вызов GetString сделал почти все
' для нас с точки зрения построения текста таблицы.
Response.Write <граница таблицы=1> и vbCrLf
Response.Write <tr><td>
Response.Write strDBDataTable
Response.Write </table> и vbCrLf
' К вашему сведению: вот формат вывода, который вы получите, если не сможете получить GetString
'без каких-либо параметров:
Response.Write vbCrLf & <p>Вот неформатированная версия:</p> & vbCrLf
Response.Write <pre> и vbCrLf
Response.Write strDBDataResponse.Write </pre> & vbCrLf
' Вот и все, ребята!
%>