В последнее время многоуровневая (
SQL -серверов, например, InterBase . Клиентские ПК непосредственно не имеют никакой связи с этим уровнем.DBGrid , DBEdit , DBMemo и проч. Разумеется, этот уровень находится на клиентских ПК.Взгляните на рисунок:
(рис 28.1 ) Трехуровневая модельНа рисунке представлены три уровня архитектуры: так называемый, "тонкий" клиент ( thin-client ), сервер приложений и сервер данных. На ПК сервера БД вместе с данными расположен один из SQL -серверов. Как видите, на клиентском ПК, помимо компонентов доступа к данным, располагается только компонент связи с сервером приложений, а довольно громоздкие
При небольшом количестве клиентов ничто не мешает нам отказаться от использования SQL -сервера, расположив данные на самом сервере приложений, и используя к ним обычный локальный доступ через механизм , ADO и т.п. При этом можно использовать обычные таблицы Paradox или , например. Такой подход удобней, чем файл-серверная архитектура, поскольку позволяет не только "облегчить" пользовательское приложение, но и обеспечивает безопасность данных. Ведь пользователи не будут иметь прямого доступа к самим данным, обмен информацией будет происходить через посредника, как на рисунке ниже:
(рис 28.2. ) Объединение уровня данных и бизнес-уровня на одном сервереНесмотря на кажущуюся сложность архитектуры, организовать такую модель достаточно просто. Delphi для этого предлагает технологию Delphi эта технология называлась
BDE , ADO, ODBC, IBX , dbExpress и т.п. Все это приводит к тому, что на ПК каждого клиента приходится устанавливать и настраивать соответствующие драйверы, а это сильно усложняет процесс распространения приложения. В BDE ). Клиентские же машины не нуждаются в них, за что и называются "тонкими".ok., которую мы создавали во второй лекции (надеюсь, вы еще не удалили эту БД?). Поместим этот файл по адресу
C:\DataBases\ok.mdb
Delphi поддерживает следующие технологии удаленного доступа:
Distributed Component Object Model - Распределенная Windows 95 (что маловероятно в настоящее время), то придется также установить поддержку DCOM95, остальные версии Windows в этом не нуждаются. Поскольку модель является "родной" для ОС Windows, использовать ее довольно просто. Вероятно, наиболее популярная модель на сегодняшний день.TCP/IP. Эта модель, пожалуй, дает наиболее быстрое соединение, однако имеется ряд замечаний. Во-первых, программисту приходится прилагать дополнительные усилия для организации связи и слежением за возможными ошибками. Во-вторых, чтобы можно было загрузить сервер приложений, сначала на компьютере с этим сервером нужно загрузить утилиту SCKTSRVR.EXE. Эта утилита устанавливается вместе с Delphi и по умолчанию находится в папке C:\PROGRAM FILES\BORLAND\DELPHI\BIN. При загрузке программы ее ярлык появляется в трее (в правом нижнем углу экрана), и с этого момента клиентские ПК смогут соединяться с этим сервером. Обычно запуск этой утилиты прописывают на сервере в автозагрузке.Microsoft Transaction Server - Сервер транзакций Microsoft ) - основана на Common Object Request Broker Architecture - Общедоступная архитектура брокеров при запросе объектов).Simple Object Access Protocol - Простой протокол доступа к объекту.)Загрузите Delphi и начните новый проект. Главная форма нам совсем не понадобится, назовите ее fMain, в свойстве Caption напишите " Main, а проекту в целом - MyNewServer. Основой сервера является удаленный модуль данных, который обеспечивает связь сервера с клиентами, а также является контейнером для размещения компонентов, вроде обычного Data Module. Delphi позволяет использовать следующие удаленные модули:
Web -службы и Web -броузер в качестве сервера.Помимо одного из этих удаленных модулей данных, в состав сервера приложений также входят компоненты TDataSetProvider, которые предназначены для передачи данных на клиентское приложение. Каждому набору данных (таблица, запрос), предназначенному для передачи клиентам, следует предоставить по одному компоненту TDataSetProvider.
Важно! Следует знать, что обмен данными между сервером приложений и "тонкими" клиентами обеспечивается динамической библиотекой Midas.dll, которая должна быть зарегистрирована на компьютере сервера приложений.
Мы будем использовать технологию Delphi. Перейдите на вкладку Multitier и выберите
(рис 28.3 ) Мастер создания удаленного модуля данныхВ первом поле " CoClass Name " нам необходимо ввести имя создаваемого модуля, назовем его MyRDM. Следующие два поля требуют более детального изучения.
Поле Instancing требует выбора способа создания экземпляров сервера, когда клиент пытается получить доступ к данным. Заметим, что Windows автоматически загружает сервер приложений, когда начинает работать клиент. Возможны следующие способы загрузки сервера:
COM не сможет создаваться из внешних приложений. Используется редко, в основном, когда нужно управлять доступом с помощью промежуточного уровня прокси.В этом поле оставляем способ по умолчанию Multiple Instance.
Поле Threading Model предлагает выбрать модель потоков, что позволяет распределять соединения по отдельным потокам без необходимости применения дополнительного кода. Допустимы следующие модели:
Free и Apartment.COM следит, чтобы не было конфликта вызовов. Однако может возникнуть конфликт потоков, который отслеживается только в версии COM+. При отсутствии этой версии нужно использовать модель Apartment.В этом поле оставляем модель по умолчанию Apartment.
Поясним материал на схеме:
(рис 28.4 ) Поведение сервера в зависимости от способа создания экземпляровНажмите кнопку "ОК", окно Мастера создания удаленного модуля закроется, и у нас появится модуль данных MyRDM. Сохраните его на диск под именем RDM.
В этот контейнер с вкладки ADO поместите компонент ADOConnection и две таблицы ADOTable. Щелкните дважды по ADOConnection, чтобы открыть редактор подключений. Нажмите кнопку Build, чтобы открылся список поставщиков данных. Здесь выберем " Microsoft Jet 4.0 " и нажмем копку "Далее". В следующем окне, в поле 1 поместим адрес и имя файла (вы уже поместили файл по этому адресу?):
C:\DataBases\ok.mdb
Как видите, локальную базу данных мы превращаем в распределенную, предназначенную для подключения многих клиентов, что гораздо удобней и надежней
Далее нажимаем "ОК" и закрываем редактор подключений. Свойство LoginPrompt компонента переведем в False, чтобы при подключении не выходило запроса на имя пользователя и пароль. А свойство Connected переведем в True, чтобы физически подключить компонент к базе данных.
Займемся табличными компонентами. В обеих ADOTable в свойстве Connection выберите наш ADOConnection1. У первой таблицы в свойстве TableName выберите таблицу LichData, а свойство Name переименуйте в TLichData. У второй таблицы в свойстве TableName выберите таблицу , а свойство Name переименуйте в TTelephones. Свойство Active обеих таблиц переведите в True, чтобы открыть эти наборы данных. Как видите, пока что подключение сервера к базе данных мало отличается от того, что мы проходили во второй лекции, при разработке локальной базы данных для отдела кадров. Однако дальше начинаются различия.
Как вы помните, посредником между НД и
Также нам понадобится посредник для связи с клиентским приложением, и этим посредником является компонент MyRDM два таких компонента. У первого свойство Name переименуйте в DSPLichData, а в свойстве DataSet выберите таблицу TLichData. У второго свойство Name переименуйте в DSPTelephones, а в свойстве DataSet выберите таблицу TTelephones.
Теперь установим связь главная-подчиненная между таблицами, для этого установите один компонент DataSource. Его свойство Name переименуйте в dsLichData, а в свойстве DataSet выберите таблицу TLichData. Организация связи производится в таблице TTelephones. В ее свойстве MasterSource выберите dsLichData, затем раскройте сложное свойство MasterFields. Откроется окно
(рис 28.5 ) Редактор связейВ разделе подчиненного поля выберите "Сотрудник", в разделе главного поля - "Ключ", нажмите кнопку Add, чтобы создать связь, и кнопку OK, чтобы подтвердить это. Внешний вид полученного контейнера представлен на рисунке ниже:
(рис 28.6) Удаленный модуль данныхЭто все, сервер приложений готов. Как видите, даже не пришлось подключать удаленный модуль данных к главной форме командой File -> Use Unit. Сохраните проект и командой Run -> Run (или кнопкой Run на панели инструментов) скомпилируйте и загрузите полученную программу. При этом произошли две вещи: проект скомпилировался в выполняемую программу, а при первом запуске наш сервер зарегистрировался в реестре Windows. Теперь Windows знает, где находится наш сервер, и при необходимости сможет его автоматически загрузить.
К слову сказать, при переносе серверного файла на другой ПК нет необходимости даже загружать эту программу, чтобы прописать ее в реестре Windows, достаточно из командной строки загрузить ее с параметром / regserver, при этом программа лишь пропишется в реестре и сразу отключится. А для удаления регистрации этого сервера из реестра нужно загрузить его с параметром / unregserver, например, так (у вас может быть другой адрес):
C:\ MyNewServer\ MyNewServer.exe /unregserver
Однако не забудьте, что для дальнейшей правильной работы он должен быть прописан в реестре Windows. Поэтому если сейчас вы удалили сервер из реестра, вновь загрузите программу MyNewServer.exe, чтобы заново прописать ее.
Как уже упоминалось, для правильной работы серверов . В нашем случае этого делать не нужно, так как при установке Delphi библиотека устанавливается и регистрируется автоматически. Однако если вы будете использовать созданный сервер приложений на другом ПК, где не устанавливалась Delphi, то зарегистрировать библиотеку придется вручную. Для этого на вашем ПК нужно найти файл библиотеки, он устанавливается по адресу (для Windows XP ):
C:\Windows\System32
Этот файл нужно скопировать на ПК, который вы собираетесь использовать в качестве сервера, по этому же адресу. В этой же папке находится утилита regsvr32.exe, которая предназначена для регистрации библиотек *.dll. Чтобы зарегистрировать нашу библиотеку, надо из командной строки (или в окне команды Пуск -> Выполнить) вызвать утилиту, передав ей в качестве параметра имя библиотеки:
C:\Windows\System32\regsvr32 midas.dll
Таким образом, мы зарегистрируем библиотеку в реестре. Снять регистрацию можно командой:
C:\Windows\System32\regsvr32 /u midas.dll
Не снимайте регистрацию на вашем ПК, иначе потом вы не сможете загрузить сервер приложений!
Если в качестве источника данных вы будете использовать сервер , то набор компонентов в удаленном модуле данных, скорее всего, будет с вкладки , а их подключение к базе данных будет таким же, как мы изучали в прошлых лекциях.
Связь наборов данных сервера с клиентским приложением обеспечивается компонентом
| Свойство | Описание |
|---|---|
| Constraints | Если содержит True, клиенту пересылается информация о наложенных на данные ограничениях. Клиент имеет возможность организовать локальный контроль данных. |
| DataSet | Содержит имя связанного с компонентом набора данных ( TTable, TQuery, TStoredProc ) |
| Exported | При значении True клиент имеет возможность использовать интерфейс IAppServer при обращении к провайдеру. |
| Options | Сложное раскрывающееся свойство. Определяет, какие данные будут включены в передаваемый клиенту пакет. Подробнее о параметрах этого свойства смотрите следующую таблицу. |
| ResolveToDataSet | Определяет, как обновляются данные. Если содержит True - то в НД, указанном в свойстве DataSet. Иначе - непосредственно в серверной БД. |
| UpdateMode | Определяет критерии поиска записи в наборе данных при сохранении изменений этой записи клиентом. Если значение upWhereAll, поиск записи ведется по всем полям; если upWhereChanged - по ключевым и измененным полям; если upWhereKeyOnly - только по ключевым полям. |
| Параметр | Описание |
|---|---|
| poFetchBlobsOnDemand | По умолчанию, данные из полей клиенту не пересылаются, чтобы излишне не загружать трафик. Если свойство содержит True - данные пересылаются. Иначе, эта возможность отключена, и чтобы получить -данные записи, клиентское приложение должно явно использовать метод FetchBlobs. |
| poFetchDetailsOnDemand | Данные из вложенных или |
| poIncFieldProps | В пакет включаются такие свойства полей, как Alignment, DisplayLabel, DisplayWidth, Visible, DisplayFormat, EditFormat, MaxValue, MinValue, Currency, EditMask, DisplayValues. |
| poCascadeDeletes | Дает серверу распоряжение автоматически удалять каскадным методом записи из |
| poCascadeUpdates | Дает серверу распоряжение автоматически изменять каскадным методом записи из |
| poReadOnly | Данные клиенту предоставляются только для чтения. |
| poAllowMultiRecordUpdates | Параметр допускает индивидуальные обновления сразу нескольких записей. Если параметр = False, множественные обновления будут автоматически прерваны. |
| poDisableInserts | Параметр запрещает клиенту вставку новых записей. |
| poDisableEdits | Параметр запрещает клиенту редактирование записей. |
| poDisableDeletes | Параметр запрещает клиенту удаление записей. |
| poNoReset | Запрещает обновление набора данных сервера перед передачей записей клиенту. |
| poAutoRefresh | Разрешает автоматическое обновление записей клиента при их изменении. Для ускорения работы эта опция по умолчанию отключена. |
| poPropogateChanges | Обновления, сделанные в событиях BeforeUpdateRecord или AfterUpdateRecord передаются клиенту в пакете, и объединяются с клиентским набором данных. |
| poAllowCommandText | Предоставляет клиенту возможность отменить НД, заменяя его НД, полученным SQL -запросом. |
| poRetainServerOrder | Запрещает клиенту изменять сортировку записей, полученную по умолчанию. |
| Метод | Описание |
|---|---|
| ApplyUpdates | Обновляет данные. Имеет параметры: Delta - измененные, новые или удаленные записи; MaxError - максимальное количество ошибок, при котором обновление прекращается (0 - не ограничено); ErrorCount - количество допущенных ошибок. Метод возвращает клиенту набор записей, при обновлении которых произошла ошибка. |
| DoDelete | Вызывается для каждой записи, которая должна быть удалена. |
| DoInsert | Вызывается для каждой новой записи. |
| DoUpdate | Вызывается для каждой модифицированной записи. |
| EndUpdate | Вызывается в момент завершения обновлений. |
| LogUpdateError | Добавляет ошибочную запись в |
На следующей лекции мы подробно разберем создание клиентской части многоуровневых приложений.
В последнее время многоуровневая (
SQL -серверов, например, InterBase . Клиентские ПК непосредственно не имеют никакой связи с этим уровнем.DBGrid , DBEdit , DBMemo и проч. Разумеется, этот уровень находится на клиентских ПК.Взгляните на рисунок:
(рис 28.1 ) Трехуровневая модельНа рисунке представлены три уровня архитектуры: так называемый, "тонкий" клиент ( thin-client ), сервер приложений и сервер данных. На ПК сервера БД вместе с данными расположен один из SQL -серверов. Как видите, на клиентском ПК, помимо компонентов доступа к данным, располагается только компонент связи с сервером приложений, а довольно громоздкие
При небольшом количестве клиентов ничто не мешает нам отказаться от использования SQL -сервера, расположив данные на самом сервере приложений, и используя к ним обычный локальный доступ через механизм , ADO и т.п. При этом можно использовать обычные таблицы Paradox или , например. Такой подход удобней, чем файл-серверная архитектура, поскольку позволяет не только "облегчить" пользовательское приложение, но и обеспечивает безопасность данных. Ведь пользователи не будут иметь прямого доступа к самим данным, обмен информацией будет происходить через посредника, как на рисунке ниже:
(рис 28.2. ) Объединение уровня данных и бизнес-уровня на одном сервереНесмотря на кажущуюся сложность архитектуры, организовать такую модель достаточно просто. Delphi для этого предлагает технологию Delphi эта технология называлась
BDE , ADO, ODBC, IBX , dbExpress и т.п. Все это приводит к тому, что на ПК каждого клиента приходится устанавливать и настраивать соответствующие драйверы, а это сильно усложняет процесс распространения приложения. В BDE ). Клиентские же машины не нуждаются в них, за что и называются "тонкими".ok., которую мы создавали во второй лекции (надеюсь, вы еще не удалили эту БД?). Поместим этот файл по адресу
C:\DataBases\ok.mdb
Delphi поддерживает следующие технологии удаленного доступа:
Distributed Component Object Model - Распределенная Windows 95 (что маловероятно в настоящее время), то придется также установить поддержку DCOM95, остальные версии Windows в этом не нуждаются. Поскольку модель является "родной" для ОС Windows, использовать ее довольно просто. Вероятно, наиболее популярная модель на сегодняшний день.TCP/IP. Эта модель, пожалуй, дает наиболее быстрое соединение, однако имеется ряд замечаний. Во-первых, программисту приходится прилагать дополнительные усилия для организации связи и слежением за возможными ошибками. Во-вторых, чтобы можно было загрузить сервер приложений, сначала на компьютере с этим сервером нужно загрузить утилиту SCKTSRVR.EXE. Эта утилита устанавливается вместе с Delphi и по умолчанию находится в папке C:\PROGRAM FILES\BORLAND\DELPHI\BIN. При загрузке программы ее ярлык появляется в трее (в правом нижнем углу экрана), и с этого момента клиентские ПК смогут соединяться с этим сервером. Обычно запуск этой утилиты прописывают на сервере в автозагрузке.Microsoft Transaction Server - Сервер транзакций Microsoft ) - основана на Common Object Request Broker Architecture - Общедоступная архитектура брокеров при запросе объектов).Simple Object Access Protocol - Простой протокол доступа к объекту.)Загрузите Delphi и начните новый проект. Главная форма нам совсем не понадобится, назовите ее fMain, в свойстве Caption напишите " Main, а проекту в целом - MyNewServer. Основой сервера является удаленный модуль данных, который обеспечивает связь сервера с клиентами, а также является контейнером для размещения компонентов, вроде обычного Data Module. Delphi позволяет использовать следующие удаленные модули:
Web -службы и Web -броузер в качестве сервера.Помимо одного из этих удаленных модулей данных, в состав сервера приложений также входят компоненты TDataSetProvider, которые предназначены для передачи данных на клиентское приложение. Каждому набору данных (таблица, запрос), предназначенному для передачи клиентам, следует предоставить по одному компоненту TDataSetProvider.
Важно! Следует знать, что обмен данными между сервером приложений и "тонкими" клиентами обеспечивается динамической библиотекой Midas.dll, которая должна быть зарегистрирована на компьютере сервера приложений.
Мы будем использовать технологию Delphi. Перейдите на вкладку Multitier и выберите
(рис 28.3 ) Мастер создания удаленного модуля данныхВ первом поле " CoClass Name " нам необходимо ввести имя создаваемого модуля, назовем его MyRDM. Следующие два поля требуют более детального изучения.
Поле Instancing требует выбора способа создания экземпляров сервера, когда клиент пытается получить доступ к данным. Заметим, что Windows автоматически загружает сервер приложений, когда начинает работать клиент. Возможны следующие способы загрузки сервера:
COM не сможет создаваться из внешних приложений. Используется редко, в основном, когда нужно управлять доступом с помощью промежуточного уровня прокси.В этом поле оставляем способ по умолчанию Multiple Instance.
Поле Threading Model предлагает выбрать модель потоков, что позволяет распределять соединения по отдельным потокам без необходимости применения дополнительного кода. Допустимы следующие модели:
Free и Apartment.COM следит, чтобы не было конфликта вызовов. Однако может возникнуть конфликт потоков, который отслеживается только в версии COM+. При отсутствии этой версии нужно использовать модель Apartment.В этом поле оставляем модель по умолчанию Apartment.
Поясним материал на схеме:
(рис 28.4 ) Поведение сервера в зависимости от способа создания экземпляровНажмите кнопку "ОК", окно Мастера создания удаленного модуля закроется, и у нас появится модуль данных MyRDM. Сохраните его на диск под именем RDM.
В этот контейнер с вкладки ADO поместите компонент ADOConnection и две таблицы ADOTable. Щелкните дважды по ADOConnection, чтобы открыть редактор подключений. Нажмите кнопку Build, чтобы открылся список поставщиков данных. Здесь выберем " Microsoft Jet 4.0 " и нажмем копку "Далее". В следующем окне, в поле 1 поместим адрес и имя файла (вы уже поместили файл по этому адресу?):
C:\DataBases\ok.mdb
Как видите, локальную базу данных мы превращаем в распределенную, предназначенную для подключения многих клиентов, что гораздо удобней и надежней
Далее нажимаем "ОК" и закрываем редактор подключений. Свойство LoginPrompt компонента переведем в False, чтобы при подключении не выходило запроса на имя пользователя и пароль. А свойство Connected переведем в True, чтобы физически подключить компонент к базе данных.
Займемся табличными компонентами. В обеих ADOTable в свойстве Connection выберите наш ADOConnection1. У первой таблицы в свойстве TableName выберите таблицу LichData, а свойство Name переименуйте в TLichData. У второй таблицы в свойстве TableName выберите таблицу , а свойство Name переименуйте в TTelephones. Свойство Active обеих таблиц переведите в True, чтобы открыть эти наборы данных. Как видите, пока что подключение сервера к базе данных мало отличается от того, что мы проходили во второй лекции, при разработке локальной базы данных для отдела кадров. Однако дальше начинаются различия.
Как вы помните, посредником между НД и
Также нам понадобится посредник для связи с клиентским приложением, и этим посредником является компонент MyRDM два таких компонента. У первого свойство Name переименуйте в DSPLichData, а в свойстве DataSet выберите таблицу TLichData. У второго свойство Name переименуйте в DSPTelephones, а в свойстве DataSet выберите таблицу TTelephones.
Теперь установим связь главная-подчиненная между таблицами, для этого установите один компонент DataSource. Его свойство Name переименуйте в dsLichData, а в свойстве DataSet выберите таблицу TLichData. Организация связи производится в таблице TTelephones. В ее свойстве MasterSource выберите dsLichData, затем раскройте сложное свойство MasterFields. Откроется окно
(рис 28.5 ) Редактор связейВ разделе подчиненного поля выберите "Сотрудник", в разделе главного поля - "Ключ", нажмите кнопку Add, чтобы создать связь, и кнопку OK, чтобы подтвердить это. Внешний вид полученного контейнера представлен на рисунке ниже:
(рис 28.6) Удаленный модуль данныхЭто все, сервер приложений готов. Как видите, даже не пришлось подключать удаленный модуль данных к главной форме командой File -> Use Unit. Сохраните проект и командой Run -> Run (или кнопкой Run на панели инструментов) скомпилируйте и загрузите полученную программу. При этом произошли две вещи: проект скомпилировался в выполняемую программу, а при первом запуске наш сервер зарегистрировался в реестре Windows. Теперь Windows знает, где находится наш сервер, и при необходимости сможет его автоматически загрузить.
К слову сказать, при переносе серверного файла на другой ПК нет необходимости даже загружать эту программу, чтобы прописать ее в реестре Windows, достаточно из командной строки загрузить ее с параметром / regserver, при этом программа лишь пропишется в реестре и сразу отключится. А для удаления регистрации этого сервера из реестра нужно загрузить его с параметром / unregserver, например, так (у вас может быть другой адрес):
C:\ MyNewServer\ MyNewServer.exe /unregserver
Однако не забудьте, что для дальнейшей правильной работы он должен быть прописан в реестре Windows. Поэтому если сейчас вы удалили сервер из реестра, вновь загрузите программу MyNewServer.exe, чтобы заново прописать ее.
Как уже упоминалось, для правильной работы серверов . В нашем случае этого делать не нужно, так как при установке Delphi библиотека устанавливается и регистрируется автоматически. Однако если вы будете использовать созданный сервер приложений на другом ПК, где не устанавливалась Delphi, то зарегистрировать библиотеку придется вручную. Для этого на вашем ПК нужно найти файл библиотеки, он устанавливается по адресу (для Windows XP ):
C:\Windows\System32
Этот файл нужно скопировать на ПК, который вы собираетесь использовать в качестве сервера, по этому же адресу. В этой же папке находится утилита regsvr32.exe, которая предназначена для регистрации библиотек *.dll. Чтобы зарегистрировать нашу библиотеку, надо из командной строки (или в окне команды Пуск -> Выполнить) вызвать утилиту, передав ей в качестве параметра имя библиотеки:
C:\Windows\System32\regsvr32 midas.dll
Таким образом, мы зарегистрируем библиотеку в реестре. Снять регистрацию можно командой:
C:\Windows\System32\regsvr32 /u midas.dll
Не снимайте регистрацию на вашем ПК, иначе потом вы не сможете загрузить сервер приложений!
Если в качестве источника данных вы будете использовать сервер , то набор компонентов в удаленном модуле данных, скорее всего, будет с вкладки , а их подключение к базе данных будет таким же, как мы изучали в прошлых лекциях.
Связь наборов данных сервера с клиентским приложением обеспечивается компонентом
| Свойство | Описание |
|---|---|
| Constraints | Если содержит True, клиенту пересылается информация о наложенных на данные ограничениях. Клиент имеет возможность организовать локальный контроль данных. |
| DataSet | Содержит имя связанного с компонентом набора данных ( TTable, TQuery, TStoredProc ) |
| Exported | При значении True клиент имеет возможность использовать интерфейс IAppServer при обращении к провайдеру. |
| Options | Сложное раскрывающееся свойство. Определяет, какие данные будут включены в передаваемый клиенту пакет. Подробнее о параметрах этого свойства смотрите следующую таблицу. |
| ResolveToDataSet | Определяет, как обновляются данные. Если содержит True - то в НД, указанном в свойстве DataSet. Иначе - непосредственно в серверной БД. |
| UpdateMode | Определяет критерии поиска записи в наборе данных при сохранении изменений этой записи клиентом. Если значение upWhereAll, поиск записи ведется по всем полям; если upWhereChanged - по ключевым и измененным полям; если upWhereKeyOnly - только по ключевым полям. |
| Параметр | Описание |
|---|---|
| poFetchBlobsOnDemand | По умолчанию, данные из полей клиенту не пересылаются, чтобы излишне не загружать трафик. Если свойство содержит True - данные пересылаются. Иначе, эта возможность отключена, и чтобы получить -данные записи, клиентское приложение должно явно использовать метод FetchBlobs. |
| poFetchDetailsOnDemand | Данные из вложенных или |
| poIncFieldProps | В пакет включаются такие свойства полей, как Alignment, DisplayLabel, DisplayWidth, Visible, DisplayFormat, EditFormat, MaxValue, MinValue, Currency, EditMask, DisplayValues. |
| poCascadeDeletes | Дает серверу распоряжение автоматически удалять каскадным методом записи из |
| poCascadeUpdates | Дает серверу распоряжение автоматически изменять каскадным методом записи из |
| poReadOnly | Данные клиенту предоставляются только для чтения. |
| poAllowMultiRecordUpdates | Параметр допускает индивидуальные обновления сразу нескольких записей. Если параметр = False, множественные обновления будут автоматически прерваны. |
| poDisableInserts | Параметр запрещает клиенту вставку новых записей. |
| poDisableEdits | Параметр запрещает клиенту редактирование записей. |
| poDisableDeletes | Параметр запрещает клиенту удаление записей. |
| poNoReset | Запрещает обновление набора данных сервера перед передачей записей клиенту. |
| poAutoRefresh | Разрешает автоматическое обновление записей клиента при их изменении. Для ускорения работы эта опция по умолчанию отключена. |
| poPropogateChanges | Обновления, сделанные в событиях BeforeUpdateRecord или AfterUpdateRecord передаются клиенту в пакете, и объединяются с клиентским набором данных. |
| poAllowCommandText | Предоставляет клиенту возможность отменить НД, заменяя его НД, полученным SQL -запросом. |
| poRetainServerOrder | Запрещает клиенту изменять сортировку записей, полученную по умолчанию. |
| Метод | Описание |
|---|---|
| ApplyUpdates | Обновляет данные. Имеет параметры: Delta - измененные, новые или удаленные записи; MaxError - максимальное количество ошибок, при котором обновление прекращается (0 - не ограничено); ErrorCount - количество допущенных ошибок. Метод возвращает клиенту набор записей, при обновлении которых произошла ошибка. |
| DoDelete | Вызывается для каждой записи, которая должна быть удалена. |
| DoInsert | Вызывается для каждой новой записи. |
| DoUpdate | Вызывается для каждой модифицированной записи. |
| EndUpdate | Вызывается в момент завершения обновлений. |
| LogUpdateError | Добавляет ошибочную запись в |
На следующей лекции мы подробно разберем создание клиентской части многоуровневых приложений.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.