Анимация
JavaScript
|
Главная Библионтека Помимо визуальных средств установки различных режимов блокировки, вы можете использовать объект Application для их изменения. В следующем примере с помощью метода SetOption объекта Application устанавливается пессимистическая блокировка (блокировка страницы), а с помощью метода GetOption и функции MSGBOX() выводится номер текущей блокировки. Public Sub mygetoption() Dim mystr As String Application.SetOption "Блокировка по умолчанию", 2 mystr = Application.GetOption("Блокировка по умолчанию") MsgBox (mystr) End Sub Для форм, отчетов и запросов вы обращаетесь к свойству RecordLocks, но учтите, что для уже открытых экземпляров объектов на различных пользовательских машинах свойство не изменится. То есть, изменив свойство некоего объекта, вам попутно надо убедить пользователя закрыть и снова открыть объект, для того чтобы он смог воспользоваться всеми преимуществами нового значения. Пример изменения свойства Recordlocks для запроса: Public Sub myqueryproperties() Dim db As DATABASE, qd As QueryDef Set db = DBEngine.Workspaces(0).Databases(0) db.QueryDefs("Моя таблица query").Properties("recordLocks") = 2 End Sub Пример изменения свойства RecordLocks для формы: Public Sub ActiveFormRecordLocksChange Screen.ActiveForm.RecordLocks = 2 End Sub Учтите, что, как правило, во время работы формы изменять это свойство нет смысла, так как несмотря на то, что вы его установите, форма будет использовать блокировку прежнего типа. Поэтому рекомендуем следующую последовательность действий для конкретного использования данной процедуры: 1. Создайте функцию, которая будет содержать одну строчку: ActiveFormRecordLoc1ksChange, то есть вызов процедуры, которая у вас может называться по-другому. 2. Создайте макрос, выполняющий одно действие RunCode, аргументом которого будет вызов нашей функции, которая, к примеру, может называться fActiveFormLocksChange. 3. Создайте пользовательскую панель инструментов, в которую необходимо перетащить графическое изображение макроса из вкладки Макросы. Выполнив данную последовательность действий, вы получите пользовательскую панель инструментов с одной кнопкой, которая в режиме Конструктора будет устанавливать для вашей формы свойство RecordLocks равным значению 2, что соответствует блокировке изменяемой записи. Проявив фантазию, вы можете дополнить вашу панель инструментов более изощренными инструментами, но основа технологии их создания описана выше. Очевидно, что то же самое вы можете проделать и для отчетов. Для того чтобы вы были уверены, что все операции, которые вы хотите провести, были выполнены, используйте методы BeginTrans, CommitTrans и RollBack объекта Workspace. Метод BeginTrans начинает транзакцию. Под транзакцией подразумевается серия изменений, которые проводятся над данными и структурой базы данных. Если по какой-либо причине операции, входящие в текущую транзакцию, не могут быть завершены, то система возвращается в исходное состояние. При этом помните, что на рабочей станции должно быть достаточно места на диске, так как при выполнении транзакции вся информация об операциях в нее входящих заносится на диск. Транзакции должны завершаться с помощью обращения к методу CommitTrans. Транзакции могут быть вложенными, не забывайте, что для того, чтобы завершить транзакцию более высокого уровня, вначале необходимо завершить вложенные транзакции. Если по каким-либо причинам приложение не сможет обратиться к методу CommitTrans, то система вернется в первоначальное состояние. Количество вложенных транзакций в Access, так же как и в Visual FoxPro, не может превышать пяти. При этом обратите внимание на следующий факт. Метод CommitTrans для текущего объекта Workspaces делает все изменения необратимыми. В то же время, если транзакция вложенная, то откат транзакции на более высоком уровне приведет систему в первоначальное состояние. В нижеприведенном примере применяется транзакция для перехода на вторую запись и изменения значения для поля Фамилия. Перед завершением транзакции верхнего уровня предлагается принять решение: заносить изменения на диск или нет. Sub ForceTrans() Dim db As DATABASE, wks As Workspace, rst As Recordset Dim otvet As Integer Set wks = DBEngine.Workspaces(0) Set db = wks.Databases(0) Set rst = db.OpenRecordset("Моя таблица", dbOpenDynaset) wks.BeginTrans wks.BeginTrans rst.MoveLast rst.AbsolutePosition = 2 rst. Edit rst.ФАМИЛИЯ = "Макашарипов" rst.UPDATE wks.CommitTrans otvet = MsgBox("Изменить", vbYesNo + vbDefaultButton1, "Ваше решение") If otvet = vbYes Then wks.CommitTrans Else wks.Rollback End If End Sub Кроме вложенных транзакций в Access можно использовать параллельные транзакции. Эти транзакции действуют независимо друг от друга. Но при этом вам необходимо создать еще один объект типа Workspace. Соответственно каждая транзакция завершается независимо друг от друга. Следующий пример будет работать, только если установлен режим блокировки "Отсутствует". В данном примере обратите внимание на две последние строчки кода. Даже если вы поменяете эти строчки местами, ничего не изменится, то есть вторая транзакция не работает с данными, реально хранящимися на диске. Public Sub multipletrans() Dim db As DATABASE, wks As Workspace, rst As Recordset Dim db1 As DATABASE, wks1 As Workspace, rst1 As Recordset Set wks = DBEngine.Workspaces(0) Set db = wks.Databases(0) Set rst = db.OpenRecordset("Моя таблица", dbOpenDynaset) Set wks1 = DBEngine.Workspaces(0) Set db1 = wks1.Databases(0) Set rst1 = db1.OpenRecordset("Моя таблица", dbOpenDynaset) wks.BeginTrans rst.FindFirst "[Фамилия]=Клинтон" rst. Edit rst. ФАМИЛИЯ = "Доул" rst.UPDATE wks1.BeginTrans rst1.FindFirst "[Фамилия]=Доул" rst1.Edit rst1. ФАМИЛИЯ = "Клинтон" rst1.UPDATE wks.CommitTrans wks1.CommitTrans End Sub Транзакции являются глобальными в рамках объекта Workspace. Поэтому ваши транзакции могут охватывать несколько баз данных и, соответственно, все множество объектов, которые в них содержатся. Объекты типа Database и Recordset имеют свойство Transactions, которое может принимать значения True или False. От их значений зависит, сможете ли вы использовать методы BeginTrans, CommitTrans и Rollback для работы с этими объектами. Иногда имеет смысл проверять Глава 8 Использование технологии клиент-сервер 8.1. Работа с внешними данными с помощью технологии ODBC Команды Transact-SQL Создание представлений Создание триггеров 8.2. Использование Visual FoxPro для разработки клиентского приложения Синхронный и асинхронный процессы Создание внешних представлений 8.3. Использование Access и Visual Basic для разработки клиентского приложения 8.4. Использование ODBC API для доступа к внешним данным 8.5. Remote Data Objects 8.6. Внешнее управление сервером с помощью SQL-DMO До сих пор мы вели речь о приложениях, работающих на одном, локальном компьютере. Если речь шла о компьютерной сети, то БД могла располагаться на файл-сервере или нескольких файл-серверах, в качестве которого может использоваться либо специально выделенный компьютер, либо одна из объединенных в сеть наиболее мощных ПЭВМ. Функции файл-сервера заключаются в основном в хранении БД и обеспечении доступа к ним пользователей, работающих на различных компьютерах. Эти функции обеспечиваются, как правило, той же СУБД, которая работает и на компьютерах пользователей. При небольших объемах данных эта схема вполне удовлетворяет всем современным требованиям, но с увеличением числа компьютеров в сети или ростом БД начинают возникать проблемы, связанные с резким падением производительности. Это связано с увеличением объема данных, передаваемых по сети, так как вся обработка производится на компьютере пользователя. Если пользователю требуется пара строк из таблицы объемом в сотни тысяч записей, то сначала вся таблица с файл-сервера передается на его компьютер, а затем СУБД отбирает нужные записи. В этом случае длительные перерывы в работе и число выпитых чашек кофе можно сильно сократить, перейдя на технологию клиент-сервер. Технология клиент-сервер разделяет приложение на две части, используя лучшие качества обеих сторон. Front-end (клиентская часть) обеспечивает интерактивный, легкий в использовании, обычно графический интерфейс - находится на компьютере пользователя. Backend (сервер) обеспечивает управление данными, разделение информации, изощренное администрирование и безопасность - находится на специально выделенных компьютерах или даже мейн-фреймах. При технологии клиент-сервер клиентское приложение (front-end) формирует запрос к серверу БД (back-end), на котором выполняются все команды. Результаты команд посылаются затем клиенту для использования и просмотра. Visual FoxPro, Visual Basic и Access обеспечивают средства для создания клиентских частей в приложениях клиент-сервер, которые сочетают мощность, скорость, графический интерфейс, продвинутые средства построения запросов и отчетов. MS SQL Server является на настоящий момент одним из наиболее мощных серверов БД. 8.1. Работа с внешними данными с помощью технологии ODBC Важнейшим этапом в построении приложения клиент-сервер является установка связи клиентского приложения с источником данных, находящимся на сервере БД. В настоящий момент различные средства разработки используют несколько технологий обеспечения доступа к данным. Общепризнанным стандартом, как мы уже писали ранее, является технология ODBC. В этом параграфе мы рассмотрим основы применения технологии ODBC для установки связи с MS SQL Server. это свойство перед использованием вышеприведенных методов, особенно при работе с данными из присоединенных таблиц. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 [ 84 ] 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |