Получение данных с помощью объекта Recordset

Объект ADODB.Recordset хранит в себе записи, полученные из таблиц реляционных баз данных (таких как MS SQL Server, Oracle, MySQL и тд). Помимо коллекции записей (т.е. строк полученной таблицы) Recordset содержит коллекцию именованных полей Fields (столбцов таблицы), позволяющих обращаться к данным внутри записей.

Создание объекта Recordset – самый простой способ получить данные из базы. Для этого нужно вызвать метод Open, передав ему в качестве параметров строку соединения c БД и строку SQL-запроса.

В случае успешного выполнения запроса и получения непустого множества записей, указатель текущей записи будет установлен на первую из них.

Пример:

Set objRecordSet = CreateObject("ADODB.Recordset")
objRecordSet.CursorLocation = adUseClient'параметр необходим для корректного отображения RecordCount

'запрос возвращает список всех клиентов, кол-во и общую стоимость их заказов
QueryStr =" SELECT c.ContactName," & _ 
      "(SELECT COUNT(*) FROM Orders o  WHERE o.CustomerID=c.CustomerID) AS OrdersCount," & _
      "(SELECT SUM(od.UnitPrice) FROM [Order Details] od INNER JOIN Orders o ON od.OrderID=o.OrderID WHERE o.CustomerID=c.CustomerID) AS SumPrice " & _
      " FROM Customers c ORDER BY c.ContactName"

Call objRecordSet.Open(QueryStr, ConnectStr)'выполнение запроса

Do While Not objRecordSet.EOF

    cn = objRecordSet("ContactName")
    oc = objRecordSet("OrdersCount")
    sp = objRecordSet("SumPrice")

    WScript.Echo "ContactName: " &  PadLeft(cn, "", 23) & "  OrdersCount: " & PadLeft(oc, "", 2) & "  SumPrice: $" & sp

    objRecordSet.MoveNext

Loop

WScript.Echo "RecordCount: " & objRecordSet.RecordCount

objRecordSet.Close

Функция getRecordsetRows принимает на вход строку запроса и строку соединения, возвращая двумерный массив, содержащий результат выполнения запроса.

Function getRecordsetRows(QueryStr, ConnectionStr)

	Set objRecordSet = CreateObject("ADODB.Recordset")

	Call objRecordSet.Open(QueryStr, ConnectionStr)'выполнение запроса

	getRecordsetRows = objRecordSet.GetRows()

	objRecordSet.Close

End Function

Пример:

QueryStr =" SELECT c.ContactName," & _ 
      "(SELECT COUNT(*) FROM Orders o  WHERE o.CustomerID=c.CustomerID) AS OrdersCount," & _
      "(SELECT SUM(od.UnitPrice) FROM [Order Details] od INNER JOIN Orders o ON od.OrderID=o.OrderID WHERE o.CustomerID=c.CustomerID) AS SumPrice " & _
      " FROM Customers c ORDER BY c.ContactName"

rows = getRecordsetRows(QueryStr, ConnectStr)

For i = 0 to Ubound(rows, 2)'размер массива по второму индексу

	WScript.Echo	rows(0, i)  & " " &  	rows(1, i)  & " " &  	rows(2, i)

Next