Применение технологии клиент-сервер MS Access & SQL Server
Автор Прус Юрий   
27.07.2001 г.
Применение технологии клиент-сервер MS Access & SQL Server New Page 2

Применение технологии клиент-сервер MS Access & SQL Server
Связь через ODBC.


Интерфейс ODBCDirect
При использовании программы-сервера базы данных, например SQL Server, Visual Basic (далее VB) сталкивается с проблемой. Дело в том, что SQL Server работает по технологии клиент-сервер, а VB - файл-сервер. В чем разница: VB считывает все данные и производит запрос самостоятельно.. Серверы баз данных (клиент-сервер) выполняют эту работу сами. Они выполняют операторы SQL и возвращают результат. 
При файл-серверной технологии VB используя СУБД Jet Engine обрабатывает операторы SQL получает результат и засылает результат обратно на SQL Server. При таком способе теряется время ( а если пользователей много, то много времени) и можно использовать только те команды, которые воспринимает Jet Engine.
Эту проблему можно решить отказавшись от использования Jet Engine. Для этого в систему встроен интерфейс ODBCDirect. При использовании этой технологии загрузки модуля Jet Engine не происходит. Это дает выигрыш во времени и занимаемой памяти. Кроме того, в ODBCDirect существует возможность асинхронного выполнения SQL - запросов. Это означает, что программа после передачи оператора SQL не будет ожидать завершения работы операторов SQL, а продолжит работу

Создание наборов записей с помощью ODBCDirect
Главное отличие - должен быть создан новый объект Workspace
Set object = DBEngine.CreateWorkspace (name, user, password, type) ' где type dbUseODBC, т.е.

Set object = DBEngine.CreateWorkspace (name, user, password, dbUseODBC) 

Затем следует установить связь с источником данных , с помощью объекта Database
Set db = ws.OpenDatabase ("base", False, False, "ODBC;dsn=SQL; uid=my; pwd=secret")

Однако этот способ не может работать с асинхронным выполнением запросов. Этот способ применяется, если Вы работаете с базами в формате Access. 

Объект Connection
С помощью Объекта Connection реализуется асинхронное выполнение.
Set object = wsob.OpenConnection (name, option , readonly, connection) 
Где:
- name - задает имя объекта, которое будет использоваться для доступа к объекту
- option - задает способ запроса драйвером ODBC и следует ли открывать подключение в асинхроном режиме.

Свойство StillExecuting
При асинхронной связи можно проверить закончено ли выполнение асинхронной операции

Do While rs.StillExecuting
' Код
Loop

А теперь привожу рабочий пример, который используется в моей базе Access для работы с таблицей SQL Server 7.0

Dim wrkODBC As Workspace
Dim conPubs As Connection
Dim conLoop As Connection
Dim rstTemp As Recordset

Set wrkODBC = CreateWorkspace("NewODBCWorkspace", _
"system", "manager", dbUseODBC)
Set conPubs = wrkODBC.OpenConnection("Connection1", _
dbDriverNoPrompt, , _
"ODBC;DATABASE=Apteka;UID=;PWD=;DSN=apteka")
Set rstTemp = conPubs.OpenRecordset("dbo.выборМ", dbOpenDynaset)
rstTemp.MoveFirst
Forms!Подключение!Path_MDB = rstTemp![Наименование]

В данном примере Forms!Подключение!Path_MDB бд MS Access97 присваивается значение поля "Наименование" из таблицы "dbo.выборМ" базы SQL Server "Apteka"

Также можно использовать технологию клиент-сервер и с другими базами, например Oracle. Но это уже другая тема


Просмотров: 12941

  Ваш коментарий будет первым

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code