Советы по Delphi

       

Отклик 1 - Сергей Качалов


Привет, Валь!

>Кто-нибудь еще разрабатывал DCOM-объекты?

Отчасти. Как только я за них вплотную взялся, еще с Delphi3 так тут же выяснились некоторые скверные детали:

1. DCOM не поддерживается в стандартной поставке Win95, только на NT. Для того, чтобы заставить клиентское приложение работать, надо либо доустанавливать на 95 поддержку DCOM, либо иметь у клиента NT (Ws или сервер - все равно). Насчет 98 не знаю.
2. На сервере надо устанавливать специальные права доступа с помощью утилиты Dcomcnfg.exe

Лично мне так и не удалось заставить ЭТО работать в РЕАЛЬНОЙ обстановке. т.е. не на одной машине, в качестве эксперимента (с этим все OK), а именно в распределенной системе. А у тебя получилось?

Зато все прекрасно получилось с Delphi4, только не с помощью DCOMConnection, а с помощью SocketConnection. Строго говоря, сама технология COM при этом никуда не девается, но она полностью остается на стороне сервера. У клиента действительно устанавливается только два файла, о которых ты упомянул. В качестве недостатка (относительного) - понижение уровня защиты. Все остальное остается на своих местах. Я пробовал. Более того, в качестве экстремальных испытаний я добился вполне сносной работы при соединении клиента модемом на 2400!

Существует и еще один интересный момент. Можно заставить программу работать с базой данных без BDE. Стандартными методами.
Боюсь ошибиться, еще осенью это проделывал, но саму технологию испытал - работает. Смысл в том, что в клиентской программе, работающей с базой данных, для соединения с данными используется CLientDataSet, вернее, его свойство сохранять работоспособность при временном отключении от базы данных. В качестве базы данных _временно_ используется локальный файл. Как известно, нет ничего более постоянного, чем "временное" :)
Сначала создается реальная таблица. Потом в приложении цепляешься к данным следующим образом:
TTable -> Provider -> ClientDataSet -> DataSource -> (далее по вкусу) В ClientDataSet делаешь непустым свойство FileName.
Активизируешь все это. В результате в файле, имя которого ты указал, создается рабочий буфер Ttable.
Свойство Active у ClientDataSet сбрасываешь в False.
Удаляешь из проекта TTable - больше он не нужен. (можно, собственно, и оставить - мешать не будет). С таким же успехом, вообще говоря, там может быть и TQuery.

Чего я не испытывал, так это "предела прочности" такой схемы, то есть как долго и с каким размером подобная "база данных" будет работать без сбоев. На тестовом проекте никаких проблем не возникало.

[-skip(личная переписка)-]

Всего.
Сергей Качалов. [000143]



Содержание раздела