Dcom server (delphi), подключение к базе в реал тайм режиме
От: CooperUK  
Дата: 25.03.03 17:24
Оценка:
Сервер приложений должен поключаться к базе даних не в дизайне, а в рантайм при старте берёт данные из логфайла или реестра. К модулю RemoteDataModule доступа не будет, пока не создана переменная типа модуля (как форма). Но переменная делает копию модуля, клиент же работает с оригиналом... По этому при статре сервера (когда конектиться клиент) возникает ошибка — сервер не подключён к базе даных...
Если можете подсказать, — подскажите. Буду благодарен.
Re: Dcom server (delphi), подключение к базе в реал тайм ре
От: tim_ Россия  
Дата: 26.03.03 23:05
Оценка:
Здравствуйте, CooperUK.

Есть вариант: устанавливать соединение с БД хоть и после подключения клиента, но до его первого обращения к данным (или во время). Самое простое -- создать функцию регистрации клиента в интерфейсе вашего сервера. Эту функцию клиент будет вызывать клиентское приложение сразу после установки соединения с серверным. Примерно так:

Клиент устанавливает соединение:

try
  ...
  ConnectionBroker.Open;
  ConnectionBroker.AppServer.RegisterClient(LoginStr, PasswordStr);
  ...
except
  ...
  raise;
end;


Где функция RegisterClient объявлена в интерфейсе сервра:

[
  uuid(E97A5961-098C-11D7-B602-00609762EB02), 
  version(1.1), 
  helpstring("Dispatch interface for MyDCOMServer Object"), 
  dual, 
  oleautomation
]
 interface IMyDCOMServer: IAppServer
{

  HRESULT _stdcall RegisterClient([in] BSTR UserName, [in] BSTR UserPassword );
  [
  id(0x00000002)
  ]
  ...
};


В RemoteDataModule следующее:

...

interface

...

  TMyRemoteDataModule = class(TRemoteDataModule, IElibEditorServer)
    ...
  protected
    ...
    procedure RegisterClient(const UserName, UserPassword: WideString); safecall;
    ...
  end;

...

implementation

...

procedure TMyRemoteDataModule.RegisterClient(const UserName, UserPassword: WideString);
begin
  ... // Устанавливаем соединение с БД
end;


В общем-то, лучше было бы сделать не процедуру, а функцию, возвращающую код ошибки.

У меня, например, компонент соединения с сервером лежит в отдельном модуле и является общим для нескольких (или всех) клиентов. У каждого клиента в RemoteDataModule свои транзакции, а подключение компонента соединения происходит еще до появления первого клиента... Да, шевелится это все на InterBase.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.