Вход


Главная страница >> Учебный процесс >> Конспекты >> MS Office. Руководство программиста по Visual Basic для MS Office 97 >> DAO - Data Access Objects >> Использование ODBCDirect >> Использование курсоров в рабочих пространствах ODBCDirect >> Подключение нескольких конечных наборов

Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


Подключение нескольких конечных наборов


Любой оператор SQL может включать несколько операторов SELECT или вызовов хранимых процедур, выполняющих один или несколько операторов SELECT. Каждый такой оператор генерирует набор записей, который Ваша программа должна обработать или отбросить, прежде чем будут освобождены ресурсы и станет доступным следующий набор. Так как не всегда заранее известно, сколько конечных наборов (result sets) сгенерирует хранимая процедура, программа должна быть готова к обработке произвольного числа наборов. Заметьте: если хранимая процедура возвращает несколько конечных наборов, ни один из них нельзя обновлять.

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

Ш Чтобы получить несколько конечных наборов:

Запишите в свойство DefaultCursorDriver рабочего пространства значение dbUseServerCursor, указав тем самым, что Вы используете курсоры на стороне сервера. Создайте объект QueryDef и укажите в свойстве SQL корректную строку SQL, возвращающую несколько объектов Recordset. Запишите 1 в свойство CacheSize объекта QueryDef; тем самым Вы сообщите, что сервер должен передавать Вам по одной записи. Получая записи таким способом, Вы на самом деле не используете курсор. Откройте объект Recordset на только что созданном объекте QueryDef. Укажите константу dbOpenForwardOnly для аргумента тип метода OpenRecordset. Используйте метод NextRecordset для доступа к следующему объекту Recordset в группе наборов записей, возвращенных сервером. Этот метод сбрасывает текущий объект Recordset и заменяет его следующим набором записей, указанным в операторе SQL. Если в группе объектов Recordset больше нет наборов записей, метод NextRecordset вернет False, а текущий объект Recordset станет пустым.

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

Function GetMultipleResults()
═════Dim wrk As Workspace, rst As Recordset, cnn As Connection
═════Dim qdf As QueryDet, fдd As Field, strSQL As String
═════Dim strConnect As String, fDone As Boolean

═════? создаем рабочее пространство ODBCDirect
═════Set wrk = DBEngine. CreateWorkspace( "ODBCDirect", "Admin", "". dbUseODBC)
═════?
формируем строку подключения
═════strConnect = "ODBC; DSN=Pubs:DATABASE=Pubs;UID=sa;PWD=;"
═════?
открываем соединение
═════Set cnn = wrk.OpenConnection("", dbDriverNoPrompt. False, strConnect)
═════?
формируем оператор SQL
═════strSQL = "SELECT au_lname, au_fname FROM Authors: _
═════SELECT title FROM Titles;"
═════?
устанавливаем драйвер курсора, используемый по умолчанию
═════wrk. DefaultCursorDriver = dbUseServerCursor
═════?
открываем объект QueryDef
═════Set qdf = cnn.CreateQueryDef("", strSQL)
═════qdf. CacheSize = 1
═════?
открываем набор записей на объекте QueryDef
═════Set rst = qdf.OpenRecordset(dbOpenForwardOnly)

═════Do Until fDone = True
══════════?
выводим значения всех полей каждой записи в наборе
══════════While Not rst. EOF
═══════════════For Each fld In rst. Fields
═══════════════Debug. Print fld.Value
═══════════════Next fld
═══════════════rst.MoveNext
══════════Wend
══════════fDone = Not rst.NextRecordset()
═════Loop
═════rst. Close
═════cnn. Close
═════wrk .Close
End Function



[Назад]    [Содержание ]    [Вперед]

  



Текст пособия подготовлен на основе материалов книги
Microsoft Corporation. Руководство программиста по Visual Basic для Microsoft Office 97 / Пер. с англ. - М.: Издательский отдел "Русская Редакция" ТОО "Channel Trading Ltd.", 1997. - 544 с.: илл.
c Оригинальное издание на английском языке,
Microsoft Corporation, 1997
c Русский перевод,
Microsoft Corporation, 1997

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017