Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РГР на русском.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
290.82 Кб
Скачать

Добавление нового пользователя

Реализуем добавление нового пользователя. Сгенерируйте обработчик нажатия на кнопку "Добавить". Код обработчика следующий:

{Нажали "Добавить"}

procedure TfMain.bAddUserClick(Sender: TObject);

begin

//вначале очистим данные, которые могут быть

//в редакторе пользователей:

fEditor.eUser.Text:= '';

fEditor.ePass.Text:= '';

fEditor.ePass2.Text:= '';

fEditor.eName.Text:= '';

fEditor.eMiddle.Text:= '';

fEditor.eLast.Text:= '';

//теперь показываем форму:

fEditor.ShowModal;

//если изменений делать не нужно, просто выходим:

if not Editor.izmen then Exit;

//иначе готовим компонент IBSS к созданию нового пользователя.

IBSS.Active:= True;

try

//теперь вводим данные нового пользователя:

IBSS.UserName:= fEditor.eUser.Text;

IBSS.Password:= fEditor.ePass.Text;

IBSS.FirstName:= fEditor.eName.Text;

IBSS.MiddleName:= fEditor.eMiddle.Text;

IBSS.LastName:= fEditor.eLast.Text;

//вызываем метод AddUser, который добавляет пользователя:

IBSS.AddUser;

finally

IBSS.Active:= False; //закрываем компонент

end; //try

//перечитываем информацию о пользователях:

ReloadUsers;

end;

Поскольку пользователь у нас новый, данных на него пока никаких нет. Значит, вначале мы очистим все Edit на форме редактора, и только потом покажем ее.

Когда администратор закончит работу с формой, и закроет ее, начинает работу следующая строка процедуры:

//если изменений делать не нужно, просто выходим:

if not Editor.izmen then Exit;

То есть, если администратор не нажал кнопку "Подтвердить", мы просто выйдем, ничего не делая. Если же процедура работает дальше, то нужно сохранить нового пользователя:

IBSS.Active:= True;

try

//теперь вводим данные нового пользователя:

IBSS.UserName:= fEditor.eUser.Text;

IBSS.Password:= fEditor.ePass.Text;

IBSS.FirstName:= fEditor.eName.Text;

IBSS.MiddleName:= fEditor.eMiddle.Text;

IBSS.LastName:= fEditor.eLast.Text;

//вызываем метод AddUser, который добавляет пользователя:

IBSS.AddUser;

Как видите, при сохранении данных мы используем свойства компонента IBSecurityService UserName (логин), Password (пароль), FirstName (имя), MiddleName (отчество) и LastName (фамилия). Есть еще два свойства, которые мы не использовали, и которые устанавливаются по умолчанию в ноль: UserID (идентификатор пользователя) и GroupID (идентификатор группы), обычно программисты не задействуют эти параметры. Физически новый пользователь добавляется методом AddUser. В заключение процедуры мы отключаем IBSecurityService и вызываем процедуру ReloadUsers для обновления данных.

Сохраните проект, скомпилируйте его и попробуйте добавить нового пользователя. Пользователь должен появиться в окне ListBox, кроме того, он должен быть виден и в утилите IBConsole, в разделе Users дерева серверов.

Редактирование пользователя

Редактирование выбранного пользователя вызывается кнопкой "Редактировать". Сгенерируйте этот обработчик. Вот его код:

{Нажали "Редактировать"}

procedure TfMain.bModifyUserClick(Sender: TObject);

var i: Integer; //счетчик

begin

//если не один пользователь не выбран, просто выходим:

if LB1.ItemIndex = -1 then begin

ShowMessage('Выберите пользователя!');

Exit;

end

//если выбран SYSDBA, тоже выходим:

else if LB1.Items[LB1.ItemIndex] = 'SYSDBA' then begin

ShowMessage('Редактировать пользователя SYSDBA нельзя.');

Exit;

end; //else if

//иначе редактируем

//установим у IBSecurityService выбранного пользователя:

IBSS.Active:= True;

IBSS.UserName:= LB1.Items[LB1.ItemIndex];

//найдем в IBSS индекс нужного пользователя:

for i:= 0 to IBSS.UserInfoCount - 1 do

if IBSS.UserInfo[i].UserName =

LB1.Items[LB1.ItemIndex] then break;

//теперь i содержит индекс пользователя

//заполняем редактор пользователей данными:

fEditor.eUser.Text:= IBSS.UserInfo[i].UserName;;

//раз пользователь уже есть, выводим единички в качестве пароля:

fEditor.ePass.Text:= '11111111111111111111';

fEditor.ePass2.Text:= '11111111111111111111';

fEditor.eName.Text:= IBSS.UserInfo[i].FirstName;

fEditor.eMiddle.Text:= IBSS.UserInfo[i].MiddleName;

fEditor.eLast.Text:= IBSS.UserInfo[i].LastName;

//теперь покажем редактор:

fEditor.ShowModal;

//если изменений делать не нужно, просто выходим:

if not Editor.izmen then Exit;

//иначе сохраняем их:

try

//Имя пользователя менять не будем.

//Сохраним пароль, если там не единички:

if fEditor.ePass.Text <> '11111111111111111111' then

IBSS.Password:= fEditor.ePass.Text;

//Далее сохраняем остальные параметры:

IBSS.FirstName:= fEditor.eName.Text;

IBSS.MiddleName:= fEditor.eMiddle.Text;

IBSS.LastName:= fEditor.eLast.Text;

//сохраняем изменения физически методом ModifyUser:

IBSS.ModifyUser;

finally

IBSS.Active:= False;

end; //try

//перечитываем информацию о пользователях:

ReloadUsers;

end;

Подробно разбирать весь код не будем, так как комментариев достаточно, но остановимся на некоторых моментах. Строка

IBSS.UserName:= LB1.Items[LB1.ItemIndex];

делает в компоненте IBSS текущим пользователем того, который в данный момент выбран в списке ListBox. Затем мы находим индекс этого пользователя в списке. Зачем это нужно? Дело в том, что данные о пользователе можно вытащить только через свойство UserInfo. Другими словами, если мы хотим посмотреть отчество пользователя, то IBSS.MiddleName вернет пустую строку, даже если отчество есть, а IBSS.UserInfo[i].MiddleName вернет отчество. При сохранении отчества нужно напротив, обращаться к IBSS.MiddleName. Физическое изменение данных реализуется методом ModifyUser. Сохраните проект, скомпилируйте его и попробуйте отредактировать какого либо существующего пользователя, например, добавив к нему дополнительные данные (фамилию, имя, отчество). После сохранения результата, в утилите IBConsole должны отобразиться эти данные.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]