Н. 3. Елманова. C++Bu!lder 3.0, архитектура "клиент/сервер" и Internet
Отметим также, что можно обратиться к созданной HTML-странице с другого компьютера локальной сети, а также посредством Internet (в этом случае в опции Target URL нужно указывать Internet-адрес каталога, где будет храниться файл осх).
Нередко при создании таких ActiveX задаются вопросы типа: "Можно ли создать ActiveX, содержащий несколько форм?". Ответ достаточно прост: в этом случае возможна генерация дополнительных форм (отображаемых уже не внутри браузера, а отдельно от него) динамически при наступлении какого-либо события (например, нажатия на кнопку). Нужно только поместить дополнительную форму при установке опций проекта в список Available Forms и не забыть уничтожить созданную динамически форму, когда она станет не нужна. Следует также помнить, что библиотека OCX, содержащая ActiveX, включающий, в свою очередь, несколько форм, будет иметь больший размер, чем в случае ActiveX с одной формой.
Довольно часто встречаются вопросы, связанные с тем, что ActiveX не отображается в браузере. Причин такого поведения может быть несколько. Первая причина связана с тем, что далеко не все браузеры поддерживают отображение ActiveX с помощью тега <OBJECT>. Для отображения ActiveX следует использовать только MS Internet Explorer версии 3.0 и выше. Вторая причина может быть связана с настройкой уровня безопасности браузера. В случае максимального уровня безопасности (значение, принятое по умолчанию) никакой исполняемый код (в том числе и ActiveX) в браузере не выполняется, а некоторые версии Internet Explorer не только не сгружают ActiveX и тем более не выполняют его, но при этом еще и ничего не сообщают пользователю. Есть еще и третья причина - настройки операционной системы компьютера пользователя могут быть таковы, что пользователю запрещено изменять реестр, и в этом случае ActiveX в нем, естественно, не зарегистрируется.
8.6      Многопользовательская работа в трехзвенных информационных системах
Рассмотрим часто встречающийся при многопользовательской работе случай, когда два пользователя пытаются отредактировать одну и ту же запись. При работе с сетевыми версиями настольных СУБД и при работе с серверными СУБД в такой ситуации обычно используется блокировка записи (или нескольких записей, занимающих общую единицу хранения информации, называемую страницей), не позволяющая пользователю редактировать запись, уже редактируемую другим пользователем, пока последний ее не освободит.
Создание многозвенных информационных систем с помощью C++Builder 3.0
В_,слу_чае трехзвенной системы механизм блокировок, применяемый в традиционнои"~двухзвенной модели "клиент/сервер", может оказаться неприемлемым, так как при использовании briefcase model промежуток времени между редактированием записи и сохранением ее в базе данных может быть весьма длительным. Поэтому организация многопользовательской работы в трехзвенных системах отличается от привычной.
Так как данные, предоставляемые компонентом TClientDataSet, представляют собой содержимое кэша, вполне возможно, что несколько пользователей создадут свои локальные копии исходных записей, полученных с сервера баз данных, и каждый начнет их редатсгировать. Предположим, два пользователя отредактировали одну и ту же запись и пытаются сохранить ее на сервере. В этом случае тот из пользователей, кто пытался первым сохранить в базе данных свой вариант отредактированной записи, сумеет это ^сделать, тогда как второй пользователь должен быть уведомлен об ошибке, связанной с тем, что сохраняемая им запись уже изменена другим пользователем.
Для обработки подобных ошибок существует событие OnReconcileError компонента TClientDataSet, возникающее в случае, когда при попытке сохранения измененной записи в базе данных выясняется, что запись была изменена другим пользователем. Пример такой обработки можно найти в репозитарии объектов C++Builder.
Откроем проект клиентского приложения, рассмотренный в разделе "Создание клиентского приложения с доступом по протоколу TCP/IP". Далее на странице Dialogs репозитория объектов C++Builder выберем пиктограмму Reconcile Error Dialog (рис. 8.24).
В результате к проекту будет добавлена диалоговая панель следующего вида (рис. 8.25).
190
191