Н. 3. Епманова. C++Builder 3.0, архитектура "клиент/сервер" и Internet
STDMETHODIMP TMyRDMImpl::Login(BSTR username, BSTR password)
{ try
{
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IMyRDM);
}
return S_OK;
};
Осталось внести код в защищенный блок: STDMETHODIMP TMyRDMImpl::Login(BSTR username,   BSTR password)
{ try
{
m_DataModule->Database1->Connected=false; m_DataModule->Database1->Params->
Values.[ "Password" ]=password; m_DataModule->Database1->Params->
Values["User Name"]=username; m_DataModule->Database1->Connected=true; m_DataModule->Table1 ->0pen(); m_DataModule->Table2->Open();
}
catch(Exception &e)
{
return Error(e.Message.c_str()
}
return S_OK;
};
В этом фрагменте кода m_DataModule - объект, создаваемый в конструкторе IDataBrokerlmpl, т. е. конкретный экземпляр удаленного модуля
данных.
Отметим также, что в h-файле модуля, связанного с библиотекой типов, появилось соответствующее описание вновь созданного метода: HRESULT  /*[VT_HRESULT:0]*/    Login(BSTR username/*[in]*/,BSTR password/*[in]*/)
{
static _TDispID _dispid(*this, OLETEXT("Login"),
IID_IMyRDM);
Создание многозвенных информационных систем с помощью C++Builder 3.0
DISPID(3));
TAutoArgs<2> _args; _args[1] = username /*[VT_BSTR:0]*/; _args[2] = password /*[VT_BSTR:0]*/; return 01eFunction(_dispid, _args); }
Скомпилируем и сохраним сервер приложений.
Теперь внесем изменения в клиентское приложение. Для этого добавим к проекту клиентского приложения форму, на которую поместим две метки, два компонента TEdit и кнопку (рис. 8.31).
Рис. 8.31. Диалог ввода пароля в клиентском приложении
В качестве значения свойства ModalResult кнопки выберем mrOk, а в качестве значения PasswordChar компонента Edit2 - какой-нибудь символ (например, *). В текст модуля включим ссылку на h-файл модуля, связанного с главной формой.
Создадим обработчик события, связанного с нажатием на кнопку:
void _fastcall TForm2::Button1Click(TObject  *Sender)
{
Forml->ClientDataSet1->Close();
Forml->ClientDataSet2->Close();
Variant  svr=Form1->MIDASConnection1->AppServer;
svr.01eProcedure("Login",Edit1->Text,Edit2->Text);
//вызовем метод Login()  с двумя параметрами... Forml->ClientDataSet1->ProviderName="Table1"; Forml->ClientDataSet2-sProviderName="Table2"; Forml->ClientDataSet1->0pen(); Forml->ClientDataSet2->Open(); }
Теперь перейдем к главной форме приложения. Включим в текст модуля ссылку на h-файл только что созданного диалога ввода имени и пароля,
198
199