Применение технологии клиент-сервер 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. Но это уже другая тема Просмотров: 12732
Ваш коментарий будет первым | | |